A、1NF B、2NF C、3NF D、4NF({商品编码,数量,日期}多值依赖于{订单号},但是{订单号}不是候选码)
8.设有关系模式R(A,B,C,D).F是R上的函数依赖集,F={D→A,D→B},R的候选码是
A、AD B、BC C、BD D、CD
9.设有关系模式R(A,B,C,D,M,N),R上的函数依赖集F={ M→D,C→B,B→A,(C,M)→N},则R最高达到//推出{C,M}为候选码,推出(C,M)→D,推出M→D为部分函数依赖
A、1NF B、2NF C、3NF D、4NF 二、综合设计题 解题步骤:
1)分析问题中包含的基本概念(即实体)
2)假设一个实体对应一个关系模式,确定每个关系模式的主码 3)由上述基本关系模式的主码合并成一个超码
4)剔除超码中的部分属性,得到给定关系模式的候选码
5)由每个关系模式的主码、给定关系模式的候选码识别出属性间的基本函数依赖关系 6)识别出部分依赖关系、传递依赖关系
1.假设某商业集团数据库中有一个关系模式: R(商店编号,商品编号,数量,部门编号,负责人) 如果规定:
(1)每个商店的每种商品只在一个部门销售; (2)每个商店的每个部门只有一个负责人; (3)每个商店的每种商品只有一个库存数量。 试回答下列问题:
①根据上述规定写出R的基本函数依赖; ②找出R的候选码;
③试问R最高达到第几范式?为什么?
④如果R不属于3NF,请将分解成3NF模式集。 答案:R中包含三个基本概念:商店,商品,部门
①R的基本函数依赖包括:{商店编号,商品编号→数量},{商店编号,商品编号→部门编号},{商店编号,商品编号→负责人}//传递依赖,{部门编号→负责人} ②R的候选码为{商店编号,商品编号}
③R最高达到2范式。因为非主属性都完全函数依赖于候选码,但存在传递函数依赖{商店编号,商品编号→负责人}
④可将R分解为两个关系模式:
商店商品(商店编号,商品编号,数量,部门编号) 部门(部门编号,负责人)
2.假设当前使用一个手工操作的学生文档,其文档的格式如图5.13所示 假设规定:
(1)一名学生可以选修多门课程,且一门课程有多人选修; (2)一门课程仅有一个教师讲授,—名教师可以讲多门课程; (3)学生学习一门课程有一个分数;
(4)每一名教师有一个办公室,一个办公室有多么教师; 如果依据上述文档和规定,设计一个关系模式R:
R(学号,学生姓名,课程号,课程名,分数,教师姓名,教师办公室) 试:
①找出R的候选码;
②写出关系R的基本函数依赖集,并画出函数依赖图; ③判断R最高达到第几范式,说明理由; ④如果有必要,将R分解成3NF模式集。
答案:R中包含三个基本概念:学生,课程,教师
(学号,学生姓名,课程号,课程名,分数,教师姓名,教师办公室 ①R的候选码为{学号,课程号} ②R的基本函数依赖包括:
{学号,课程号→学生姓名},//部分函数依赖 {学号,课程号→课程名},//部分函数依赖 {学号,课程号→分数},
{学号,课程号→教师姓名},//部分函数依赖 {学号,课程号→教师办公室},//传递依赖 {学号→学生姓名}, {课程号→课程名},
{教师姓名→教师办公室}, {课程号→教师姓名}, {课程号→教师办公室}
③R最高达到1范式。因为存在非主属性部分函数依赖于主码,如学号→学生姓名 ④可将R分解为五个关系模式: 学生(学号,学生姓名) 课程(课程号,课程名)
教师(教师姓名,教师办公室) 成绩(学号,课程号,分数) 教师课程(教师姓名,课程号) 函数依赖图略
3.假设公司的订单业务规定:
(1)订单号是惟一的,每一张订单对应一个订单号;
(2)一张订单可以订购多种产品,每一种产品可以在多个订单中出现; (3)一张订单有一个客户,且一个客户可以有多张订单; (4)每一个产品编号对应一种产品的品名和单价; (5)每一个客户有一个确定的名称和电话号码。
根据上述规定设计一个关系模式:
R(订单号,日期,客户名称,电话号码,产品编码,品名,价格,数量) 试:
①找出R的候选码;
②写出关系R的基本函数依赖集,并画出函数依赖图; ③判断R最高达到第几范式,说明理由; ④给出一个可能的3NF模式集。 答案:
①{订单号,客户名称,产品编码}为一个超码,由于“一张订单有一个客户”,所以{订单号,产品编码}为一个候选码
②关系R的基本函数依赖集为{(订单号→日期),(客户名称→电话号码),(产品编码→品名),(产品编码→价格),(订单号,产品编码→数量),(订单号→客户名称),(订单号→电话号码)//传递依赖,(订单号,产品编码→日期)//部分依赖,(订单号,产品编码→客户名称),(订单号,产品编码→电话号码),(订单号,产品编码→品名),(订单号,产品编码→价格),(订单号,产品编码→数量)} 函数依赖图略
③R最高达到第几范式1NF,因为非主属性日期部分函数依赖于主码{订单号,产品编码} ④
一个可能的3NF模式集为:
订单(订单号,客户名称,产品编码,日期,数量),主码为{订单号,产品编码} 客户(客户名称,电话号码),主码为{客户名称} 产品(产品编码,品名,价格),主码为{产品编码}
习题六
一、简答题
1.什么是局部变量和全局变量?
2.局部变量与全局变量的主要区别是什么? 3.在SQL程序设计中,游标的用途是什么? 4.简述SQL程序设计中游标的使用方法。 5.什么是存储过程?其优点是什么? 6.什么是数据库触发器?其作用是什么?
7.INSERTED和DELETED表的用途是什么? 8.简述INSERT触发器的工作原理。 9.简述DELETE触发器的工作原理。 10.简述UPDATE触发器的工作原理。 11.简述INSTEAD OF触发器的工作原理。 12.简述嵌入式SQL的预处理过程。 二、SQL程序设计
1. 编写一个SQL程序,完成将新生信息插入到学生档案表,并将其中一部分信息再插入借书证表、学生贷款、学生医疗表,要求插入之后显示插入的数据。
2. 在学生档案表上创建一个触发器,实现下列任务:当新生信息插入到学生档案表中时,将其中一部分信息再插入借书证表、学生贷款、学生医疗表,要求插入之后显示插入的数据。 CREATE TRIGGER TRIGGER_学生档案表_INSERT ON 学生档案表 FOR INSERT AS BEGIN
insert into 借书证表(学号) select学号from inserted insert into 学生贷款(学号) select学号from inserted insert into 学生医疗表(学号) select学号from inserted select * from inserted END GO
3. 在某出版社数据厍中,有图书关系R(书号,书名,类别,定价)。如果教材类图书的平均定价大于30,则显示“平均价格超过30元”,反之显示“平均价格不超过30元”,并列出所有教材类的书名。编写一个SQL程序完成这个任务。 USE 出版社 GO
IF(SELECT AVG(定价) FROM R WHERE类别=’教材’)>30 PRINT ‘平均价格超过30元’ ELSE BEGIN
PRINT ‘平均价格不超过30元’
SELECT书名FROM R WHERE类别=’教材’
END GO
4. 在某出版社数据厍中,有图书关系R(书号,书名,类别,定价)。如果教材类图书的平均定价大于30,则执行循环,将高于平均值的教材类图书的定价下调1%,直至所有教材类图书的平均定价小于或等于30元为止。编写一个SQL程序完成这个任务。 USE 出版社 GO
DECLARE @PJDJ Float
WHILE (select @PJDJ = AVG(定价) FROM R WHERE类别=’教材’) >30 UPDATE R SET定价=定价*0.99 WHERE类别=’教材’ AND定价> @PJDJ GO
5. 假设有银行账户关系R(账号,客户姓名,余额)。转账业务规定,当一个账户余额大于等于转账金额时,则执行转账业务,并通知客户转账的金额和账面余额;否则不执行转账操作。通知客户不执行转账的理由。试编写转账业务的存储过程,该存储过程有转出账号、转入账号和转账金额3个参数,要求保证事务的原子性。
6. 有学生和成绩关系如下: S(学号,姓名,性别,专业)
R(学号,课程号,课程名称,分数)
相关推荐: