判断分解的无损连接性和保持函数依赖

判断无损连接性:

方法一:无损连接定理

关系模式R(U,F)的一个分解,ρ={R1<U1,F1>,R2<U2,F2>}具有无损连接的充分必要条件是:
U1∩U2→U1-U2 ∈F+ 或U1∩U2→U2 -U1∈F+

方法二:算法

ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是关系模式R<U,F>的一个分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},并设F是一个最小依赖集,记FDi为Xi→Alj,其步骤如下:

① 建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj ∈Ui,则在j列i行填上aj,否则填上bij;

② 对于每一个FDi做如下操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中li列的元素,若其中有aj,则全部改为aj,否则全部改为bmli,m是这些行的行号最小值。

如果在某次更改后,有一行成为:a1,a2,...,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。

对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。

③ 比较扫描前后,表有无变化,如有变化,则返回第② 步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。

判断保持函数依赖:

若F+=F1+∪F2+∪...∪Fk+,则R<U,F>的分解ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}保持函数依赖。

例题:
对于属性集ABCDEF和函数依赖集{A→BC,CD→E,B→D,BE→F,EF→A},说明下列分解a.是否是无损连接分解;b.是否保持函数依赖。
(1){ABCD,EFA}
a.判断无损连接分解
U1∩U2=A,
U1-U2=BCD,
U2-U1=EF
存在A→BCD∈F+,所以分解是无损连接分解。


b.判断保持函数依赖
U1=ABCD,F1+={A→BC,B→D}
U2=EFA,F2+={EF→A}
丢失了CD→E,BE→F,因此没有保持函数依赖。

(1){ABC,BD,BEF}
a.判断无损连接分解
①构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij。

 A

B

CDEF
R(ABC)a1a2a3b14b15b16
R(BD)b21a2b23a4b25b26
R(BEF)b31a2

b33

b34a5a6

②根据A→BC,拆分为A→B,A→C。由于属性列A上没有相同的分量,所以表不改变。
③根据CD→E,由于属性列CD上没有相同的分量,所以表不改变。
④根据B→D,由于属性列B上第1、2、3行均相同a2,且这些行所在的D属性列存在a4,所以将属性列D上的b14、b34改为同一个符号a4。

 A

B

CDEF
R(ABC)a1a2a3a4b15b16
R(BD)b21a2b23a4b25b26
R(BEF)b31a2

b33

a4a5a6

⑤根据BE→F,由于属性列BE上没有相同的分量,所以表不改变。
⑥根据EF→A,由于属性列EF上没有相同的分量,所以表不改变。

经过比较扫描前后的表格有变化,所以进行第二次扫描,第二次扫描表无变化,没有出现a1,a2,a3,a4,a5,a6,因此不是无损连接分解。

b.判断保持函数依赖
U1=ABC,F1+={A→BC}
U2=BD,F2+={B→D}
U2=BEF,F3+={BE→F}
丢失了CD→E,EF→A,因此没有保持函数依赖。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值