热门问题
时间线
聊天
视角

域键范式

資料庫規範化的一個級別 来自维基百科,自由的百科全书

Remove ads

关系数据库设计的域键范式 (Domain-key normal form, DK/NF),是数据库规范化的一个级别,以去除关系不包含于域约束(domain constraint)的其他约束。

域约束指出给定属性的取值范围。键约束指出这几个属性唯一确定了表中的一行。

域键范式使得一个关系的所有约束都是键与域(domain)定义的逻辑蕴涵;因而执行对键与域上的限制与条件后,将导致所有的约束都满足。满足域键范式,使得数据库避免了不是清晰的域约束或键约束的一般性约束。这种一般性约束往往需要特殊编程(如存储过程)来检验是否满足。

第三范式BC范式第四范式第五范式是域键范式的特例。因为函数依赖、多值依赖与连接(join)依赖都可以转换为(超)键。这些范式对域约束没有讨论,可看作没有域约束。

例子

下表违反了DKNF:

更多信息 Wealthy Person (富人), Wealthy Person Type (富人类型) ...

(假定富人属性包括了预定集样本集中所有富人的名字;富人类型属性取值为'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 ...
更多信息 Status(状况), Minimum (最少) ...
Remove ads

外键

表之间的关系(Relationships)如果不能表示为外键,显然违反域键范式。例如,"Parent ID"属性可以指向几张表中的某个,这取决于另外的属性"Parent Type", 这违反了DKNF.


参见

参考文献

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads