摘自《数据库系统概论》
通常按照属性间依赖情况来区分关系规范化的程度为第一范式、第二范式、第三范式、第四范式。
1NF(Normal Form):每一个分量必须是不可分的数据项,满足这个条件的关系模式就属于第一范式。
数据依赖:是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。它是现实世界属性间相互联系的抽象。其中最重要饿是函数依赖(Functional Dependency)和多值依赖(Multivalued Dependency)。
1NF缺点:插入异常、删除异常和冗余太大。
函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。
规范化设计的原则:
模式分解:把一个关系模式分解成一个或多个关系模式,在及分解过程中消除那些不良的函数依赖,从而获得一个较好的关系模式。
无损连接:分解后的关系模式自然连接,可以恢复成原来的关系。
保持函数依赖:分解后不能破坏原来的函数依赖(不能破坏原来的语义)。
2NF:若R属于第一范式,且每一个非主属性完全函数依赖于码,则R属于2NF。不属于2NF的关系模式,就会出现1NF的缺点。
3NF:若R属于第三范式,则每一个非主属性既不部分依赖于码,也不传递依赖于码。
BCNF:若每一个决定因素都包含码,则R属于BCNF。
由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:
所有非主属性对每一个码都是完全函数依赖
所有的主属性对每一个不包含它的码,也是完全函数依赖
没有任何属性完全函数依赖于非码的任何一组属性
3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF允许函数依赖。如果一个关系模式是4NF,则必为BCNF。
函数依赖和多值依赖是两种最重要的数据依赖。如果只考虑函数依赖,则属于BCNF的关系模式规范化程度已经是最高的了。如果考虑多值依赖,则属于4NF的关系模式规范化程度是最高的。除了函数依赖和多值依赖之外,还有其他数据依赖。例如连接依赖。函数依赖是多值依赖的一种特殊情况,而多值依赖实际上又是连接依赖的一种特殊情况。存在连接依赖的关系模式仍可能遇到数据冗余及插入、删除异常等问题。如果消除了属于4NF的关系模式中存在的连接依赖,则可以进一步达到5NF的关系模式。
规范化小结
规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即“一事一地”的模式设计原则。让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。因此所谓规范化实质上是概念的单一化。
关系模式的规范化过程是通过对关系模式的分解来实现的。把低一级的关系模式分解为若干个高一级的关系模式。这种分解不是唯一的。下面就将进一步讨论分解后的关系模式与原关系模式“等价”的问题以及分解的算法。