1. 程式人生 > >閒話資料庫(二)---第三正規化/BCNF

閒話資料庫(二)---第三正規化/BCNF

第三正規化:若關係模式R(U,F)中不存在這樣的碼X,屬性組Y以及非主屬性Z(Z不是Y的子集)使得Y函式依賴於X並且X不函式依賴於Y,Z函式依賴於Y成立,則關係模式R屬於3NF。

相當的繞口,並且不清醒的時候看它只會更加的想睡覺。

但是把這個轉變成另外一種表述:2NF只要消除了非主屬性對碼的傳遞函式依賴,則進階到3NF.

首先對最上面的數學表述形式分析:找不到這樣的X,使得: X是碼,Y一定是非主屬性組,Z非平凡函式依賴於Y。

仔細進一步分析:假如Z非平凡函式依賴於Y,那麼Y裡面會包含碼的存在。如果Y包含碼,那麼Y和碼X就是相互函式依賴的。出現違背條件的推理了。對於第三正規化的數學證明最好的方式就是類似上面推理的反證法了。當動手證明完了,就會得到2NF消除完非主屬性對碼的傳遞函式依賴就是3NF。

將資料庫模式變換成為3NF以及以上的正規化的時候,才會說資料庫達到規範化標準。變換處理的過程稱為關係模式的規範化處理。

一旦達到3NF,就要有一個觀念:非主屬性對碼沒有傳遞函式依賴。

3NF做的變化是化簡,雖然化簡的過程沒有給出具體的操作。

BCNF:若關係模式R屬於1NF,對任何任何Y非平凡函式依賴與X,Y不是X的子集,同時X均包含碼,則R屬於BCNF。

仔細一看,這個應該是要比第三正規化更高級別的正規化。在函式依賴消除的要求標準上應該是做的相當好了。如果R中的碼是所有屬性組合形成的,沒有單一屬性的碼,這個還是僅僅只能做到3NF,卻達不到BCNF要求的。

關係模式繼續的化簡,消除非主屬性間的函式依賴和傳遞函式依賴,規範化會進一步得到提升。當然還是會遺留一些問題的,例如多值問題。

當然對於現實的資料庫的規範化程度取決的條件有很多,例如規範化費用,人員水平,重視程度等等。所以上面的這些都是行動的guideline,不要認為拿到手的資料庫規範是嚴格做到的。