(4) 如果R不属于3NF,请将R分解成3NF模式集。 将R分解成:R1(商店编号,商品编号,数量,部门编号) R2(商店编号,部门编号,负责人)
8. 设关系模式R(ABCDE),F是R上成立的FD集,F={ A→B,CD→E,B→D},ρ={AB,
AD,CDE}是R的一个分解。
(1) 试用Chase过程说明ρ是否是无损分解;
A B C D E AB a1 a2 b1b1b1AD a1 b2b2a4 b2CDb3b3a3 a4 a5 初始表格 A B C D E AB a1 a2 b1b1b1AD a1 a2 b2a4 b2CDb3b3a3 a4 a5 修改后的表格 修改后的表格没有一行是全a行,所以不是无损分解。
(2) 试求F在ρ的每个模式上的投影,并说明ρ是否保持依赖。 F在R1(AB)上的投影为F1{A→B} 在R2(AD)上的投影为F2{A→D} 在R3(CDE)上的投影为F3{CD→E}
令G=F1∪F2∪F3,可得G≠F,可见G+≠F+,所以不保持依赖 9. 设关系模式R(ABCDE),F是R上成立的FD集,F={ A→B,CE→A,B→D},ρ={AB,
BD,ACE}是R的一个分解。
(1)试用Chase过程说明ρ是否是无损分解; A B C D E AB a1 a2 b13 b14 b15 BD b21 a2 b23 a4 b25 ACE a1 b32 a3 b34 a5 初始表格 A B C D E AB a1 a2 b13 b14 b15 BD b21 a2 b23 a4 b25 ACE a1 a2 a3 a4 a5 修改后的表格 根据A→B,可把b32改为a2,根据A→B,B→D,可把b34改为a4,得到表中第三行全是a行,所以是无损分解
(2) 试求F在ρ的每个模式上的投影,并说明ρ是否保持依赖。 F在R1(AB)上的投影为F1{A→B} 在R2(BD)上的投影为F2{B→D} 在R3(ACE)上的投影为F3{CE→A}
令G=F1∪F2∪F3,可得G=F,可见G+=F+,所以保持依赖
10. 设有关系模式R(演员编号,演员姓名,电影名,出演角色,艺术团名,团长名),
如果规定每个演员编
(1)试写出关系模式R的基本FD和主键; 演员编号→(演员姓名,艺术团名) (演员编号,电影名)→出演角色 艺术团名→
11
(2)说明R达到第几范式,并说明理由;
第一范式,关系1(演员编号,电影名)→(出演角色,演员姓名,艺术团名) 关系2演员编号→(演员姓名,艺术团名)
所以关系1属于局部依赖,故是第一范式。
(3) 如果R不是3NF模式,请将R分解为3NF模式集。 R分解为R1(演员编号,演员姓名,艺术团名,团长名) R2(演员编号,电影名,出演角色) {R1,R2}是2NF模式集
再把R1分解为R11(演员编号,演员姓名,艺术团名) R12(艺术团名,团长名)
则{R11,R12,R2}是3NF模式集 11. 现有如下关系模式:
考生(准考证号,姓名,电话,家庭住址,报考专业编号,报考专业名称,报考年份) (1)试分析该关系模式的函数依赖,并指明其主键。 (准考证号,报考专业编号),(姓名,报考专业编号) 主键为:(准考证号,报考专业编号) (2)将该关系分解到3NF。
R1(准考证号,报考专业编号,报考年份) R2(准考证号,姓名,电话,家庭住址) R3(报考专业编号,报考专业名称)
12. 一个工厂可生产多种产品,一种产品可由多个工厂生产。工厂有工厂编号、名称、
地址和电话号码等属性; (1)根据上述语义画出E-R图;
工厂m数量生产生产日期n 产品 (2)将E-R模型转换成关系模式,并标注关系的主键和外键。 工厂(工厂编号,名称,地址,电话号码) 产品(产品号,产品名称,型号)
生产(工厂编号,产品号,生产日期,数量)
(3)判断各关系模式是否符合3NF,如果不符合请将其分解成3NF模式。 1.设有如下实体
学生:学号、单位、姓名、性别、年龄、选修课程名 课程:编号、课程名、开课单位、任课教师号 教师:教师号、姓名、性别、职称、讲授课程号 单位:单位名称、电话、教师号、教师名 上述实体中存在如下联系
(1)一个学生可以选修多门课程,一门课程可以为多个学生选修;
12
(2)一个教师可以讲授多门课程,一门课程可以为多个教师讲授; (3)一个单位可以有多个教师,一个教师只能属于一个单位。 试完成如下工作:
(1)分别设计学生选课和教师任课的两个局部ER图模型。 (2)将上述设计的局部ER图合并为全局的ER图。
单位11属于1n教师拥有开设n讲授nnm (2)将全局ER图转换为等价的关系模式的数据库逻辑结构。 单位(单位名,电话)
教师(教师号,姓名,性别,职称,单位名) 课程(课程编号,课程名,单位名)
学生(学号,姓名,性别,年龄,单位名) 讲授(教师号,课程编号) 选修(学号,课程编号)
13. 设体育比赛数据库中有两个实体集。一是“运动员”实体集,属性有运动员编号、
姓名、年龄、性别等;
(1)画出ER图,并在图上注明属性、联系类型、实体标识符;
年龄姓名性别项目编号项目名称级别学生选修n课程运动员运动员编号M参加N比赛项目日期成绩 (2) 将ER图转换成关系模型,并说明主键和外键。 运动员(运动员编号,姓名,年龄,性别) 比赛项目(项目编号,项目名称,级别) 参加(运动员编号,项目编号,日期,成绩) 14. 写出下列每条语句或程序段的功能,假定数据库AAA,,包括student和score两张
表。
(1)create procedure xxx1 as Begin
select *
from student x, score y where x.S#=y.S.# end
显示出AAA库中所以学生的记录信息及选课成绩
13
(2) create procedure xxx2 As Begin
Select x.S#,x.SNAME,count(*) as 门数 Where x.S#=y.S#
Group by x.S#,x.SNAME end
显示出AAA库中每个学生的学号、姓名等信息及选课门数 (3) ceate procedure xxx3
(@a char(8), @b varchar(10), @c numeric(5,2)) As Begin
Insert into score Values(@a,@b,@c) End
向score表中插入学号为@ a的值、课程名为@b的值、成绩为@c的值的学生成绩记录 创建存储过程,功能是查询指定学生的学号,姓名,性别和班级,姓名由参数传递 create proc p_2( @xm char (8) )
as select 学号,姓名,性别,班号from 学生,班级where学生.班号=班级.班号 and 姓名=@xm go
execute s_1 '/*姓名参数*/'
创建存储过程,功能是查询某门课程的总分和平均分。课程名由参数传递。 Create proc p_3(
@kcm char(16),@pj int output,@zcj int output)
As select sum(成绩) as 总分,avg(成绩) as平均分from 选课,课程where 选课.课程号=课程.课程号 and 课程名=@kcm go
Declare @zcj int,@pj int
Execute s_3 '/*课程名参数*/' ,@pj output,@zcj output Print @zcj Print @pj
创建触发器,功能是当删除学生表的记录时,同步删除选课表中的选课信息。 create trigger t_1 on 学生 after delete as declare @xh char(8)
select @xh=学号 from deleted
delete from 选课 where 学号=@xh
delete from 学生 where 学号='/*学号*/'
创建触发器,功能是当修改学生表的学生学号时,同步修改选课表中该学生的学号。 create trigger t_2
on 学生 after update as
14
declare @xh1 char(8),@xh2 char(8) select @xh1 from deleted select @xh2 from inserted
update 学生 set 学号=@xh2 where 学号=@xh1
update 选课 set 学号='/*被修改学号*/' where 学号=' /*新学号*/' 15. 分析下列XML实例,编写外部DTD文档。
<学生 学号=“Z1”别名=“张小”> <姓名>张华姓名> <性别>女性别> <年龄>27年龄 > 学生>
<学生 学号=“A2” 别名=“李四”> <姓名>李明姓名> <性别>男性别> <年龄>19年龄 > 学生> 学生名册>
]>
<学生名册> <学生>
<学号> \学号> <别名> \张小\别名> <姓名>张华姓名> <性别> 女性别> <年龄> 27年龄> 学生> <学生>
<学号> \学号> <别名> \李四\别名> <姓名>李明姓名> <性别> 男性别> <年龄> 19年龄> 学生>
15