[习题5.4]已知关系模式R(ABC),F是R上成立的FD集,F={A→B,B→C},试写出F的闭包F+。
+
5.7 设关系模式R(ABCD),F是R上成立的FD集,F={A→B,C→B},则相对于F,试写出关系模式R的关键码。并说明理由。
解:R的关键码为ACD,因为从已知的F,只能推出ACD→ABCD。
5.8 设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C}
①试写出属性集BD的闭包(BD)+。
②试写出所有左部是B的函数依赖(即形为“B→?”)。
解:①从已知的F,可推出BD→BCD,所以BD的闭包(BD)+=BCD。
②由于B+=BC,因此左部是B的FD有四个:
B→Φ,B→B,B→C,B→BC
5.11 设关系模式R(ABC),F是R上成立的FD集,F={ A→C,B→C},试分别求
F 在模式AB和AC上的投影。
解:πAB(F)=Φ(即不存在非平凡的FD)
πAC(F)={A→C}
5.12 设关系模式R(ABC),F是R上成立的FD集,F={B→A,C→A},
ρ={AB,BC}是R上的一个分解,那么分解ρ是否保持FD集F?并说明理
由。
解:已知F={B→A,C→A},而πAB(F)={B→A},πBC(F)=Φ,显然,分解ρ丢失了FD C→A。
5.13 设关系模式R(ABC),F是R上成立的FD集,F={B→C,C→A},那么分
解ρ={AB,AC}相对于F,是否无损分解和保持FD?并说明理由。
解:(1)已知F={B→C,C→A}
而πAB(F)={B→A},πAC(F)={C→A}
显然,这个分解丢失了FD B→C。
(2)用测试过程可以知道,分解ρ相对于F是损失分解。
5.14 设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C,A→D,
D→C},ρ={ AB,AC,BD}是R的一个分解。
①相对于F, ρ是无损分解吗?为什么?
②试求F在ρ的每个模式上的投影。
③ρ保持F吗?为什么?
解:①用测试过程可以知道,ρ相对于F是损失分解。
②πAB(F)={A→B},πAC(F)={A→C},πBD(F)=Φ。
③显然,分解ρ不保持FD集F,丢失了B→C,A→D,和D→C等三个
FD。
5.15 设关系模式R(ABCD),R上的FD集F={A→C,D→C,BD→A},试说明
ρ={AB,ACD,BCD}相对于F是损失分解的理由。
答:据已知的F集,不可能把初始表格修改为有一个全a行的表格,因此ρ相对
于F是损失分解。
5.16 设关系模式R(ABCD),F是R上成立的FD集,F={AB→CD,A→D}。
①试说明R不是2NF模式的理由。
②试把R分解成2NF模式集。
解:①从已知FD集F,可知R的候选键是AB。
另外,AB→D是一个局部依赖,因此R不是2NF模式。
②此时,R应分解成{AD,ABC}是2NF模式集。
5.17 设关系模式R(ABC),F是R上成立的FD集,F={ C →B,B → A }。
①试说明R不是3NF模式的理由。
②试把R分解成3NF模式集。
解:①从已知FD集F,可知R的候选键是C。
从 C →B和B →A,可知C → A 是一个传递依赖,因此R不是3NF
模式。
②此时,R应分解为{CB,BA}即为3NF模式集。
5.18 设有一个记录各个球队队员每场比赛进球数的关系模式
R(队员编号,比赛场次,进球数,球队名,队长名)
如果规定每个队员只能属于一个球队,每个球队只有一个队长。
①试写出关系模式R的基本FD和关键码。
②说明R不是2NF模式的理由,并把R分解成2NF模式集。
③进而把R分解成3NF模式集,并说明理由。
解:(1)根据每个球员只能属于一个球队,可写出FD:队员编号→球队名;
根据每个球队只有一个队长,可写出FD:球队名→队长名;
“每个队员每场比赛只有一个进球数”,这条规则也是成立的,因此还可
以写出FD:(队员编号,比赛场次)→进球数
从上述三个FD可知道,R的关键码为(队员编号,比赛场次)。
(2)从(1)可知,R中存在下面两个FD:
(队员编号,比赛场次)→(球队名,队长名)
队员编号→(球队名,队长名)
显然,其中第一个FD是一个局部依赖,因此R不是2NF模式。
对R应该进行分解由第二个FD的属性可构成一个模式,即
R1(队员编号,球队名,队长名);
另一个模式由R的属性集去掉第二个FD属性右边的属性组成,即
R2(队员编号,比赛场次,进球数)。
R1和R2都是2NF模式,因此分解为2NF模式集为{R1,R2}
(3)R2(队员编号,比赛场次,进球数)中FD是
(队员编号,比赛场次)→进球数
关键码为(队员编号,比赛场次),可见R2已是3NF。
R1(队员编号,球队名,队长名)中,FD有两个:
队员编号→球队名
球队名→队长名
关键码为队员编号,可见存在传递依赖,因此R1不是3NF模式。
对R1应分解成两个模式:R11(队员编号,球队名),R12(球队名,队长
名)。这两个模式都是3NF模式。
因此,R分解成3NF模式集为{R11,R12,R2}。
5.19 设有关系模式
R(职工名,项目名,工资,部门名,部门经理)
如果规定每个职工可参加多个项目,各领一份工资;每个项目只属于一个部门管理;每个部门只有一个经理。
①试写出关系模式R的基本FD和关键码。
②说明R不是2NF模式的理由,并把R分解成2NF模式集。
③进而把R分解成3NF模式集,并说明理由。
解:(1)R的基本FD有三个:
(职工名,项目名)→工资
项目名→部门名
部门名→部门经理
关键码为(职工名,项目名)。
(2)根据(1),R中存在下列两个FD:
(职工名,项目名)→(部门名,部门经理)
项目名→(部门名,部门经理)
其中前一个FD是一个局部依赖,因此R不是2NF模式。
R应分解成两个模式:R1(项目名,部门名,部门经理)
R2(职工名,项目名,工资)
R1和R2都是2NF模式。
(3)R2已是3NF模式。
在R1中,由于存在两个FD:
项目名→部门名
部门名→部门经理
即存在一个传递依赖,因此R1不是3NF模式。
对R1应分解成两个模式:R11(项目名,部门名),R12(部门名,部门经理)。
这两个模式都是3NF模式。
因此,R分解成3NF模式集时,为{R11,R12,R2}。