规范化
关系数据库的规范化理论最早是由关系数据库理论创始人E.F.Codd提出的,后来又经过了许多专家和学者对其进行了深入的研究和发展完善,最后形成了一套关系数据库的设计理论。这套理论主要包括三个方面的内容:
1 函数依赖
2 范式
3 模式设计
本文要重点讨论的是范式,其余那两个方面的内容清参照任何一本关系数据库理论教材。
规范化的基本思想是企图消除关系模式中的数据冗余,消除数据依赖中的不合理部分,解决数据插入、删除时发生的概念性异常现象。数据冗余不必多说,下面举例说明数据插入和删除时发生概念性异常的情况。例:要求设计员工管理数据库,其关系模式如下:
R(员工姓名,部门,项目组)
插入异常:如果某个新设立的部门,尚未招聘员工的时候,则部门和项目组的信息无法插入。
删除异常:在某部门员工全部离职而尚未招聘的时候,删除全部记录则部门和项目组的信息也随之删除。而这实际上部门和项目组依然存在,但在数据库中却无法找到该部门的信息。
范式
要解决上述问题,这就要求设计出来的关系模式满足一定的条件。我们把关系数据库的规范化过程中为不同程度的规范化要求而设立的不同标准成为范式(Normal Form)。由于规范化的程度不同,就产生了不同的范式。范式的概念最早也是由E.F.Codd提出的。从1971年起,他相继提出了三级范式,即1NF、2NF、3NF。后来,又有人定义了4NF和5NF。其中,每种范式都规定了一些限制约束条件,一级比一级有更严格的要求。下面,以具体例子来介绍各个范式的定义和满足范式的做法。员工培训管理为例,刚开始的时候,可能定义数据表如下:
表1
员工名 | 项目组 | 项目主管 | 培训课程1 | 培训课程2 |
张三 | 网银 | 王五 | 程序设计 | 英语 |
李四 | 社保 | 赵六 | 数据库 | 英语 |
张三 | 嵌入式 | 孙七 | 软件架构 | 项目管理 |
这种没有经过处理的数据表形式,有很明显的缺点。比如,员工要加入第三个培训班级时,则需要新建一列。所以,要创建一个有扩展性的系统。采用遵守1NF的办法可以解决这个问题。