数据库原理复习练习题含答案第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学生(学号,姓名,性别,专业,社团号,参加日期),社团号为引用社团的外码。
∈3NF10.根据下列描述,画出相应的E-R图,并将E-R图转换为满足3NF的关系模式,指明每个关系模式的主键和外键。
现要实现一个顾客购物系统,需求描述如下:一个顾客可去多个商店购物,一个商店可有多名顾客购物;每个顾客一次可购买多种商品,但对同一种商品不能同时购买多次,但在不同时间可购买多次;每种商品可销售给不同的顾客。
对顾客的每次购物都需要记录其购物的商店、购买商品的数量和购买日期。
需要记录的“商店”信息包括:商店编号、商店名、地址、联系电话;需要记录的顾客信息包括:顾客号、姓名、住址、身份证号、性别。
需要记录的商品信息包括:商品号、商品名、进货价格、进货日期、销售价格。
答:顾客商店商品购买顾客号姓名住址商店编号商店名地址购买数量购买日期商品号商品名进货日期mn身份证号性别销售价格进货价格联系电话p第11章 存储过程和触发器习题1. 存储过程的作用是什么?为什么利用存储过程可以提高数据的操作效率? 答:(1)允许模块化程序设计(2)改善性能 (3)减少网络流量 (4)可作为安全机制使用 因为系统对存储过程是预编译的。
2. 在定义存储过程的语句中是否可以包含数据的增、删、改语句? 答:可以。
3. 用户和存储过程之间如何传递数据? 答:可通过输入、输出参数。
或者4. 存储过程的参数有几种形式? 答:有输入和输出两种。
5. 触发器的作用是什么? 前触发和后触发的主要区别是什么? 答:实现复杂的处理逻辑和商业规则,增强了数据完整性约束的功能。
前触发器是在引发触发器执行的操作之前先执行触发器;后触发器是在引发触发器执行的操作执行完后再执行触发器。
6. 插入操作产生的临时工作表叫什么?它存放的是什么数据? 答:inserted ,存放新插入的数据。
7. 删除操作产生的临时工作表叫什么?它存放的是什么数据?答:deleted,存放被删除的数据。
8.更改操作产生的两个临时工作表叫什么?其结构分别是什么,它们分别存放的是什么数据?答:inserted和deleted,结构同定义触发器的表,分别存放更新前和更新后的数据。
上机练习1.利用第11章建立的students数据库以及Student、Coures、SC表,创建满足下述要求的存储过程,并查看存储过程的执行结果。
(1)查询每个学生的修课总学分,要求列出学生学号及总学分。
create proc p1asselect sno,SUM(credit)as总学分from SCgroup by sno(2)查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在的系作为输入参数,执行此存储过程,并分别指定一些不同的输入参数值。
create proc p2@dept varchar(20) = '计算机系'asselect s.sno,sname,o,cname,creditfrom Student s join SC on s.Sno=SC.Snojoin Course c on o=owhere Sdept=@dept执行示例1:EXEC P2执行示例2:EXEC P2 '通信工程系'(3)查询指定系的男生人数,其中系为输入参数,人数用输出参数返回。
create proc p3@dept varchar(20),@rs int outputasselect@rs=COUNT(*)from Studentwhere Sdept=@dept and Ssex='男'(4)查询考试平均成绩超过指定分值的学生学号和平均成绩。
create proc p4@x intasselect sno,avg(grade)from scgroup by snohaving avg(grade)> @x(5)查询查询指定系的学生中,选课门数最多的学生的选课门数和平均成绩,要求系为输入参数,选课门数和平均成绩用输出参数返回。
create proc p5@dept varchar(30),@cnt int output,@avg int outputasselect top 1 @cnt =count(*),@avg =avg(grade)from sc join student s on s.sno = sc.snowhere sdept = @deptgroup by s.snoorder by count(*)desc(6)删除指定学生的指定课程的修课记录,其中学号和课程号为输入参数。
create proc p6@sno char(7),@cno char(10)asdelete from SC where Sno=@sno and cno = @cno(7)修改指定课程的开课学期。
输入参数为:课程号和修改后的开课学期,开课学期的默认值为2。
如果指定的开课学期不在1~8范围内,则不进行修改。
create proc p7@cno char(10), @new_semester int= 2asif @new_semester between 1 and 8update course set semester = @new_semesterwhere cno = @cno3.修改第1题(1)的存储过程,使之能够查询指定系中,每个学生选课总门数、总学分和考试平均成绩。
alter proc p1@dept varchar(30)asselect s.sno,count(*)选课总门数,SUM(credit)as总学分,Avg(grade)考试平均成绩from SC join student s on s.sno = SC.snogroup by s.sno4.利用第11章建立的students数据库以及Student、Coures、SC表,创建满足如下要求的触发器,并检测触发器的功效。