可以在设计中应用数据规范化规则(有时候直接称为规范化规则)。可以使用这些规则来确定表的结构设计是否正确。将这些规则应用到数据库设计的过程称为数据库规范化,或直接称为规范化。
在表示了所有信息项并完成了初步设计时,规范化过程最有用。它将帮助确保已经将信息项划分到恰当的表中。规范化无法确保一开始就拥有所有的正确数据项。
需要在每个步骤中持续应用这些规则,以确保设计达到“范式”要求。广泛接受的范式有五个:第一范式到第五范式。本文将对前面三个范式展开讨论,因为大部分数据库设计都要求使用这三个范式。
第一范式
第一范式规定,表中每个行和列的交叉处只存在一个值,而决不是值的列表。例如,不能在一个名为“价格”的字段中放置多个“价格”。如果将行与列的每个交叉点看作一个单元格,则每个单元格中只能包含一个值。
第二范式
第二范式要求每个非键列完全依赖于整个主键,而不仅仅依赖于主键的一部分。当主键由多个列组成时,就适用此规则。例如,假定有包含以下列的表,其中“订单 ID”和“产品 ID”构成主键:
此设计违反了第二范式,因为“产品名称”依赖于“产品 ID”,但并不依赖于“订单 ID”,因此并不依赖于整个主键。必须将“产品名称”从表中删除。它属于不同的表,即属于“产品”表。
第三范式
第三范式要求不仅每个非键列依赖于整个主键,且非键列要互相独立。
另一种说法就是,每个非键列必须且只能依赖于主键。例如,假定有包含以下列的表:
假定“折扣”依赖于建议零售价 (SRP)。此表就违反了第三范式,因为非键列“折扣”依赖于另一个非键列 SRP。列独立性表示应该可以在不影响任何其他列的情况下更改任何非键列。如果更改了 SRP 字段中的值,“折扣”将相应地发生改变,这样就违反了该规则。在本例中,“折扣”应该移到另一个以 SRP 为主键的表中。