解题步骤:
1.依赖投影到个分解
2.各依赖并起来是否有FD
第二步没有成立的情况下
3.没有存在的算闭包是否存在
例一:
步骤一:
R(ABCD),F={B->A,A->C},p={AB,AC,AD},p是否保持FD
AB
选一个
x0=A,x1=AC
x0=B,x1=ABC
则函数依赖有A->C,B->AC
所以映射到投影是B->A
以上仅为分析过程,最后在答题中写的过程是B->A
AC
选一个
x0=A,x1=AC
我们会发现从A就能推出AC,下一轮分析时划掉A,无法从C中选择其余两个,所以依赖只有A->C
映射到投影是A->C
AD
x0=A,x1=AC
x0=D,x1=D
函数依赖为A->C
映射到投影为空集
所以整体下来
R1(AB),F1={B->A}
R2(AC),F2={A->C}
R3(AD),F3是空集
步骤二:
F1UF2UF3=F成立
在考试中如何规范书写呢?
F={B->A,A->C}
(AB)+=ABC,(F1) = {B->A}
(AC)+=AC,(F2)= {A->C}
(AD)+=ACD,(F3)=
所以
F1UF2UF3=F成立
例二:
R(ABCD),F={A->B,B->C,C->D,D->A},p={AB,BC,AD},p是否保持FD
步骤一:
AB
x0=A,x1=ABCD
x0=B,x1=BCDA
函数依赖A->BCD,B->CDA
映射到投影为F1={A->B,B->A}
以此类推
R2=(BC),F2={B->C,C->B}
R3=(AD),F3={A->D,D->A}
步骤二:
可以看到函数的依赖为G=F1∪F2∪F3={A->B,B->A,B->C,C->B,A->D,D->A},对于F来说少了C->D。
步骤三:
观察G的函数依赖中,C能否推出D:
x0=C x1=CBAD,即C->D可以推出来
所以p也是保持函数依赖的
例三:
如果只有两个元素,如:
R(A,B,C,D,E,F)
F{A->BC,CD->E,B->D,BE->F,EF->A},求{ABCD},{EFA}:
步骤一:
G=F1∪F2
F1={A,B,C,D}={A->B,A->C,A-->D,B->D}
F2={E,F,A}={EF->A,A-->E,A-->F}
注:以上不仅包含直接依赖,还包含传递依赖,例如:F1中的A-->D,F2中的A-->E,A-->F,都是通过传递依赖得到的。
步骤二:
所以G=F1∪F2={A->B,A->C,A-->D,B->D,EF->A,A-->E,A-->F}
题目中的F={A->BC,CD->E,B->D,BE->F,EF->A}
对于F来说,少了CD->E,BE->F
注意:F中的A-->BC可以由G中的A-->B,A-->C推出来,其实也就是判断原依赖F能否由分解后的依赖G推出来。
步骤三:
观察G的函数依赖,看左边是否推出右边(CD->E,BE->F),在G中:
x0=CD,x1=CD,不能推出E
x0=BE,x1=BDE,不能推出F
所以不具有函数依赖保持性。
如果对分解的无损连接性有疑惑也可以看看下面这篇博客!💖💖💖
数据库判断分解的无损连接性_dulu~dulu的博客-CSDN博客