判断是否为无损连接,保持函数依赖

判断无损连接性:

 

方法一:无损连接定理

 

关系模式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,因此没有保持函数依赖。

 

用算法判断是否无损连接

设有关系模式R(U,V,W,X,Y,Z),其函数依赖集:F={U→V,W→Z,Y→U,WY→X},现有下列分解:p={UVY,WXYZ}

判断分解p是否为无损连接

一、画出这样的二维图

  U Y W X Y Z
UVY            
WXYZ            

二、在纵轴每个关系中拥有的元素添加ai(看下面)

  U Y W X Y Z
UVY A1 A2     A5  
WXYZ     A3 A4 A5 A6

三、根据函数依赖集(F={U→V,W→Z,Y→U,WY→X})中的每个依赖,填充二维表(看下面)

根据U→V有

就是看U列和V列在某个关系中是否存在,如果存在,则在其他关系里的V列加上

这里是U 和 V在UVY里都存在,所以在WXYZ 里加上V关系

 

  U V W X Y Z
UVY A1 A2     A5  
WXYZ   A2 A3 A4 A5

A6

根据W→Z

                                         

  U V W X Y Z
UVY A1 A2     A5 A6
WXYZ   A2 A3 A4 A5

A6

根据Y→U

  U V W X Y Z
UVY A1 A2     A5 A6
WXYZ A1 A2 A3 A4 A5

A6

根据WY→X

  U V W X Y Z
UVY A1 A2   A4 A5 A6
WXYZ A1 A2 A3 A4 A5

A6

 

无损连接分解在二维图里的表示方式就是,有其中一行全部覆盖了ai(这里是WXYZ行)

所以是无损分解。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章