关系模式规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖中的不合适的部分,解决数据插人、删除时发生的异常现象。这就要求关系模式要满足一定的条件。我们把关系模式规范化过程中为不同程度的规范化要求设立的不同标准称为范式。由于规范化的程度不同,就产生了不同的范式。
第一范式
第一范式(First Normal Form)是最基本的规范形式,即关系中每个属性都是不可再分的简单项。
如果关系模式R所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R∈1NF。
把满足1NF的关系称为规范化关系。在关系数据库系统中只讨论规范化的关系,凡是非规范化的关系模式必须转化成规范化的关系。因此,1NF是关系模式应具备的最起码的条件。
然而,一个关系模式仅仅属于第一范式是不适用的,它可能具有大量的数据冗余,存在插入异常、删除异常和更新异常等弊端。
第二范式
如果关系模式R∈1NF,且每一个非主属性都完全函数依赖于R的主关系键,则称R属于第二范式(Second Normal Form),简称2NF,记作R∈2NF。
从1NF关系中消除非主属性对主关系键的部分函数依赖,则可得到2NF关系。如果R的关系键为单属性,或R的全体属性均为主属性,则R∈2NF。
2NF规范化是指把1NF关系模式通过投影分解,转换成2NF关系模式的集合。分解时遵循“一事一地”的基本原则,让一个关系只描述一个实体或者实体间的联系。
2NF的关系模式解决了1NF中存在的一些问题,2NF规范化程度比1NF前进了一步,但2NF的关系模式在进行数据操作时,仍存在着数据冗余、插入异常、删除异常和更新异常等问题。之所以存在这些问题,是因为2NF的关系模式存在着非主属性对主键的传递函数依赖。为此,对2NF关系模式还需要进一步简化,消除这种传递函数依赖,这样就得到了3NF。
第三范式
如果关系模式R∈2NF,且每一个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式(Second Normal Form),简称3NF,记作R∈3NF。
3NF规范化是指把2NF关系模式通过投影分解转换成3NF关系模式的集合。3NF规范化时遵循的原则与2NF相同,即“一事一地”,让一个关系只描述一个实体或者实体间的联系。
BC范式
如果关系模式R∈1NF,且所有的函数依赖X→Y(YX),决定因素X都包含了R的一个候选键,则称R属于BC范式(Boyce Codd Normal Form),记作R属于BCNF。如果数据库中每个关系模式都属于BCNF,则称为BCNF的数据库模式。
满足BCNF的关系将消除任何属性(主属性或非主属性)对键的部分函数依赖和传递函数依赖。
如果一个关系数据库中的所有关系模式都属于BCNF,那么,在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了操作异常诸多问题。
第四范式
前面所介绍的规范化都是建立在函数依赖的基础上,函数依赖表示的是关系模式中属性间的一对一或一对多的联系,但它并不能表示属性间的多对多的关系,因而某些关系模式虽然已经规范到到BCNF,仍然存在一些数据冗余、插入异常、删除异常和更新异常弊端。因此定义第四范式来解决多值依赖这个问题。
设有一关系模式R(U),U是其属性全集,X,Y是U的子集,D是R上的数据依赖集。如果对于任一多值依赖X→→Y,此多值依赖是平凡的,或者X包含了R的一个候选关键字,则称R是第四范式的关系模式,记为R∈4NF。
函数依赖和多值依赖是两种最重要的数据依赖。如果只考虑函数依赖,则属于BCNF的关系模式的规范化程度已经是最高的了。如果考虑多值依赖,则属于4NF的关系模式化程度是最高的。
事实上,数据依赖中除函数依赖和多值依赖之外,还有其他数据依赖。函数依赖是多值依赖的一种特殊情况,而多值依赖实际上又是连接依赖的一种特殊情况。但连接依赖不像函数依赖和多值依赖那样可由语义直接导出,而是在关系的连接运算时才反映出来。存在连接依赖的关系模式仍可能遇到数据冗余及插人、修改、删除异常的问题。如果消除了属于4NF的关系模式中存在的连接依赖,则可以进一步达到5NF的关系模式。
不同级别范式之间的关系可以用下图表示。
![](https://i-blog.csdnimg.cn/blog_migrate/d72cfd2be1fa40a3ea3e0b1592914d44.png)
参考资料:[1]陈志泊,王春玲,许福,范春梅.数据库原理及应用教程(第3版)[M].北京:人民邮电出版社,2014:145-158.