數據庫 分解3NF

【例】關係模型R<U,F>,U={A,B,C,D,E},F={A→BC,ABD→CE,E→D}

算法一:將關係R轉化3NF的保持函數依賴的分解

第一步:首先計算出F的最小依賴集(算法詳見最小函數依賴),得到F'={A→BC,AD→E,E→D}。

第二步:觀察U中是否有屬性不在F'中的出現如果有,則這個個屬性組成一對關係R,並在原來的U中刪除這些屬性。而例子中U中的屬性都出現在F中,則可以跳過這一步。

第三步:對F'中的函數依賴,把左邊的相同分爲一組,一組中出現的所有屬性爲一個關係。如F={A→B,A→C,……},左邊都爲A的分爲一組,出項的所有屬性組爲一個關係R{A,B,C,……}。例題中左邊都不相同,所以一個函數依賴組爲一個關係得到轉化爲3NF的保持依賴分解R1{A,B,C},R2{A,D,E},R3{E,D}。

 

算法二:將關係R轉化3NF的既有無損連接性又保持函數依賴的分解

第一步:先將R轉化3NF的保持函數依賴的分解,由算法一得出R1{A,B,C},R2{A,D,E},R3{E,D}。

第二步:求出F的候選碼(算法相見候選碼算法)得出候選碼X爲AD和AE。

第三步:將候選碼單獨組成關係得R4{A,D}和R5{A,E},然後與保持函數依賴後的分解取並集。得R1{A,B,C},R2{A,D,E},R3{E,D},R4{A,D},R5{A,E}。

第四步:觀察新組成的分解模式中,是否存在包含關係,有則去掉被包含的。如R3{E,D},R4{A,D},R5{A,E}都包含於R2{A,D,E},則刪去,最終得到轉化3NF的既有無損連接性又保持函數依賴的分解R1{A,B,C},R2{A,D,E}。

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