3NF、BCNF和4NF基本概念和分解


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


免責聲明!

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



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