检验分解的函数依赖保持性

输入:关系模式R的函数依赖集F和分解P={R1,R2,…,R}

输出:P是否保持函数依赖的判定。
方法:
(1)for(每个x→y∈F)do
(2)begin
(3)  if(不存在i使得XYR)then
          / * 检验X→Y是否被分解p所保持 * /
(4)    begin
(5)        Z<-X;
(6)        repeat
(7)           for  i=1 to k do
(8)               Z<-Z U ((Z ∩ Ri)+ ∩ Ri);

(9)    until(Z不发生变化);
(10)     if(Y不是Z的子集) then   / *  X→Y不被分解所保持* /

(11)      return  P不是保持函数依赖的分解
(12)   end;
(13)end;

 

例:考虑关系模式R(A,B,C,D)分解p={R1(A,B),R2(BC),R3(C,D)},

函数依赖集F={A→B,B→C,C→D,D→A}
显然,AB包含于R1,BC包含于R2,CD包含于R3。因此,只需要验证是否有D→A呗分解p所保持。为此,我们使用算法。
      开始,Z={D}进入 repeat循环,当i=1时不改变,因为{D}U(({D}∩{A,B})+∩{A,B})仍是{D}。

类似地,当i=2时Z不变。然而,i=3时,我们得到
Z={D}U(({D}∩{C,D})+∩{C,D})
={D}U({D}+∩{C,D})
={D}U({A,B,C,D}∩{C,D})
={C,D}
再次执行 repeat的循环体,当i=2时产生Z={B,C,D}而第三遍,当i=1时置Z为{A,B,C,D}。此后,Z不再改变。这样,Z={A,B,C,D}它包含A,因此,D→A被分解所保持。从而是保持函数依赖的分解。
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值