判斷無損連接性:
方法一:無損連接定理
關係模式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行)
所以是無損分解。