模式分解是否保持函數依賴的判斷方法以及例子

保持依賴的判斷。 

如果F上的每一個函數依賴都在其分解後的某一個關係上成立,則這個分解是保持依賴的(充分條件)。 

如果上述判斷失敗,並不能斷言分解不是保持依賴的,因爲上面只是充分條件,還要使用下面的通用方法來做進一步判斷。 

過程表述如下: 

對F上的每一個α→β使用下面的過程:

 

result:=α; 
while(result改變)do 
for each 分解後的Ri 
t=(result∩Ri)+ ∩Ri 
result=result∪t

例1:考慮關係模式R(A,B,C,D)分解{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所保持。爲此,我們使用算法。

首先,result={D}進入 repeat循環,當i=1時不改變,因爲{D}U(({D}∩{A,B})+∩{A,B})仍是{D}。

同樣方法,當i=2時Z不變。然而,i=3時,我們得到

result={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時產生result={B,C,D}而第三遍,當i=1時置result爲{A,B,C,D}。此後,T不再改變。這樣,result={A,B,C,D}它包含A,因此,D→A被分解所保持。從而是保持函數依賴的分解。

例2:已知R<U,F>,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一個分解爲R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判斷這個分解是否具有函數依賴性。

先看F中每一個函數依賴,R4有C->D,DE->C。A->C,B->C,CE->A。這三個函數依賴分解模式裏均未能覆蓋。

開始使用算法進行檢測:

首先對於A->C,result = A,(A)+ = ACD ,T=AD,result=AD,result改變,進入下一個循環:result = AD,(ABD)+ = ABCD ,t=AB,result=ABD。

result改變:result = ABD, (ABD)+ = ABCDE, t=BE,result=ABDE。

result改變:result = ABDE,(ABCD)+=ABCDE,t=CDE,result=ABCDE。

result改變:(從這一步就能看出來,保持了函數依賴了,因爲已經包含C了)result = ABCDE,(ABCDE)+=ABCDE,t=AE,result=ABCDE。

result未改變。退出循環。、由於result=ABCDE,包含了C,所以分解保持函數依賴。
 

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