数据库原理复习练习题含答案4.docx
- 文档编号:27906596
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:26
- 大小:81.78KB
数据库原理复习练习题含答案4.docx
《数据库原理复习练习题含答案4.docx》由会员分享,可在线阅读,更多相关《数据库原理复习练习题含答案4.docx(26页珍藏版)》请在冰豆网上搜索。
数据库原理复习练习题含答案4
数据库原理复习练习题含答案
第10章数据库设计
1.试说明数据库设计的特点。
答:
综合性、结构设计和行为设计相分离。
2.简述数据库的设计过程。
答:
设计分为如下几个阶段。
●需求分析。
●结构设计,包括概念结构设计、逻辑结构设计和物理结构设计。
●行为设计,包括功能设计、事务设计和程序设计。
●数据库实施,包括加载数据库数据和调试运行应用程序。
●数据库运行和维护阶段。
3.数据库结构设计包含哪几个过程?
答:
包括概念结构设计、逻辑结构设计和物理结构设计。
4.需求分析中发现事实的方法有哪些?
答:
检查文档、面谈、观察操作中的业务、研究和问卷调查等。
5.概念结构应该具有哪些特点?
答:
∙有丰富的语义表达能力。
能表达用户的各种需求,包括描述现实世界中各种事物和事物与事物之间的联系,能满足用户对数据的处理需求。
∙易于交流和理解。
概念结构是数据库设计人员和用户之间的主要交流工具,因此必须能通过概念模型和不熟悉计算机的用户交换意见,用户的积极参与是数据库成功的关键。
∙易于更改。
当应用环境和应用要求发生变化时,能方便地对概念结构进行修改,以反映这些变化。
∙易于向各种数据模型转换,易于导出与DBMS有关的逻辑模型。
6.概念结构设计的策略是什么?
答:
概念结构设计的策略主要有如下几种:
∙自底向上。
先定义每个局部应用的概念结构,然后按一定的规则把它们集成起来,从而得到全局概念结构。
∙自顶向下。
先定义全局概念结构,然后再逐步细化。
∙由里向外。
先定义最重要的核心结构,然后再逐步向外扩展。
∙混合策略。
将自顶向下和自底向上方法结合起来使用。
先用自顶向下设计一个概念结构的框架,然后以它为框架再用自底向上策略设计局部概念结构,最后把它们集成起来。
7.什么是数据库的逻辑结构设计?
简述其设计步骤。
答:
逻辑结构设计的任务是把在概念结构设计中设计的基本E-R模型转换为具体的数据库管理系统支持的组织层数据模型,也就是导出特定的DBMS可以处理的数据库逻辑结构(数据库的模式和外模式),这些模式在功能、性能、完整性和一致性约束方面满足应用要求。
逻辑结构设计一般包含两个步骤:
●将概念结构转换为某种组织层数据模型。
●对组织层数据模型进行优化。
8.把E-R模型转换为关系模式的转换规则有哪些?
答:
转换的一般规则如下:
一个实体转换为一个关系模式。
实体的属性就是关系的属性,实体的码就是关系的主键(主码)。
对于实体间的联系有以下不同的情况:
(1)1∶1联系可以与任意一端实体所对应的关系模式合并,合并时只需在被合并的关系模式的属性中加入另一个实体的码和联系本身的属性。
(2)1∶n联系可以与n端所对应的关系模式合并,合并时只需在n端的关系模式中加入1端实体的码以及联系本身的属性。
(3)m∶n联系应该转换为一个独立的关系模式。
与该联系相连的各实体的码以及联系本身的属性均转换为联系所对应关系模式的属性,且该关系模式的主键包含各实体的码。
(4)三个或三个以上实体间的一个多元联系应该转换为一个关系模式。
与该多元联系相连的各实体的码以及联系本身的属性均转换为联系所对应的关系模式的属性,而此关系模式的主键包含各实体的码。
(5)具有相同主键的关系模式可以合并。
9.数据模型的优化包含哪些方法?
答:
(1)确定各属性间的函数依赖关系。
根据需求分析阶段得出的语义,分别写出每个关系模式的各属性之间的函数依赖以及不同关系模式中各属性之间的数据依赖关系。
(2)对各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
(3)判断每个关系模式的范式,根据实际需要确定最合适的范式。
(4)根据需求分析阶段得到的处理要求,分析这些模式对于这样的应用环境是否合适,确定是否要对某些模式进行分解或合并。
10.将下列给定的E-R图转换为符合3NF的关系模式,并指出每个关系模式的主键和外键。
(1)图10-15所示为描述图书、读者以及读者借阅图书的E-R图。
图10-15图书借阅E-R图
答:
图书(书号,书名,出版日期,作者名)
读者(读者号,读者名,联系电话,所在单位)
借阅(书号,读者号,借书日期,还书日期),书号为引用图书关系模式的外码,读者号为引用读者关系模式的外码。
(2)图10-16所示为描述商店从生产厂家订购商品的E-R图。
图10-16商品订购E-R图
答:
商店(商店编号,商店名,联系电话)∈3NF
商品(商品编号,商品名称,库存量,商品分类)∈3NF
厂家(厂家编号,联系地址,联系电话)∈3NF
订购(商店编号,厂家编号,商品编号,订购日期,订购数量),商店编号为引用商店关系模式的外码,厂家编号为引用厂家关系模式的外码,商品编号为引用商品关系模式的外码。
(3)图10-17为描述学生参加学校社团的E-R图。
图10-17学生参加社团E-R图
答:
下列各关系模式中用下划线标识主码。
社团(社团号,社团名,电话,性质)∈3NF
学生(学号,姓名,性别,专业,社团号,参加日期),社团号为引用社团的外码。
∈3NF
10.根据下列描述,画出相应的E-R图,并将E-R图转换为满足3NF的关系模式,指明每个关系模式的主键和外键。
现要实现一个顾客购物系统,需求描述如下:
一个顾客可去多个商店购物,一个商店可有多名顾客购物;每个顾客一次可购买多种商品,但对同一种商品不能同时购买多次,但在不同时间可购买多次;每种商品可销售给不同的顾客。
对顾客的每次购物都需要记录其购物的商店、购买商品的数量和购买日期。
需要记录的“商店”信息包括:
商店编号、商店名、地址、联系电话;需要记录的顾客信息包括:
顾客号、姓名、住址、身份证号、性别。
需要记录的商品信息包括:
商品号、商品名、进货价格、进货日期、销售价格。
答:
第11章存储过程和触发器
习题
1.存储过程的作用是什么?
为什么利用存储过程可以提高数据的操作效率?
答:
(1)允许模块化程序设计
(2)改善性能
(3)减少网络流量
(4)可作为安全机制使用
因为系统对存储过程是预编译的。
2.在定义存储过程的语句中是否可以包含数据的增、删、改语句?
答:
可以。
3.用户和存储过程之间如何传递数据?
答:
可通过输入、输出参数。
或者
4.存储过程的参数有几种形式?
答:
有输入和输出两种。
5.触发器的作用是什么?
前触发和后触发的主要区别是什么?
答:
实现复杂的处理逻辑和商业规则,增强了数据完整性约束的功能。
前触发器是在引发触发器执行的操作之前先执行触发器;后触发器是在引发触发器执行的操作执行完后再执行触发器。
6.插入操作产生的临时工作表叫什么?
它存放的是什么数据?
答:
inserted,存放新插入的数据。
7.删除操作产生的临时工作表叫什么?
它存放的是什么数据?
答:
deleted,存放被删除的数据。
8.更改操作产生的两个临时工作表叫什么?
其结构分别是什么,它们分别存放的是什么数据?
答:
inserted和deleted,结构同定义触发器的表,分别存放更新前和更新后的数据。
上机练习
1.利用第11章建立的students数据库以及Student、Coures、SC表,创建满足下述要求的存储过程,并查看存储过程的执行结果。
(1)查询每个学生的修课总学分,要求列出学生学号及总学分。
createprocp1
as
selectsno,SUM(credit)as总学分
fromSC
groupbysno
(2)查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在的系作为输入参数,执行此存储过程,并分别指定一些不同的输入参数值。
createprocp2
@deptvarchar(20)='计算机系'
as
selects.sno,sname,o,cname,credit
fromStudentsjoinSCons.Sno=SC.Sno
joinCourseconc.Cno=SC.Cno
whereSdept=@dept
执行示例1:
EXECP2
执行示例2:
EXECP2'通信工程系'
(3)查询指定系的男生人数,其中系为输入参数,人数用输出参数返回。
createprocp3
@deptvarchar(20),@rsintoutput
as
select@rs=COUNT(*)fromStudent
whereSdept=@deptandSsex='男'
(4)查询考试平均成绩超过指定分值的学生学号和平均成绩。
createprocp4
@xint
as
selectsno,avg(grade)fromsc
groupbysno
havingavg(grade)>@x
(5)查询查询指定系的学生中,选课门数最多的学生的选课门数和平均成绩,要求系为输入参数,选课门数和平均成绩用输出参数返回。
createprocp5
@deptvarchar(30),@cntintoutput,@avgintoutput
as
selecttop1@cnt=count(*),@avg=avg(grade)
fromscjoinstudentsons.sno=sc.sno
wheresdept=@dept
groupbys.sno
orderbycount(*)desc
(6)删除指定学生的指定课程的修课记录,其中学号和课程号为输入参数。
createprocp6
@snochar(7),@cnochar(10)
as
deletefromSCwhereSno=@snoandcno=@cno
(7)修改指定课程的开课学期。
输入参数为:
课程号和修改后的开课学期,开课学期的默认值为2。
如果指定的开课学期不在1~8范围内,则不进行修改。
createprocp7
@cnochar(10),@new_semesterint=2
as
if@new_semesterbetween1and8
updatecoursesetsemester=@new_semester
wherecno=@cno
3.修改第1题
(1)的存储过程,使之能够查询指定系中,每个学生选课总门数、总学分和考试平均成绩。
alterprocp1
@deptvarchar(30)
as
selects.sno,count(*)选课总门数,SUM(credit)as总学分,
Avg(grade)考试平均成绩
fromSCjoinstudentsons.sno=SC.sno
groupbys.sno
4.利用第11章建立的students数据库以及Student、Coures、SC表,创建满足如下要求的触发器,并检测触发器的功效。
(1)限制考试成绩必须在0~100范围内。
createtriggertri1onscafterinsert,update
as
ifexists(select*frominserted
wheregradenotbetween0and100)
rollback
(2)限制学生所在系的取值必须在{计算机系,信息系,物理系,数学系}范围内。
createtriggertri2onstudentafterinsert,update
as
ifexists(select*fromstudentwheresdeptnotin
('计算机系','信息系','物理系','数学系'))
Rollback
(3)限制学生的选课总门数不能超过8门。
createtriggertri4onscafterinsert
as
ifexists(select*fromsc
wheresnoin(selectsnofrominserted)
groupbysno
havingcount(*)>8)
rollback
(4)限制不能删除考试成绩不及格学生的考试记录。
createtriggertri4onscafterdelete
as
ifexists(select*fromdeletedwheregrade<60)
rollback
5.利用11.3节创建的工作表和职工表,定义满足如下要求的触发器,并检测触发器的功效。
(1)限制职工的基本工资和浮动工资之和必须大于等于2000。
createtriggertri4on职工表afterinsert,update
as
ifexists(select*frominsertedwhere(基本工资+浮动工资)<2000)
Rollback
(2)限制工作表中最高工资不能低于最低工资的1.5倍。
createtriggertri5on工作表afterinsert,update
as
ifexists(select*frominsertedwhere最高工资<最低工资*1.5)
Rollback
(3)限制不能删除基本工资低于1500的职工。
createtriggertri6on职工表afterdelete
as
ifexists(select*fromdeletedwhere基本工资<1500)
Rollback
第12章函数和游标
1.SQLServer2012提供的日期和时间函数有哪些?
答:
getdate、dateadd、datediff、datename、day、month、year
2.SQLServer2012提供的类型转换函数有哪些?
其语法格式分别是什么?
答:
cast和convert
3.SQLServer2012支持的用户自定义函数有几种?
每一种函数的函数体是什么?
返回值是什么?
答:
标量函数、内联表值函数、多语句表值函数。
标量函数的函数体是可以是一系列SQL语句,返回值是一个标量值;
内联表值函数的函数体的一条查询语句,返回值是查询语句的执行结果(表);
多语句表值函数的函数体是一系列SQL语句,返回值是一个表。
4.利用系统提供的函数,完成下列操作:
(1)计算从2000年1月1日到当前日期的天数、月份数及年数。
答:
selectdatediff(day,'2000-1-1',getdate())天数,
datediff(month,'2000-1-1',getdate())月份数,
datediff(year,'2000-1-1',getdate())年数
(2)分别计算系统当前日期加上40天和减去40天后的新日期。
答:
selectdateadd(day,40,getdate())加40天,
dateadd(day,-40,getdate())减40天
(3)得到“Youareastudent”字符串中从11开始,长度为7的子串。
答:
selectsubstring('Youareastudent',11,7)
(4)分别计算“Youareastudent”和“我们是学生”字符串中字符的个数。
答:
selectlen('Youareastudent'),len('我们是学生')
(5)分别得到字符串“Iamateacherandyouarestudents”中左边14个和右边16个字符组成的字符串。
答:
selectleft('Iamateacherandyouarestudents',14),
right('Iamateacherandyouarestudents',16)
5.游标的作用是什么?
其包含的内容是什么?
答:
游标提供了对查询结果集的定位操作功能。
其包含内容是查询结果集。
6.如何判断游标当前行指针指到了游标结果集之外?
答:
使用@@fetch_status全局变量。
7.使用游标需要几个步骤?
分别是什么?
其中哪个步骤是真正产生游标结果集?
答:
五个主要。
步骤,定义游标、打开游标、处理数据、关闭游标、释放游标资源。
打开游标。
8.关闭游标和释放游标在功能上的差别是什么?
答:
关闭游标并不真实释放游标占用的资源,也就是游标的定义还存在,还可以通过open语句再次打开该游标进行处理。
释放游标是释放了与该游标有关的一切资源。
上机练习
1.创建满足下述要求的用户自定义标量函数。
(1)查询指定学生已经得到的修课总学分(考试及格的课程才能拿到学分),学号为输入参数,总学分为函数返回结果。
并写出利用此函数查询9512101学生的姓名、所修的课程名、课程学分、考试成绩以及拿到的总学分的SQL语句。
答:
CREATEFUNCTIONdbo.f_Sum_Credit(@snochar(7))
RETURNSint
AS
BEGIN
DECLARE@xint
SELECT@x=sum(credit)FROMSCjoincoursecono=o
WHERESNO=@snoandgrade>=60
RETURN@x
END
调用:
SELECTSname,cname,credit,dbo.f_Sum_Credit(s.Sno)AS总学分
FROMStudentsjoinscons.sno=sc.sno
joincoursecono=o
WHEREs.Sno='9512101'
(2)查询指定系在指定课程(课程号)的考试平均成绩。
答:
CREATEFUNCTIONdbo.f_Avg_Grade(@deptvarchar(20),@cnovarchar(10))
RETURNSint
AS
BEGIN
DECLARE@xint
SELECT@x=avg(grade)FROMSCjoinstudentsons.sno=sc.sno
wheresdept=@deptandcno=@cno
RETURN@x
END
(3)查询指定系的男生中选课门数超过指定门数的学生人数。
答:
CREATEFUNCTIONdbo.f_rs(@deptvarchar(20),@cntint)
RETURNSint
AS
BEGIN
DECLARE@xint
SET@x=(selectcount(*)fromstudent
wheresdept=@deptandssex='男'
andsnoin(
selectsnofromscgroupbysnohavingcount(*)>@cnt))
RETURN@x
END
2.创建满足下述要求的用户自定义内联表值函数。
(1)查询选课门数在指定范围内的学生的姓名、所在系和所选的课程。
答:
CREATEFUNCTIONdbo.f_count(@xint)
RETURNSTABLE
AS
RETURN(
SELECTSname,sdept,cno
FROMStudentSJOINSCONS.Sno=SC.Sno
WHEREs.snoin(
selectsnofromsc
groupbysno
havingcount(*)>@x))
(2)查询指定系的学生考试成绩大于等于90的学生的姓名、所在系、课程名和考试成绩。
并写出利用此函数查询计算机系学生考试情况的SQL语句,只列出学生姓名、课程名和考试成绩。
答:
CREATEFUNCTIONdbo.f_dept(@deptvarchar(20))
RETURNSTABLE
AS
RETURN(
SELECTSname,sdept,cname,grade
FROMStudentSJOINSCONS.Sno=SC.Sno
joincoursecono=o
WHEREsdept=@deptandgrade>=90)
调用:
SELECTsname,cname,gradeFROMdbo.f_dept('计算机系')
3.创建满足下述要求的用户自定义多语句表值函数。
(1)查询指定系年龄最大的前2名学生的姓名和年龄,包括并列的情况。
答:
CREATEFUNCTIONf_TopAge(@deptvarchar(20))
RETURNS@retSTypetable(
Snamechar(10),
Sageint)
AS
BEGIN
INSERTINTO@retSType
SELECTtop2withtiesSname,Ssex
FROMStudent
WHERESdept=@dept
orderbysagedesc
RETURN
END
(2)查询指定学生(姓名)的考试情况,列出姓名、所在系、修的课程名和考试情况,其中考试情况列的取值为:
如果成绩大于等于90,则为“优”;如果成绩在80~89,则为“良好”;如果成绩在70~79,则为“一般”;如果成绩在60~69,则为“不太好”;如果成绩小于60,则为“很糟糕”。
并写出利用此函数查询李勇的考试情况的SQL语句。
答:
CREATEFUNCTIONf_Exam(@namevarchar(20))
RETURNS@retSTypetable(
Snamechar(10),
Sdeptvarchar(20),
Cnamevarchar(20),
gradevarchar(8))
AS
BEGIN
INSERTINTO@retSType
SELECTSname,Sdept,Cname,case
whengrade>=90then'优'
whengradebetween80and89then'良好'
whengradebetween70and79then'一般'
whengradebetween60and69then'不太好'
else'很糟糕'
end
FROMStudentsjoinscons.sno=sc.sno
joincoursecono=o
WHERESname=@name
RETURN
END
调用:
SELECT*FROMf_Exam('李勇')
4.创建满足下述要求的游标。
(1)查询VB课程的考试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 复习 练习题 答案