判断是否保持函数依赖的方法

解题步骤:

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,\Pi_{AB}(F1) = {B->A}

(AC)+=AC,\Pi _{AC}(F2)= {A->C}

(AD)+=ACD,\Pi _{AD}(F3)= \phi

所以

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博客

                                                                                                              

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值