解:据已知条件和推理规则,可知F+有43个FD: A→Φ AB→Φ AC→Φ ABC→Φ B→Φ C→Φ A→A AB→A AC→A ABC→A B→B C→C A→B AB→B AC→B ABC→B B→C Φ→Φ A→C AB→C AC→C ABC→C B→BC A→AB AB→AB AC→AB ABC→AB BC→Φ A→AC AB→AC AC→AC ABC→AC BC→B A→BC AB→BC AC→BC ABC→BC BC→C A→ABC AB→ABC AC→ABC ABC→ABC BC→BC 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
设关系模式R(ABC),F是R上成立的FD集,F={ A→C,B→C},试分别求F 在
模式AB和AC上的投影。 解:πAB(F)=Φ(即不存在非平凡的FD)
πAC(F)={A→C}
设关系模式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。 设关系模式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是损失分解。
设关系模式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。
设关系模式R(ABCD),R上的FD集F={A→C,D→C,BD→A},试说明 =
{AB,ACD,BCD}相对于F是损失分解的理由。
答:据已知的F集,不可能把初始表格修改为有一个全a行的表格,因此相对于
F是损失分解。 设关系模式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模式集。
设关系模式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模式集。 设有一个记录各个球队队员每场比赛进球数的关系模式
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}。
设有关系模式
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}。
因篇幅问题不能全部显示,请点此查看更多更全内容