实验三 数据表的创建与管理实验.docx
- 文档编号:12391917
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:16
- 大小:130.60KB
实验三 数据表的创建与管理实验.docx
《实验三 数据表的创建与管理实验.docx》由会员分享,可在线阅读,更多相关《实验三 数据表的创建与管理实验.docx(16页珍藏版)》请在冰豆网上搜索。
实验三数据表的创建与管理实验
南京晓庄学院
《数据库原理与应用》
课程实验报告
实验三数据表的创建与管理实验
所在院(系):
数学与信息技术学院
班级:
学号:
姓名:
1.实验目的
(1)理解SQLServer2005常用数据类型和表结构的设计方法。
理解主键、外键含义,掌握建立各表相关属性间参照关系的方法。
(2)熟练掌握使用SQLServerManagementStudio图形工具创建表,删除表,修改表结构,插入及更新数据的方法。
(3)熟练掌握使用Transact-SQL语句创建表,删除表,修改表结构,插入及更新数据的方法。
2.实验要求
基本实验:
(1)在实验二所创建的“TM”数据库中合理设计以下各表逻辑结构:
学生信息(学号,姓名,性别,籍贯,出生日期,民族,学院/系别号,班级号)
课程信息(课程号,课程名称,课程所属模块,课程类别,学分,学时)
学习信息(学号,课程号,考试成绩,平时成绩)
院系信息(院系号,院系名称)
要求确定各个字段的名称、类型、是否有默认值,是否主键等信息。
(2)依据你所设计的表结构,使用SQLServerManagementStudio图形工具在“TM”数据库中创建学生信息表和课程信息表,并试验在图形界面中修改表结构,删除数据表,输入并更新数据的方法。
(3)依据你所设计表结构,使用Transact-SQL语句创建学习信息表和院系信息表,并试验使用T-SQL语句修改表结构,删除数据表,插入和更新数据的方法。
(4)找出已创建各表之间相关属性的参照关系,并在相关表中增加引用完整性约束。
(5)按要求完成实验报告。
扩展实验:
(1)在“TM”数据库中补充设计以下各表结构:
授课信息(教师号,课程号,学期)
教师信息(教师号,姓名,性别,出生日期,学历,学位,入职时间,职称,院系号)
班级信息(班级号,班级名称,专业号)
专业信息(专业号,专业名称,学制,学位)
图书信息(图书号,书名,作者,出版社,出版日期,册数,价格,分类)
借书偏息(学号,图书号,借出时间,归还时间)
奖励信息(学号,奖励类型,奖励金额)
(2)设计并实现各表之间相关属性的参照关系。
(3)使用SQLManagementStudio图形界面或Transact-SQL在“TM”数据库中创建前述各表,并插入部分数据,要求所插入数据合理有效。
学生信息(学号,姓名,性别,籍贯,出生日期,民族,学院/系别号,班级号)
createtablestu(
stu_idintprimarykey,
namechar(10),
sexchar
(2)check(sexin('男','女')),
birthplacechar(40),
birthdatedatetime,
mingzuchar(10),
dept_idint,
class_idint
)
insertintostu(stu_id,name,sex)values(1,'晓雪','女');
insertintostu(stu_id,name,sex)values(2,'福云','女');
院系信息(院系号,院系名称)
createtabledept(
dept_idintprimarykey,
namechar(40)
);
课程信息(课程号,课程名称,课程所属模块,课程类别,学分,学时)
createtablecourse(
course_idintprimarykey,
namechar(40),
cmodulechar(20),
levelint,
gradeint,
classint
);
insertintocoursevalues(1,'晓雪','4',1,6,80);
学习信息(学号,课程号,考试成绩,平时成绩)
createtablestudy(
study_idintprimarykey,
course_idintnotnull,
testGradefloatnotnull,
usualGradefloat,
foreignkey(course_id)referencescourse(course_id)
);
教师信息(教师号,姓名,性别,出生日期,学历,学位,入职时间,职称,院系号)
createtableteacher(
teacher_idintprimarykey,
namechar(20)notnull,
sexchar
(2)check(sexin('男','女')),
birthdatedatetime,
resumechar(20)notnull,
xueweichar(20),
jobdatedatetime,
positionchar(20),
dept_idint,
foreignkey(dept_id)referencesdept(dept_id)
);
insertintoteacher(teacher_id,name,sex,resume)values(1,'aaa','男','本科');
奖励信息(学号,奖励类型,奖励金额)
createtableaward(
stu_idintprimarykey,
typechar(20)notnull,
moneyfloat
);
图书信息(图书号,书名,作者,出版社,出版日期,册数,价格,分类)
createtablelibrary(
book_idintprimarykey,
namechar(20)notnull,
authornchar(20)notnull,
publishHousenchar(20)notnull,
publishDatedatetime,
numberint,
pricefloat,
bookTypechar(20)
);
班级信息(班级号,班级名称,专业号)
createtableclass(
class_idintprimarykey,
namenchar(10)notnull,
major_idint,
foreignkey(major_id)referencesmajor(major_id)
);
专业信息(专业号,专业名称,学制,学位)
createtablemajor(
major_idintprimarykey,
namenchar(10)notnull,
xuezhiint,
positionnchar(10)
);
授课信息(教师号,课程号,学期)
createtableteach(
teacher_idint,
course_idint,
xueqichar(5),
primarykey(teacher_id,course_id),
);
借书偏息(学号,图书号,借出时间,归还时间)
createtableborrow(
stu_idint,
book_idint,
borrowDatedatetime,
lendDatedatetime,
primarykey(stu_id,book_id)
);
3.实验步骤、结果和总结实验步骤/结果
(1)合理命名并设计学生信息、课程信息、学习信息和院系信息结构(字段名,数据类型,默认值,是否主键,取值范围描述等),以表格描述相关信息。
学生信息表
字段名
数据类型
默认值
是否主键
取值范围
Stu_id
int
无
是
Name
Char
Sex
Char
(男,女)
Birthdate
Datetim
Resume
Char
Xuewei
Char
Jobdate
Datetime
Postion
Datetime
Dept_id
int
课程信息
字段名
数据类型
默认值
是否主键
取值范围
Course_id
int
无
是
Name
Char
Cmodule
Char
(男,女)
Level
int
Grade
int
class
int
学习信息
字段名
数据类型
默认值
是否主键
取值范围
Study_id
int
是
Course_id
int
是
testGrade
float
usualGrade
flaot
院系信息
字段名
数据类型
默认值
是否主键
取值范围
Dept_id
int
无
是
name
char
(2)总结使用SQLServerManagementStudio创建学生信息、课程信息表,修改表结构,输入或更新表数据的过程或方法;
创建学生信息表:
createtablestu(
stu_idintprimarykey,
namechar(10),
sexchar
(2)check(sexin('男','女')),
birthplacechar(40),
birthdatedatetime,
mingzuchar(10),
dept_idint,
class_idint
)
修改表中列的数据类型
Altertablestualtercolumnbirthplacenchar(20);
在表中添加新的一列
Altertablestuaddcolumnageint;
插入一条学生记录
Insertintostu(stu_id,name,sex,birthplace,dept_id,class_id)values(1,’福云’,’女’,’江苏连云港’1,1)
修改记录
Updatestusetname=’晓雪’wherestu_id=1;
删除记录
Deletefromstuwherestu_id=1;
另外我们还使用SQLServerManagementStudio图形工具创建表,修改表,插入数据操作步骤:
创建学生信息表:
在“对象资源管理器”中,依次展开“数据库”→“TM”→“表”,右击选择新建表,输入表的各个字段,完成后右击保存该表,在弹出的对话框中,输入该表的表名“学生信息”
修改表结构:
右击“学生信息”表,点击“修改”,然后根据自己要修改的进行修改,如下图所示:
输入数据:
右击“学生信息表”点击“打开表”,根据字段输入相应的数据,如下图所示:
(3)写出实验中创建学习信息、院系信息表,试验修改表结构及删除数据表、插入和更新数据时,你所编写并成功执行的T-SQL语句。
学习信息(学号,课程号,考试成绩,平时成绩)
createtablestudy(
study_idintprimarykey,
course_idintnotnull,
testGradefloatnotnull,
usualGradefloat,
foreignkey(course_id)referencescourse(course_id)
);
院系信息
createtabledept(
dept_idintprimarykey,
namechar(40)
);
一院系信息表为例
修改表中字段的数据类型
Altertabledeptaltercolumnnamenchar(20);
插入一条记录
Insertintodeptvalues(1,’计算机与软件学院’);
更新一条记录
Updatedeptsetname=’数学与信息技术学院’wheredept_id=1;
删除一条记录
Deletefromdeptwheredept_id=1;
删除整张表
Droptabledept;
(4)说明学生信息、课程信息表、学习信息、院系信息表间相关属性的合理参照关系,写出相应的数据库中添加引用完整性约束的T-SQL语句或者探索并总结使用SQLServerManagementStudio图形工具在数据库中添加相应引用完整性约束的方法。
学生信息(学号,姓名,性别,籍贯,出生日期,民族,学院/系别号,班级号)
createtablestu(
stu_idintprimarykey,
namechar(10),
sexchar
(2)check(sexin('男','女')),
birthplacechar(40),
birthdatedatetime,
mingzuchar(10),
dept_idint,class_idint,foreignkey(dept_id)referencesdept(dept_id);//这是外键参照院系信息表的主键
foreignkey(class_id)referencesclass(class_id);//这是外键,参照班级表的主键
)
院系信息(院系号,院系名称)
createtabledept(
dept_idintprimarykey,//主键
namechar(40)
);
课程信息(课程号,课程名称,课程所属模块,课程类别,学分,学时)
createtablecourse(
course_idintprimarykey,
namechar(40),
cmodulechar(20),
levelint,
gradeint,
classint
);
学习信息(学号,课程号,考试成绩,平时成绩)
createtablestudy(
study_idintprimarykey,
course_idintnotnull,
testGradefloatnotnull,
usualGradefloat,
foreignkey(course_id)referencescourse(course_id)//这是外键,参照课程表中主键
);
(5)扩展实验完成总结(可选)。
在数据库“TM”中,再添加些表,由于上面用的是T—SQL语句创建的,所以这边再用SQLServerManagementStudio图形工具创建表。
SQLServerManagementStudio图形工具创建表的步骤:
在“对象资源管理器”中,依次展开“数据库”→“TM”→“表”,右击选择新建表,输入表的各个字段,完成后右击保存该表,在弹出的对话框中,输入该表的表名。
部分截图如下所示(奖励信息表和专业信息表):
基本上和学生表、学习表、院系表创建建方法一样,注意主外键关系即可。
4.实验思考:
①你认为在教学管理中还可以增加管理哪些信息,可以再为数据库增加设计哪些表或为已有表增加设计哪些属性字段?
说出理由。
答:
可以增加的表
考试时间表(院系名称,课程名称,考试地点,考试时间,监考人员,监考人数)
宿舍分布表(地区编号,宿舍楼编号,负责人姓名)
学生住宿表(院系号,地区编号,宿舍楼编号,房间编号,姓名,班级)
增加已有表中的属性字段:
课程信息表中可以增加教室和上课时间字段
学习信息表中可以增加是否住宿和所居住宿舍号的字段
②数据表中的主键有何特性,请设计实例验证主键的特性。
当相关数据表中已有数据时,
为各表之间增加参照关系时有可能会失败,为什么?
答:
主键具有如下特性:
(1)不重复性。
当将一列设置为主键时,则数据的取值在该列或者列组合中是唯一的,因此
主键列(或列组合)可以作为表中数据的标识列。
(2)非空性。
即主键列(或列组合)的每个数据不能出现空值。
(3)唯一性。
指一个表中最多只有一个主键。
创建表时可通过定义
PRIMARYKEY
约束来创建主键。
命令格式:
CREATTABLE表名
(列名
数据类型
CONSTRAINT主键约束名
PRIMARYKEY[CLUSTERED|NONCLUSTERED
)
主键可能所连接的字段设置的数据类型不同,各表之间增加参照关系会失败。
③总结SQL中数值数据,字符数据和日期数据常量的表示方法。
思考当向某表中插入记录时,若插入记录的某字段值的数据类型或精度与该表中对应字段定义不同时,会产生哪些结果?
请设计不同情况的实例加以验证。
1)数值数据
SQL支持许多种不同的数值型数据。
你可以存储整数 INT 、小数 NUMERIC、和钱数
MONEY。
INT VS SMALLINT VS TINYINT
他们的区别只是字符长度:
INT型数据的表数范围是从-2,147,483,647到2,147,483,647的整数SMALLINT 型数据可以存储从-32768到32768的整数TINYINT 型的字段只能存储从0到255的整数,不能用来储存负数通常,为了节省空间,应该尽可能的使用最小的整型数据。
一个TINYINT型数据只占用一个字节;一个INT型数据占用四个字节。
这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。
另一方面,一旦你已经创建了一个字段,要修改它是很困难的。
因此,为安全起见,你应该预测以下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。
2)字符数据
NVARCHAR 和NCHAR 和VARCHAR和CHAR区别如下图所示:
char(n)
定长
索引效率高程序里面使用trim去除多余的空白
n必须是一个介于1和8,000之间的数值,存储大小为n个字节
varchar(n)
变长
效率没char高灵活
n必须是一个介于1和8,000之间的数值。
存储大小为输入数据的字节的实际长度,而不是n个字节
nchar(n)
定长
处理unicode数据类型(所有的字符使用两个字节表示)
n的值必须介于1与4,000之间。
存储大小为n字节的两倍
nvarchar(n)
变长
处理unicode数据类型(所有的字符使用两个字节表示)
n的值必须介于1与4,000之间。
字节的存储大小是所输入字符个数的两倍。
所输入的数据字符长度可以为零
3)日期数据
DATETIME VS SMALLDATETIME 。
当直插入一个字段时,数据类型不一致时,出现如下图所示的错误提示:
当主键为空时,出现下图所示的错误提示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验三 数据表的创建与管理实验 实验 数据表 创建 管理