第五正規化
關係資料庫設計的第五正規化 (5NF),又稱投影-連接正規化(project-join normal form,PJ/NF)是資料庫正規化的一個級別,以去除多個關係之間的語義相關。一張表滿足第五正規化若且唯若它的每個連接相依可由候選鍵推出。
R連接相依於 *{A, B, … Z},定義為A, B, … Z都是R的屬性的子集,且A, B, … Z的連接(join)等於R。R上的連接相依 *{A, B, … Z}可由R的候選鍵推出,若且唯若A, B, …, Z的每一個都包含了R的超鍵。[1]
表T滿足第五正規化意味著它不能被無損分解為幾個更小的表。分解後的每個小表與表T擁有相同的候選鍵的情形被排除不予考慮(作為平凡情形)。
第五正規化於1979年由Ronald Fagin在會議論文Normal forms and relational database operators中首次提出。[2]
例子
考慮下例:
Traveling Salesman(上門推銷員) | Brand(品牌) | Product Type(產品類型) |
---|---|---|
Jack Schneider | Acme | Vacuum Cleaner |
Jack Schneider | Acme | Breadbox |
Mary Jones | Robusto | Pruning Shears |
Mary Jones | Robusto | Vacuum Cleaner |
Mary Jones | Robusto | Breadbox |
Mary Jones | Robusto | Umbrella Stand |
Louis Ferguson | Robusto | Vacuum Cleaner |
Louis Ferguson | Robusto | Telescope |
Louis Ferguson | Acme | Vacuum Cleaner |
Louis Ferguson | Acme | Lava Lamp |
Louis Ferguson | Nimbus | Tie Rack |
三列共同組成了主鍵。該表也滿足第四正規化,因為不存在多值相依:沒有列(顯然該列自身不是候選鍵)可由其它兩列確定。
如果沒有任何規則限制上門推銷員、品牌、產品類型的組合,那麼上述三個屬性的表對描述這些數據是必須的。但是,如果假定存在下述規則:如果上門推銷員經營某個品牌與某個產品類型,那麼該推銷員必須經營該品牌製造的該產品類型的商品。這種情形下,可以把上表分為三個表:
Traveling Salesman(上門推銷員) | Product Type(產品類型) |
---|---|
Jack Schneider | Vacuum Cleaner |
Jack Schneider | Breadbox |
Mary Jones | Pruning Shears |
Mary Jones | Vacuum Cleaner |
Mary Jones | Breadbox |
Mary Jones | Umbrella Stand |
Louis Ferguson | Telescope |
Louis Ferguson | Vacuum Cleaner |
Louis Ferguson | Lava Lamp |
Louis Ferguson | Tie Rack |
Traveling Salesman(上門推銷員) | Brand(品牌) |
---|---|
Jack Schneider | Acme |
Mary Jones | Robusto |
Louis Ferguson | Robusto |
Louis Ferguson | Acme |
Louis Ferguson | Nimbus |
Brand(品牌) | Product Type(產品類型) |
---|---|
Acme | Vacuum Cleaner |
Acme | Breadbox |
Acme | Lava Lamp |
Robusto | Pruning Shears |
Robusto | Vacuum Cleaner |
Robusto | Breadbox |
Robusto | Umbrella Stand |
Robusto | Telescope |
Nimbus | Tie Rack |
在這種情形下,上門推銷員Louis Ferguson不可能拒絕銷售由ACME製造的真空吸塵器(Vacuum Cleaner),如果他推銷Acme的其它類型的產品也推銷其它品牌的真空吸塵器。
注意這種方式是如何去除數據冗餘。假設經營麵包箱與真空吸塵器的上門推銷員Jack Schneider開始新增銷售Robusto品牌。在最初的那張表中,需要增加兩行: (<Jack Schneider, Robusto, Breadboxes>, <Jack Schneider, Robusto, Vacuum Cleaners>)。而在分解後的三張表的設計中,僅需要在表「Brands By Traveling Salesman」中增加一行:(<Jack Schneider, Robusto>)。
用途
僅在很少情況下滿足第四正規化的表可能會不滿足第五正規化。這發生在複雜的真實世界的約束限定了屬性的有效組合,但不能在滿足第四正規化的表的結構中體現出來。這種表如果不能正規化為第五正規化,就需要應用程式通過插入、修改、刪除等操作來維護表中的數據的邏輯一致性。相反,滿足第五正規化的表的設計排除了這種不一致性。
參見
參考文獻
- ^ Analysis of normal forms for anchor-tables (PDF). [2017-02-25]. (原始內容 (PDF)存檔於2016-12-03).
- ^ S. Krishna. Introduction to Data Base and Knowledge Base Systems. 1991. ISBN 9810206208.
The fifth normal form was introduced by Fagin
進一步閱讀
- Kent, W. (1983) A Simple Guide to Five Normal Forms in Relational Database Theory (頁面存檔備份,存於網際網路檔案館), Communications of the ACM, vol. 26, pp. 120–125
- Date, C.J., & Darwen, H., & Pascal, F. Database Debunkings (頁面存檔備份,存於網際網路檔案館)
- Darwen, H.; Date, C. J.; Fagin, R. A normal form for preventing redundant tuples in relational databases. Proceedings of the 15th International Conference on Database Theory - ICDT '12 (PDF). 2012: 114–126 [2017-02-25]. ISBN 9781450307918. doi:10.1145/2274576.2274589. (原始內容 (PDF)存檔於2012-07-12).