第五范式
关系数据库设计的第五范式 (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).