热门问题
时间线
聊天
视角
第四正規化
来自维基百科,自由的百科全书
Remove ads
第四正規化(4NF)是資料庫正規化中所使用的一種正規形式,是BC正規化之後的另一層次的正規化。第二正規化、第三正規化、BC正規化關注於屬性集合之間的函數相依;而第四正規化關注更一般形式稱作多值相依。
![]() | 此條目翻譯自英語維基百科,需要相關領域的編者協助校對翻譯。 |
Ronald Fagin於1977年提出。 資料庫的一個表遵從第四正規化,若且唯若對於任意一個非平凡的多值相依X Y, X是一個超鍵。[1]
多值相依
關係資料庫的一個表中的列頭分為不相交的三組:X, Y, Z。在一行的特定上下文中,稱上述列組的數據值為x, y, z。多值相依X Y,意味著如果選擇表中的任何值x(記作xc),從而確定該表中所有的xcyz列表,如果xc關聯著同一個y的值,不論z的任何取值。實質上,z的存在不提供任何信息能約束到y的可能值。也可以表述為,定義域的每一個值,都能確定值域中的一個值的集合。
平凡多值相依 X Y是或者Y是X的子集,或者X與Y一起形成了該關係的整個屬性集合。
函數相依是多值相依的特例。函數相依X → Y,那麼每個x確定了確切一個y值,而不能是多個。
Remove ads
例子
考慮下述例子:
每一行指出一家飯店能提供一種披薩與一個配貨地區。
該表沒有非鍵屬性,因為它僅有的鍵是{Restaurant, Pizza Variety, Delivery Area}。因此,它滿足到BC正規化為止的所有正規化。如果假設,飯店提供的披薩種類與配貨地區無關。也即飯店為所有的供貨地區提供它能製作的所有披薩類型。那麼,這個表不滿足第四正規化。因為這個表在{Restaurant}屬性(它不是超鍵)上提供了兩個非平凡的多值相依:
- {Restaurant} {Pizza Variety}
- {Restaurant} {Delivery Area}
這些在一個非超鍵上的非平凡多值相依說明了飯店提供的披薩的多樣性獨立於飯店的供貨地區。這導致了該表中的數據冗餘:例如,A1 Pizza供貨 Stuffed Crust就重複了3遍;如果A1 Pizza開始生產Cheese Crust pizzas那麼向表中增加多行,A1 Pizza的每個供貨地區都需要一行。這就可能在給A1 Pizza的每個供貨地區增加一行Cheese Crust披薩時,遺漏了一個供貨地區,從而導致不滿足於多值相依{Restaurant} {Pizza Variety}。
為了避免上述的錯誤發生,需要把披薩的多樣性與供貨地區放置在不同的表中,產生了兩張滿足第四正規化的表:
如果披薩的種類隨著供貨地區不同而變化,那麼最初的三列的表就滿足第四正規化。
Remove ads
參見
- 屬性值系統
參考文獻
擴展閱讀
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads