3NF的無損連接和保持函數依賴的分解


總結:先求最小覆蓋,再求碼,然后根據左部相同原則划分關系,將上述划分的再根據是否有包含關系進行合並,最后若關系中包含之前求的碼,那么這個關系就是要求的分解,否則再加上一個關系,將碼放入其中。

以下轉載自:https://www.cnblogs.com/lfz1211/p/10475353.html

例一:設關系模式R(A,B,C,D,E)上的函數依賴集F是{A->BC,ABD->CE,E->D}

1:計算F的最小覆蓋。

首先將右部不唯一的依賴分解。得到{A->B,A->C,ABD->C,ABD->E,E->D}

然后對每一個依賴判斷 :對A->B,令G=F-{A->B},查看B是否屬於A關於G的閉包。即A是否能從G推導出B。經推,不能。所以,保留A->B。

同理 A->C 保留;ABD->C 刪除(因為A->C);ABD->E 保留;E->D 保留

第二步,對左部不唯一的依賴進行判斷:對ABD->E,依次去掉A/B/D,查看(ABD-A/B/D)關於F的閉包是否包含E,是則用其取代原依賴。經推,發現AD->E滿足條件。

所以,綜上所述。F的最小覆蓋為{A->B,A->C,AD->E,E->D}

2:直接寫出R的所有關鍵字。

易知,碼為(A,D) (A,E)

3:直接將R分解到3NF,且滿足無損連接性和依賴保持性。

對F的最小覆蓋進行處理:首先,按左部相同原則分組

                        A->B,A->C為R1({ABC},{A->B,A->C})

                        AD->E為R2({A,D},{AD->E})

                        E->D為R3({E,D},{E->D})

然后,將具有包含關系的元組進行合並 R2包含R3,所以將R2,R3合並為新的R2({A,D,E},{AD->E,E->D})

最后,判斷分解后的關系模式中是否含有碼,若含有則為無損連接且保持依賴的3NF

否則,則是保持依賴但不是無損連接的3NF,此時需要新建一個關系模式,將碼放入其中(若此題不含,則加R3({A,D},{∅}))。

該例中,R2含有碼,所以滿足題意。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM