8.4
若 α → β , α → γ 则 α → α β ( 增广律: α α → α β ) , α β → γ β ( 增广律 ) 则 α → γ β ( 传递律 ) 若\alpha \rightarrow \beta,\alpha \rightarrow \gamma \\则\alpha \rightarrow \alpha\beta(增广律:\alpha\alpha \rightarrow\alpha\beta),\alpha \beta \rightarrow \gamma\beta(增广律) \\则\alpha \rightarrow \gamma\beta(传递律) 若α→β,α→γ则α→αβ(增广律:αα→αβ),αβ→γβ(增广律)则α→γβ(传递律)
8.5
若 α → β , γ β → δ 则 γ α → γ β ( 增广律 ) 则 γ α → δ ( 传递律 ) 若\alpha \rightarrow \beta,\gamma\beta \rightarrow \delta \\则\gamma\alpha \rightarrow \gamma\beta(增广律) \\则\gamma\alpha \rightarrow \delta(传递律) 若α→β,γβ→δ则γα→γβ(增广律)则γα→δ(传递律)
8.6
A → B C , B → D , 故 A → B C D C D → E , 故 A → A B C D E E → A , 故 E → A B C D E C D → E , 故 C D → A B C D E C D → E , B → D , 故 B C → E , B C → A B C D E A\rightarrow BC,B\rightarrow D,故A\rightarrow BCD \\CD\rightarrow E,故A\rightarrow ABCDE \\E\rightarrow A,故E\rightarrow ABCDE \\CD\rightarrow E,故CD \rightarrow ABCDE \\CD\rightarrow E,B\rightarrow D, 故BC\rightarrow E,BC\rightarrow ABCDE A→BC,B→D,故A→BCDCD→E,故A→ABCDEE→A,故E→ABCDECD→E,故CD→ABCDECD→E,B→D,故BC→E,BC→ABCDE
F + F^+ F+为
A → A B C D E , B → B D , C → C , D → D , E → A B C D E , B C → A B C D E , C D → A B C D E , B D → B D , X → A B C D E ( X 为剩余元素集 ) A\rightarrow ABCDE,B\rightarrow BD,C\rightarrow C,D\rightarrow D,E\rightarrow ABCDE ,\\BC\rightarrow ABCDE,CD\rightarrow ABCDE,BD\rightarrow BD, \\X\rightarrow ABCDE(X为剩余元素集) A→ABCDE,B→BD,C→C,D→D,E→ABCDE,BC→ABCDE,CD→ABCDE,BD→BD,X→ABCDE(X为剩余元素集)
候选码为 A , E , B C , C D A,E,BC,CD A,E,BC,CD
8.7
对于给出的F:任何函数依赖都不含无关属性,左半部唯一
故F即是Fc
8.8
-
设|F|=n,元素个数为m
由图8-8算法的叙述可知其复杂性为O( n 2 n^2 n2)
图8-18的算法第一次循环了n次,第二次循环循环了nm次,addin(a)的循坏只对a进行操作,循坏次数为a的属性个数乘以n,不超过nm次,故此算法复杂性为O(nm)
最坏情况下, n = 2 m ∗ 2 m = 4 m n=2^m*2^m=4^m n=2m∗2m=4m,
故O(nm)的算法比O( n 2 n^2 n2)高效
-
在第一步中, A ⊆ α , α → A A\subseteq \alpha,\alpha\rightarrow A A⊆α,α→A,A显然是result中的元素
假设第k步正确, β → γ , β ⊆ r e s u l t , γ ⊆ r e s u l t \beta\rightarrow\gamma,\beta\subseteq result,\gamma\subseteq result β→γ,β⊆result,γ⊆result
在第k+1步中, A ⊆ γ , γ → A A\subseteq \gamma,\gamma\rightarrow A A⊆γ,γ→A,A显然是result中的元素
故算法得到的result中均是 a + a^+ a+的元素
而如果存在 a + a^+ a+的属性不属于result
则必定存在 β → γ , β ⊆ r e s u l t \beta\rightarrow\gamma,\beta\subseteq result β→γ,β⊆result且 γ \gamma γ至少有一个属性不在result中(设为A)
当算法结束时,A已添加到result当中
综上,该算法正确性得证
8.11
-
a
约束为: α 是 r 1 的主码, α 是 r 2 参考 r 1 的外码 约束为:\alpha是r_1的主码,\alpha是r_2参考r_1的外码 约束为:α是r1的主码,α是r2参考r1的外码
-
b
e g : 对于某个 r ( 1 , 2 , 3 ) , 分解后 r 1 ( 1 , 2 ) , r 2 ( 1 , 3 ) , 若不添加外码约束则 r 2 可更新为 ( 4 , 3 ) ,而 r 1 不变 eg:对于某个r(1,2,3),分解后r_{1}(1,2),r_{2}(1,3),若不添加外码约束则r_2可更新为(4,3),而r_1不变 eg:对于某个r(1,2,3),分解后r1(1,2),r2(1,3),若不添加外码约束则r2可更新为(4,3),而r1不变
-
c
对于每个 R i , α → β , α 是主码;因为 3 N F 分解的函数依赖集是 F c , 故 R i 主码均不同,对于 R j 的某个属性集 α 若是 R i 的主码,则需作为 R j 参考 R i 的外码 对于每个R_i,\alpha\rightarrow \beta,\alpha是主码;因为3NF分解的函数依赖集是F_c,故R_i主码均不同,对于R_j的某个属性集\alpha若是R_i的主码,则需作为R_j参考R_i的外码 对于每个Ri,α→β,α是主码;因为3NF分解的函数依赖集是Fc,故Ri主码均不同,对于Rj的某个属性集α若是Ri的主码,则需作为Rj参考Ri的外码
8.13
对于 B → D , 令 r e s u l t = B 对于B\rightarrow D,令result=B 对于B→D,令result=B
对于 R 1 , t = ( r e s u l t ∩ R 1 ) + ∩ R 1 = B + ∩ R 1 = B 对于R_1,t=(result\cap R_1)^+\cap R_1=B^+\cap R_1=B 对于R1,t=(result∩R1)+∩R1=B+∩R1=B
r e s u l t = r e s u l t ∪ t = B result=result\cup t=B result=result∪t=B
循环后 r e s u l t 还是 B 无变化,且不含 D ,故不是保持依赖 循环后result还是B无变化,且不含D,故不是保持依赖 循环后result还是B无变化,且不含D,故不是保持依赖
8.28
考虑R的两个实例(1,2,3,4,5),(6,7,3,8,9),分解后变为(1,2,3)(3,4,5)和(6,7,3)(3,8,9)
自然连接后则会出现(1,2,3,4,5),(1,2,3,8,9)(6,7,3,8,9),(6,7,3,4,5)四个实例
故不是无损分解
8.29
-
a
B→D,D→A,B→AD,A→BCD,BC→DE,B→ABCDE
B + B^+ B+=ABCDE
-
b
A→BCD,A→BC,BC→DE,A→BCDE,A→A,A→ABCDE
AF→ABCDE,AF→F,AF→ABCDEF
故AF是超码
-
c
第一次循环,未发现可合并项;直接快进至寻找无关属性
A→BCD,B→D可知D为A→BCD的无关属性
故F=A→BC,BC→DE,B→D,D→A
第二次循环,未发现可合并项;直接快进至寻找无关属性
BC→DE,B→D可知D为BC→DE的无关属性
故F=A→BC,BC→E,B→D,D→A
第三次循环,未发现可合并项;直接快进至寻找无关属性
BC→E,B→ABCDE,可知C为BC→E的无关属性
故F=A→BC,B→E,B→D,D→A
第四次循环,发现可合并项:B→DE
无无关属性
故F=A→BC,B→DE,D→A
第五次循环,未发现可合并项和无关属性
故Fc=A→BC,B→DE,D→A
-
d
R 1 = ( A , B , C ) , R 2 = ( B , D , E ) , R 3 = ( D , A ) R_1=(A,B,C),R_2=(B,D,E),R_3=(D,A) R1=(A,B,C),R2=(B,D,E),R3=(D,A)
候选码必含有F
R i R_i Ri中均不含候选码,故加入 R 4 = ( A , F ) R_4=(A,F) R4=(A,F)
模式间相互不包含
故3NF分解为: R 1 = ( A , B , C ) , R 2 = ( B , D , E ) , R 3 = ( D , A ) , R 4 = ( A , F ) R_1=(A,B,C),R_2=(B,D,E),R_3=(D,A),R_4=(A,F) R1=(A,B,C),R2=(B,D,E),R3=(D,A),R4=(A,F)
-
e
B + = A B C D E , A → B C D , D → A B^+=ABCDE,A→BCD,D→A B+=ABCDE,A→BCD,D→A
A + = B + = ( B C ) + = D + = A B C D E A^+=B^+=(BC)^+= D^+=ABCDE A+=B+=(BC)+=D+=ABCDE
候选码:AF,BF,DF
result={R}
违反BCNF的FD(左侧无码):A→BCD
从A→BCD开始分解,result=(A,B,C,D)∪(A,E,F)
(A,E,F)中候选码:AF
违反BCNF的FD(左侧无码):A→E
从A→BCD开始分解,result=(A,B,C,D)∪(A,E)∪(A,F)
(A,B,C,D),(A,E),(A,F)均满足BCNF,故为r的BCNF分解
-
f
F c = A → B C , B → D E , D → A Fc=A→BC,B→DE,D→A Fc=A→BC,B→DE,D→A
A + = B + = D + = A B C D E A^+=B^+= D^+=ABCDE A+=B+=D+=ABCDE
候选码:AF,BF,DF
result={R}
违反BCNF的FD(左侧无码):A→BC
从A→BC开始分解:result=(A,B,C)∪(A,D,E,F)
(A,D,E,F)中的候选码:AF,DF
违反BCNF的FD(左侧无码):A→DE
从A→DE开始分解,result=(A,B,C)∪(A,D,E)∪(A,F)
(A,B,C),(A,D,E),(A,F)均满足BCNF,故为Fc的BCNF分解,与e的分解不同
综上,若直接运用算法,得到的BCNF分解与e的分解不同,但由Fc推出F的公式后再运用算法可得同样的分解