域键范式
关系数据库设计的域键范式 (Domain-key normal form, DK/NF),是数据库规范化的一个级别,以去除关系不包含于域约束(domain constraint)的其他约束。
域约束指出给定属性的取值范围。键约束指出这几个属性唯一确定了表中的一行。
域键范式使得一个关系的所有约束都是键与域(domain)定义的逻辑蕴涵;因而执行对键与域上的限制与条件后,将导致所有的约束都满足。满足域键范式,使得数据库避免了不是清晰的域约束或键约束的一般性约束。这种一般性约束往往需要特殊编程(如存储过程)来检验是否满足。
第三范式、BC范式、第四范式与第五范式是域键范式的特例。因为函数依赖、多值依赖与连接(join)依赖都可以转换为(超)键。这些范式对域约束没有讨论,可看作没有域约束。
例子
[编辑]下表违反了DKNF:
Wealthy Person (富人) |
Wealthy Person Type (富人类型) |
Net Worth in Dollars (美元净值) |
---|---|---|
Steve | Eccentric Millionaire | 124,543,621 |
Roderick | Evil Billionaire | 6,553,228,893 |
Katrina | Eccentric Billionaire | 8,829,462,998 |
Gary | Evil Millionaire | 495,565,211 |
(假定富人属性包括了预定集样本集中所有富人的名字;富人类型属性取值为'Eccentric Millionaire', 'Eccentric Billionaire', 'Evil Millionaire', 'Evil Billionaire';美元净值属性取值为大于等于1,000,000的整数)
在富人类型属性与美元净值属性之间存在约束,即使不能从一个属性推得另一个属性:Eccentric Millionaire或Evil Millionaire的美元净值应在1,000,000 到 999,999,999,而Eccentric Billionaire或Evil Billionaire的美元净值应大于等于1,000,000,000。该约束既不是域约束(domain constraint)也不是键约束(key constraint)。因为不能用域约束或键约束来保证表中不出现不一致的Wealthy Person Type / Net Worth。
违反DKNF的问题可把Wealthy Person Type属性域改为两个值:'Evil'与'Eccentric',而百万富翁还是十亿富翁的状态可通过Net Worth in Dollars属性确定,因此没有损失信息。
Wealthy Person | Wealthy Person Type | Net Worth in Dollars |
---|---|---|
Steve | Eccentric | 124,543,621 |
Roderick | Evil | 6,553,228,893 |
Katrina | Eccentric | 8,829,462,998 |
Gary | Evil | 495,565,211 |
Status (狀況) |
Minimum (最少) |
Maximum (最多) |
---|---|---|
Millionaire | 1,000,000 | 999,999,999 |
Billionaire | 1,000,000,000 | 999,999,999,999 |
外键
[编辑]表之间的关系(Relationships)如果不能表示为外键,显然违反域键范式。例如,"Parent ID"属性可以指向几张表中的某个,这取决于另外的属性"Parent Type", 这违反了DKNF.
参见
[编辑]参考文献
[编辑]- Fagin, Ronald. A Normal Form for Relational Databases That Is Based on Domains and Keys (PDF). ACM Transactions on Database Systems. 1981, 6: 387–415 [2017-02-26]. doi:10.1145/319587.319592. (原始内容存档 (PDF)于2007-09-27).
外部链接
[编辑]- Database Normalization Basics(页面存档备份,存于互联网档案馆) by Mike Chapple (About.com)
- An Introduction to Database Normalization by Mike Hillyer.
- Normalization by ITS, University of Texas.
- A tutorial on the first 3 normal forms by Fred Coulson
- Description of the database normalization basics(页面存档备份,存于互联网档案馆) by Microsoft