數據庫系統概論課堂筆記-規範化理論5

一、達到BCNF無損連接分解算法

對於算法的理解:存在函數依賴X->A,且X不是R的碼,這裏可以理解成正常的BCNF範式左部一定包含碼,那麼如果不是BCNF範式,一定存在一個依賴滿足上式。XA爲什麼是R的真子集?答:X不是候選碼,不能推出整個R(候選碼是可以通過依賴推導出整個R的),故XA一定不是整個R,或者說XA是R的真子集。

   注意:這裏的計算R1和R2的最小函數依賴集,其實跟正常的關於最小函數依賴集的計算思路是一致的。例如關於依賴子句的冗餘:DE->C,C->D,由於在R2中並無C屬性,故這樣消冗餘是可以的。還有關於依賴左部屬性的冗餘,例如DE->D。

二、達到3NF且保持函數依賴的分解 

算法實現:

算法解釋:2)中若X->A,且XA=R,說明關係模式R一定是3NF(無傳遞依賴),那麼就無需再分解。同理,也就將最小依賴集中的每一條依賴子句構造成一個關係模式(如果左部相同即合併),這也是保留了依賴集裏的每一條依賴子句,所以稱爲'保持函數依賴的分解',同時這種方式也保證了分解的關係模式一定是3NF,故稱爲'達到3NF且保持函數依賴的分解'

例1:關係模式R<U,F>,其中U={C,T,H,R,S,G},F={CS→G,C→T,TH→R,HR→C,HS→R},將其分解成3NF並保持函數依賴。
解:根據算法進行求解

(一)計算F的最小函數依賴集
① 利用分解規則,將所有的函數依賴變成右邊都是單個屬性的函數依賴。由於F的所有函數依賴的右邊都是單個屬性,故不用分解
舉個例子就是:CS→GB 變成 CS→G CS→B
② 去掉F中多餘的函數依賴
設CS→G爲冗餘的函數依賴,則去掉CS→G,得:
F1={C→T,TH→R,HR→C,HS→R}
計算(CS)F1+: G不屬於(CS)F1+ 故這個不是冗餘的函數依賴
同理:分別判斷,C→T,TH→R,HR→C,HS→R 是不是冗餘的函數依賴
③ 去掉F5中各函數依賴左邊多餘的屬性(只檢查左部不是單個屬性的函數依賴),沒有發現左邊有多餘屬性的函數依賴。
舉例:CS→G 去掉C得到S→G這是無法由後面的依賴推出的,同理去掉S,同樣的方法對其他所有的函數依賴進行檢驗
(二)由於R中的所有屬性均在F中都出現,所以轉下一步。

舉例: U={C,T,H,R,S,G},F={CS→G}
由於T,H,R沒有在F中出現,於是將R1={THP}作爲一個分解關係


故最小函數依賴集爲:F={CS→G,C→T,TH→R,HR→C,HS→R}

(三)對F按具有相同左部的原則分爲:
R1=CSG,R2=CT,R3=THR,R4=HRC,R5=HSR。
所以ρ={R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR)}。
相同左部分的原則:

舉例:C→T ,C→A是相同的左部,則將二者合併爲一個關係C→AT

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

算法解釋:即對通過'二'中算法得到達到3NF且保持函數依賴的分解執行一個“並”操作,所並對象爲原關係模式R的一個關鍵字,若最後的並集內部存在模式的相互包含關係,那麼即消除掉該模式。

例2:關係模式R<U,F>,其中:U={C,T,H,R,S,G},

F={CS→G,C→T,TH→R,HR→C,HS→R},分解成3NF並保持無損連接和函數依賴。

解:

(1) 根據上例所得結果,得到3NF並保持函數依賴的分解如下:

      σ={ R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR) }。

(2) CS,C,TH,HR,HS分別都是原模式F的關鍵字,以HS爲例,得到 τ = σ \cup {HS} = {CT,CSG,CHR,HSR,HRT,HS},這是F的一個分解。

(3)由於R6(HS)\leqslantR4(HSR)\in\tau,所以消去R6(HS),得到的分解爲{CT,CSG,CHR,HSR,HRT}。這個就是具有無損聯接性和保持函數依賴性的分解,且其中每一個模式均爲3NF。

將(2)中的HS換成F中其他的CS,C,TH或者HR進行(2)(3)的推導,得到的結果跟上面(3)中的結果依然是一樣的。

發佈了31 篇原創文章 · 獲贊 7 · 訪問量 3484
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章