10级数据库技术试题答案.docx
《10级数据库技术试题答案.docx》由会员分享,可在线阅读,更多相关《10级数据库技术试题答案.docx(13页珍藏版)》请在冰豆网上搜索。
10级数据库技术试题答案
10级数据库技术试题(答案)
中南大学考试试卷(答案)
2010--2011学年下学期时间100分钟
数据库应用基础课程56学时3.5学分考试形式:
闭卷
专业年级:
商学院10级总分100分,占总评成绩70%
注:
请将答案直接写在试卷上!
在本试卷中除特殊说明外数据库系统为SQLSERVER,均采用下列表:
学生信息表Student(NO,NAME,AGE,SEX,CLASS,NA),其字段名分别表示学号(CHAR(4))、姓名(VARCHAR(8))、年龄(INT)、性别(CHAR
(2))、班级(VARCHAR(4))、民族(VARCHAR(18)),主键为NO。
教师信息表T(NO,NAME,sex,ab),其字段名分别表示教师编号(Char(4))、姓名(varchar(8))、性别(char
(2))、职称(Varchar(6)),主键为NO。
课程信息表C(NO,NAME,TNO),其字段名分别表示课程编号(Char(4))、课程名称(VARCHAR(12))、授课教师编号(varchar(4),主键为(NO,TNO)。
学生选课及成绩表SC(NO,CNO,GRADE),其字段名分别表示学号(char(4))、课程编号(char(4)、成绩(int),主键为(NO,CNO)。
在企业管理器中按下列方式录入数据保存。
Student的数据
NO
Name
Age
Sex
CLASS
NA
0101
刘琳
20
女
1002
汉族
0105
王刚
21
男
1015
苗族
0102
李晓
22
女
1015
土家族
0110
张明
NULL
男
1002
汉族
0108
周冰
21
女
1015
苗族
2031
NULL
20
男
1002
汉族
T的数据
NO
Name
Sex
AB
1003
刘瑞
女
讲师
2020
陈晓
男
副教授
0102
李斌
女
教授
C的数据
NO
Name
TNO
2010
数据库技术
1003
2010
数据库技术
0102
2015
高等数学
2020
SC的数据
NO
CNO
GRADE
0105
2010
88
0108
2010
90
1010
2010
85
0101
2010
NULL
0105
2015
78
0102
2010
NULL
0110
2015
80
0108
2015
NULL
0102
2015
82
0112
2015
NULL
一、已知属性集U={学号、姓名、性别、年龄、民族、班级编号、班级名称、班长、身份证号、所属学院编号,所属学院名称、宿舍号、家庭住址},写出下列要求的关系模式,并说明理由。
(共10分)
(1)写出U的一个关系模式,使其具有完全函数依赖关系;
解:
班级(班级编号、班级名称、班长),班级编号
{班级名称、班长}
或:
学院(学院编号,学院名称),学院编号
学院名称
或:
学生(学号、姓名、性别、年龄、民族、班级编号、身份证号、所属学院编号、宿舍号、家庭住址)
学号
{姓名、性别、年龄、民族、班级编号、身份证号、所属学院编号,宿舍号、家庭住址}
身份证号
{学号,姓名、性别、年龄、民族、班级编号、所属学院编号,宿舍号、家庭住址}
(2)写出U的一个关系模式,使其具有部分函数依赖关系;
解:
班级(班级编号、宿舍号、班级名称、班长)
(班级编号、宿舍号)
班级名称
(3)写出U的一个关系模式,使其具有传递函数依赖关系;
传递
解:
学生(学号、姓名、性别、年龄、民族、班级编号、班级名称、班长、宿舍号、家庭住址)。
学号
班级编号,班级编号
班级名称,
学号
班级名称
传递
或:
学生(学号、姓名、性别、年龄、民族、班级编号、所属学院编号,所属学院名称、宿舍号、家庭住址)。
学号
所属学院编号,所属学院编号
所属学院名称
学号
所属学院名称
(4)写出U的一个关系模式,使其具有二个关键字;
解:
学生(学号、姓名、性别、年龄、民族、班级编号、身份证号、所属学院编号、宿舍号、家庭住址)。
关键字为:
学号或身份证号。
学号
{姓名、性别、年龄、民族、班级编号、身份证号、所属学院编号,宿舍号、家庭住址}
身份证号
{姓名、性别、年龄、民族、班级编号、身份证号、所属学院编号,宿舍号、家庭住址}
(5)写出U的一个关系模式,使其具有完全函数依赖关系但不具有传递依赖关系。
解:
学生(学号、姓名、性别、年龄、民族、班级编号、身份证号、所属学院编号,宿舍号、家庭住址)。
学号
{姓名、性别、年龄、民族、班级编号、身份证号、所属学院编号,宿舍号、家庭住址}
身份证号
{学号,姓名、性别、年龄、民族、班级编号、所属学院编号,宿舍号、家庭住址}
二、已知某饲料企业的产品出库单下图所示,按下列要求设计满足条件的数据库(即一个或多个表),并说明理由。
(共12分)
A饲料厂产品销售单
销售单位名称
销售单号
产品名称
规格型号
计量单位
单价
数量
金额
总金额
开票人:
发货人:
(1)满足1NF但不满足2NF的数据库(4分);
解:
假设数据库中销售单号是唯一的,数据库中仅存储销售单中的相关信息。
销售信息表(销售单号,销售单位名称,产品名称,规格型号,计量单位,单价,数量,金额,总金额,开票人,发货人)
码:
销售单号+产品名称+规格型号
(销售单号,产品名称,规格型号)
计量单位,不满足2NF。
(2)满足2NF的数据库(4分);
解:
产品(产品名称,规格型号,计量单位,单价)。
出售(销售单号,产品名称,规格型号,单价,数量,金额)
销售单(销售单号,销售单位名称,开票人,发货人,总金额)
(3)满足3NF的数据库(4分)。
解:
产品(产品名称,规格型号,计量单位,单价)
销售(销售单号,产品名称,规格型号,单价,数量,金额)
销售单(销售单号,开票人,发货人,总金额)
职员(职员姓名,所属单位)
三、判断下列描述或命令是否正确,如果不正确,请在不改变原来命令意义的基础上改正(共30分)
(1)数据库中模式、外模式和模式/内模式映像是唯一的。
当模式改变时,只要修改外模式/模式映像,应用程序不需要修改,这一特性,称为物理独立性。
改为:
数据库中模式、模式/内模式映像是唯一的。
当内模式改变时,只要修改模式/模式映像,应用程序不需要修改,这一特性,称为物理独立性。
(2)若F是关系R的外码,它与S的主码相对应,根据参照完整性规则,R中每个元组在F上的取值等于S中某个元组的主码值。
改为:
若F是关系R的外码,它与S的主码相对应,根据参照完整性规则,R中每个元组在F上的取值等于S中某个元组的主码值或为空值。
(3)在一个关系模式中,包含在主关键字中的属性称为主属性,主属性之外的属性称为非主属性。
改为:
在一个关系模式中,包含在关键字中的属性称为主属性,主属性之外的属性称为非主属性。
(4)createviewV_student_SC(学号,姓名,课程编码,成绩)as
Selectstudent.no,student.name,o,sc.gradefromstudenta,scbwherestudent.no=sc.noorderbyo
改为:
reateviewV_student_SC(学号,姓名,课程编码,成绩)as
Selectstudent.no,student.name,sc.no,sc.grade
fromstudent,scwherestudent.no=sc.no
(5)selectstudent.*,o,sc.gradefromstudentrightouterjoinscwherestudent.no=sc.no(注意:
如果认为这命令是错误的,改正时要用到外连接)
改为:
selectstudent.*,o,sc.gradefromstudentrightouterjoinsconstudent.no=sc.no
(6)selectno,classfromstudentwherename=’李%’andnoinselect*fromscwherestudent.no=sc.no
改为:
selectno,classfromstudentwherenamelike'李%'andnoin(selectnofromscwherestudent.no=sc.no)
(7)检索班级平均年龄大于18且为汉族的学生情况的命令为:
selectno,classfromstudentwherenotna=’汉族’orna=’苗族’andavg(age)>18
改为:
selectno,classfromstudentwhereclassin(selectclassfromstudentgroupbyclasshavingavg(age)>18)andna='汉族'
(8)selectstudent.no+age,name,sc.*fromstudent,scwherestudent.no=sc.nogroupbyohavingcount(cno)>2
改为:
selectofromstudent,scwherestudent.no=sc.nogroupbyohavingcount(cno)>2
(9)selectno,name,sex,classfromstudentwherena=’汉族’Union
Selectno,name,age,classfromstudentwherena=’苗族’
改为:
selectno,name,sex,classfromstudentwherena='汉族'Union
Selectno,name,sex,classfromstudentwherena='苗族'
(10)selectstudent.no,student.name,o,sc.gradefromc,studentleftouterjoinsconstudent.no=sc.noandc.no=o
改为:
selectstudent.no,student.name,o,sc.grade
fromc,studentleftouterjoinsconstudent.no=sc.nowherec.no=o
四、写出下列命令的结果。
(本题24分)
(1)selectno,agefromstudent;
no
age
0101
20
0102
22
0105
21
0108
21
0110
NULL
2031
20
(2)在STUDENT表中对AGE按升序建立索引后,执行下列命令:
selectage,nofromstudent;
age
no
NULL
0110
20
0101
20
2031
21
0105
21
0108
22
0102
(3)select*fromstudentorderbyage,name;
0110
张明
NULL
男
1002
汉族
2031
NULL
20
男
1002
汉族
0101
刘琳
20
女
1002
汉族
0105
王刚
21
男
1015
苗族
0108
周冰
21
女
1015
苗族
0102
李晓
22
女
1015
土家族
(4)selectstudent.no,student.name,student.agefromstudentwhereclass>'1001'
andnoin(selectsc.nofromstudentleftouterjoinsconstudent.no=sc.nowhereoin(selectnofromCwherenamelike'数据库%'))
0101
刘琳
20
0102
李晓
22
0105
王刚
21
0108
周冰
21
(5)selectstudent.no,student.name,student.class,o,sc.gradefromstudentrightouterjoinsconstudent.no=sc.nowhereoin(selectnofromcwheretnoin(selectnofromTwheresex='女'))andexists(selectclassfromstudentgroupbyclasshavingavg(age)>17)
no
name
class
cno
grade
0101
刘琳
1002
2010
NULL
0102
李晓
1015
2010
NULL
0105
王刚
1015
2010
88
0108
周冰
1015
2010
90
NULL
NULL
NULL
2010
85
(6)select*fromstudentwhereage>(selectavg(age)fromstudentgroupbyclasshavingavg(age)>20)andnoin(selectnofromscgroupbynohavingavg(grade)>80andcount(cno)>1)
no
name
age
sex
class
na
0102
李晓
22
女
1015
土家族
(7)selectstudent.no,student.name,student.class,o,sc.gradefromstudent,sc,Cwherestudent.no=sc.noando=c.noandc.name='数据库技术'orderbysc.grade
0101
刘琳
1002
2010
NULL
0101
刘琳
1002
2010
NULL
0102
李晓
1015
2010
NULL
0102
李晓
1015
2010
NULL
0105
王刚
1015
2010
88
0105
王刚
1015
2010
88
0108
周冰
1015
2010
90
0108
周冰
1015
2010
90
(8)selectstudent.class,o,avg(grade)fromstudent,scgroupbystudent.class,ohavingcount(cno)>1
1002
2010
87
1015
2010
87
1002
2015
80
1015
2015
80
五、用一条命令完成下列操作(本题24分)
(1)检索少数民族学生的所有课程的成绩;
Selectno,cno,gradefromscwherenoin(selectnofromstudentwhereNA!
='汉族')
Nocnograde
01022010NULL
0102201582
0105201088
0105201578
0108201090
01082015NULL
(2)检索没有选择刘老师的数据库技术课程的男同学的情况;
Select*fromstudentwheresex='男'andnonotin(selectnofromscwherecnoin
(selectnofromcwherename='数据库技术'andtnoin
(selectnofromtwherenamelike'刘%')))
Nonameagesexclassna
0110张明NULL男1002汉族
2031NULL20男1002汉族
(3)检索教数据库技术的各位老师所授班级的平均成绩;
Selectavg(grade)fromsc,student,c,twheresc.no=student.noando=c.noandc.tno=t.noandc.name='数据库技术'Groupbystudent.class
(无列名)
NULL
89
(4)删除在STUDENT上建立的名为AB的索引;
Dropindexstudent.ab
(5)检索选择了副教授以上(含副教授)职称老师二门以上课程的学生的情况;
Selectsc.nofromstudent,sc,c,twheresc.no=student.noando=c.noandc.tno=t.noand
t.abnotlike'讲师'groupbysc.nohavingcount(sc.no)>=2
no
0102
0105
0108
(6)将张姓同学和陈姓同学选择了刘老师数据库课程且各门课程平均成绩大于60的学生的课程成绩为NULL更新为0。
Updatescsetgrade=0
WheregradeisNULLandnoin(selectstudent.nofromstudent,sc,c,twheresc.no=student.noando=c.noandc.tno=t.noand(student.namelike'张%'orstudent.namelike'陈%')andt.namelike'刘%'andc.name='数据库技术'groupbystudent.nohavingavg(student.no)>60)
(7)显示男同学的学号、姓名、班级、课程名称和课程成绩,要求按选择的课程门数和班级进行排序。
Selectstudent.no,student.name,student.class,c.name,sc.gradefromsc,student,cwheresc.no=student.noando=c.noandorderbycount(o),student.class
(8)现在有一门必修课,课程编码为‘0001’,在SC中加入相关信息(其成绩为NULL)后老师只有录入相关成绩就行了。
Insertintosc(no,cno)
Selectno,'0001'fromstudent