https://blog.csdn.net/yuyang_z/article/details/79115991
一、第三范式(3NF)——相對於BCNF,允許存在主屬性對候選碼的傳遞依賴和部分依賴
定義:如果關系模式R∈2NF,且每個非主屬性都不傳遞函數依賴於R的主關系鍵,則稱R屬於第三范式,簡稱3NF。
1、把一個關系模式分解成3NF,使它具有保持函數依賴性
算法如下:
其中提到了最小函數依賴集,那么最小函數依賴集怎么求呢?方法如下:
舉個例子:在R(U,F)中,U=ABCDEG,F={B→D,DG→C,BD→E,AG→B,ADG→BC}
1.1首先求最小依賴集
(1)右部屬性單一化,F={B→D,DG→C,BD→E,AG→B,ADG→B,ADG→C}
(2)去掉左邊多余屬性,只針對非單屬性
DG→C,若去掉D,則(G)+=G不包含C,D保留(不冗余),若去掉G,(D)+=D不包含C,G保留
BD→E,(D)+=D,(B)+=BDE包含E,則可以B→E代替此函數依賴
AG→B,(G)+=G,(A)+=A
ADG→B,(DG)+=DGC,(AG)+=AGB包含B,則可以由AG→B代替
ADG→C,(DG)+=DGC包含C,則可以由DG→C代替
所以最小依賴集F={B→D,DG→C,B→E,AG→B}
(3)去掉多余的依賴
去掉B→D,(B)+=BE,不包含D,則不冗余,不去掉
去掉DG→C,(DG)+=DG,不包含C
去掉B→E,(B)+=BD,不包含E
去掉AG→B,(AG)+=AG,不包含B
所以最小依賴集F={B→D,DG→C,B→E,AG→B}
1.2R中所有屬性都在最小依賴集中出現,轉下一步
1.3按照具有相同左部的原則分為:
R1=BDE,R2=DGC,R3=AGB
所以最終分解為ρ={R1(BDE),R2(DGC),R3(AGB)}
2、把一個關系模式分解成為3NF,使它具有保持函數依賴且無損
算法:step1,求F的規范覆蓋Fc
step2,初始化,置ρ={ }
step3,逐個考察Fc中的每一個FD:X→Y,如果ρ中的每一個關系模式都不包含XY,則將XY加入ρ中
step4,考察R的候選碼,如果ρ中所有關系模式都不包含R的候選碼,則將R的某個候選碼加入ρ中
2.1其中用到了規范覆蓋,那么規范覆蓋怎么求呢?如下:
步驟1,合並函數依賴,將Fc中如α1→β1和α1→β2轉換成α1→β1β2,得到新函數依賴集F1
步驟2,去除無關屬性,找出F1中α或β中含有無關屬性的函數依賴α→β,去除無關屬性后,代替原依賴集
其中步驟2中的無關屬性定義:
有了無關屬性的定義后,步驟2比較好解決了。
舉個例子:r(R)=r(A,B,C)和F={A→BC,B→C,A→B,AB→C}計算Fc
合並:A→BC與A→B合並為A→BC,F1={A→BC,B→C,AB→C}
去除無關屬性(單屬性不存在無關屬性):
對於AB→C,多屬性在左邊,去除AB中的A,r={AB}-{A}=B,(B)+=BC包含C,所以A無關,變為B→C,已存在,F1={B→C,A→BC}
對於A→BC,多屬性在右邊,去除BC中的B,F2={B→C,A→C},計算(A)+=AC,不包含B,不無關
去除BC中的C,F2={B→C,A→B},計算(A)+=AC,包含C,則BC中的C是無關屬性
變為F={B→C,A→B}
最終規范覆蓋Fc={B→C,A→B}
繼續以此題為例,求出候選碼,為A,所以依次考察Fc中的BC,初始ρ={},將BC加入ρ中,ρ={R1(BC)}。再考慮AB,ρ中的關系模式不包含AB,則將AB加入ρ中,ρ={R1(BC),R2(AB)}因為候選碼A已經在R2中,所以分解結束,最終分解為ρ={R1(BC),R2(AB)}。如果這里最終只有ρ={BC},那么要把候選碼A加入進去,則ρ={R1(BC),R2(A)}。這里附上候選碼的計算方法:
二、BC范式——排除了任何屬性(主、非主屬性)對候選碼的部分依賴和傳遞依賴,主屬性之間的傳遞依賴
定義:如果關系模式R∈1NF,且所有的函數依賴XY,決定因素X都包含了R的一個候選鍵,則稱R屬於BC范式。
算法:將一個關系模式分解成BCNF
(1)令ρ={R}
(2)如果ρ中所有模式都是BCNF,則轉(4)
(3)如果ρ中有一個關系模式S不是BCNF,則S中必能找到一個函數依賴X→A且X不是S的候選鍵,且A不屬於X,設S1=XA,S2=S-A,用分解{S1,S2}代替S,轉(2)
(4)分解結束,輸出ρ
舉個例子:將R(A,B,C,D)規范到BCNF,候選鍵為AC和BC,F={A→B,B→A,AC→D,BC→D}
令ρ={R(A,B,C,D)},分解為S1(AB),S2(ACD)
三、第4范式(4NF)
定義:
其中涉及到多值依賴的定義,
最終4NF的分解算法如下:
————————————————
版權聲明:本文為CSDN博主「星星,就醬」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yuyang_z/article/details/79115991