数据结构DB课后题部分答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

P175:

5. 设有关系模式R(A,B,C,D),函数依赖F={A→C, C→A, B→AC, D→AC,BD→A }

1)求R的所有候选键。

2)求出F的最小函数依赖集Fmin。

3)根据函数依赖关系,确定关系模式R属于第几范式。

4)将R分解为3NF,并保持无损连接性和函数依赖性。

答:1)属性分类为:

L类:B,D ; LR类:A,C; R类:无; N类:无

因为(BD)+=ABCD ,所以BD是唯一候选键.

2)

●函数依赖F={A→C, C→A, B→AC, D→AC, BD→A }右部分解为单属性为

F={A→C, C→A, B→A, B→C, D→A, D→C, BD→A }

●因为B+=ABC,所欲BD→A,D为左部多余的属性.将D去掉,则

F={A→C, C→A, B→A, B→C, D→A, D→C }

●冗余函数依赖: 因为B+=ABC,所以B→A多余,去掉.

因为D+=ACD,所以D→A多余,去掉.

所以Fmin={A→C, C→A, B→C, D→C }

4)根据算法4.6,以及Fmin,F中没有X→Y,XY=R的函数依赖,也没有属性在F的函数依赖中左右都无关。所以将Fmin中的各个函数依赖单独构成一个关系模式,

对于Fmin中每一个函数依赖:

A→C:表中数据不改变;

C→A:将A中所有b给为a1;

表中没有都是a的行,所以不是无损连接的。

因此根据算法 4.7,将候选键作为一个关系模式加入到ρ中,所以结果为ρ={AC,BC,DC,BD}

6.设有关系模式R(A,B,C,D),函数依赖F={A→C, C→A, B→AC, D→AC }

1)求(AD)+,B+。

2)求出R 的所有候选键。

3)求出F的最小函数依赖集Fmin。

4)根据函数依赖关系,确定关系模式R属于第几范式。

5)将R分解为3NF,并保持无损连接性和函数依赖性

6)略

答:

1) (AD)+=ACD, B+=ABC

2) 属性分类为:

L类:B,D ; LR类:A,C; R类:无; N类:无

因为(BD)+=ABCD ,所以BD是唯一候选键.

3)(1)函数依赖F={A→C, C→A, B→AC, D→AC }右部分解为单属性为

F={A→C, C→A, B→A, B→C, D→A, D→C }

(2)无左部多余的属性.

(3)冗余函数依赖: 因为B+=ABC,所以B→A多余,去掉.

因为D+=ACD,所以D→A多余,去掉.

所以Fmin={A→C, C→A, B→C, D→C }

4)首先R是1NF,因为BD为候选码,另B→C , BD→C,所以,存在非主属性对码的

部分函数依赖,所以R是1NF,不是2NF.

5)同第5题。

8.判断关系模式是否保持无损连接性。-分析方法同第5题中的(4)

(1)

分析……

所以没有全是a的行,所以不保持无损连接。

注意:Y→U,将U列的b31修改为b21后,U列将出现相等的行,所以需要重新对Fmin中的所有函数依赖再进行一次数据修改。直到不能修改为止。

(3)

修改后的表格数据为:

所以没有全是a的行,所以不保持无损连接。

P176:

17题:求Fmin,

●函数依赖F={ E→G,G→E, F→EG, H→EG, FH→E }右部分解为单属性为

F={ E→G,G→E, F→E, F→G,H→E,H→G, FH→E }

●对于FH→E,因为H+=HEG,所以FH→E,F为左部多余的属性.将F去掉,

则F={ E→G,G→E, F→E, F→G,H→E,H→G}

●冗余函数依赖: 因为对F→E ,F+=FGE,所以F→E多余,去掉.

因为H→E ,H+=HGE,所以H→E多余,去掉.

所以Fmin={ E→G,G→E, F→G ,H→G }

18题:(1)求所有候选键

属性分类为:

L类:C, E ; LR类:A, R类:B,D,P; N类:无

因为(CE)+=CEPDAB ,所以CE是唯一候选键.

P298页:存储过程和触发器

4.自定义存储过程

(1)CREATE PROCEDURE Insert_Student(

@s_no char(6),

@class_no char(6),

@s_name varchar(10),

@s_sex char(2),

@s_birthday datetime)

as insert into student(s_no,class_no,s_name,s_sex,s_birthday)

values(@s_no,@class_no,@s_name,@s_sex,@s_birthday)

(2)EXEC Insert_Student @s_no=’123456’, @class_no=’js9901’,@s_name=’张三’,@s_sex=’男’,@s_birthday=’1981/01/02’

(3) CREATE PROCEDURE Insert_Course(

@ course_no char(6),

@ course_name char(20),

@ score numeric(6,2)=2

)

as insert into course (course_no, course_name, score)

values(@course_no, @course_name, @score)

(4) a:EXEC Insert_Course @course_no=’010001’, @course_name=’DB’, @score=4

b: EXEC Insert_Course @course_no=’010002’, @course_name=’VB’

(5) CREATE PROCEDURE Query_Student(

@ s_no char(6),

)

as select s_name,class_no,s_sex,s_birthday from student where s_no=@s_no

(6)EXEC Query_Student @s_no=’001101’

5 CREATE TRIGGER Display_trigger on student after insert as select * from student

相关文档
最新文档