
1.3 数据库的规范化
关系数据库的规范化理论为:关系数据库中的每个关系都要满足一定的规范。根据满足规范的条件不同,可以分为5个等级:第一范式(1NF)、第二范式(2NF)……其中,NF是Normal Form的缩写。一般情况下,只要把数据规范到第三范式标准,就可以满足需要了。下面举例介绍前3种范式。
1. 第一范式(1NF)
在一个关系中,消除重复字段,且各字段都是最小的逻辑存储单位。第一范式是第二和第三范式的基础,是最基本的范式。第一范式包括下列指导原则。
(1)数据组的每个属性只可包含一个值。
(2)关系中的每个数组必须包含相同数量的值。
(3)关系中的每个数组一定不能相同。
在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系型数据库。
如果数据表中的每一列都是不可再分的基本数据项,即同一列中不能有多个值,那么就称此数据表符合第一范式。由此可见,第一范式具有不可再分解的原子特性。
在第一范式中,数据表的每一行只包含一个实体的信息,并且每一行的每一列只能存放实体的一个属性。例如,对于学生信息,不可以将学生实体的所有属性信息(如学号、姓名、性别、年龄、班级等)都放在一个列中显示,也不能将学生实体的两个或多个属性信息放在一个列中显示,即学生实体的每个属性信息都分别放在一个列中显示。
如果数据表中的列信息都符合第一范式,那么在数据表中的字段都是单一的、不可再分的。表1-1就是不符合第一范式的学生信息表,因为“家庭地址”列中包含“地址”和“邮编”两个属性信息,这样“班级”列中的信息就不是单一的,是可以再分的。表1-2是符合第一范式的学生信息表,它将原“家庭地址”列的信息拆分为“地址”列和“邮编”列。
表1-1 不符合第一范式的学生信息表

表1-2 符合第一范式的学生信息表

2. 第二范式(2NF)
第二范式是在第一范式的基础上建立起来的,即要满足第二范式,必先满足第一范式。第二范式要求数据库表中的每个实体(即各个记录行)必须可以被唯一地区分。为实现区分各行记录,通常需要为表设置一个“区分列”,用以存储各个实体的唯一标识。在学生信息表中设置了“学号”列,由于每个学生的学号都是唯一的,因此每个学生可以被唯一地区分(即使学生存在重名的情况下),那么这个唯一属性列就被称为主关键字或主键。
第二范式要求实体的属性完全依赖于主关键字,即不能存在仅依赖主关键字一部分的属性,如果存在,这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
例如,这里以表1-3“学生选课信息表”为例,若以学号为关键字(即主键),就会存在如下决定关系:
•(学号)决定(姓名、年龄、课程名、成绩、学分);
• 但是,学分取决于课程名。
上面的决定关系还可以进一步拆分为如下两种决定关系:
•(学号)决定(姓名、年龄);
•(课程名)决定(学分)。
所以这个关系表不满足第二范式。
表1-3 不符合第二范式的学生选课信息表

上面的这种关系可以更改为表1-4至表1-6。
表1-4 学生信息表

表1-5 课程信息表

表1-6 选课信息表

3. 第三范式(3NF)
第三范式是在第二范式的基础上建立起来的,即要想满足第三范式,必先满足第二范式。第三范式要求关系表不存在非关键字对任意候选关键字列的传递函数依赖,即第三范式要求一个关系表中不包含已在其他关系表中包含的非主关键字信息。
所谓传递函数依赖,是指如果存在关键字段A决定非关键字段B,而非关键字段B决定非关键字段C,则称非关键字段C传递函数依赖于关键字段A。
以表1-7所示的员工信息表(不符合第三范式)为例,该表中包含员工编号、员工姓名、年龄、部门编码、部门经理等信息。
表1-7 员工信息表(不符合第三范式)

表1-7的关键字为“员工编号”,且存在如下决定关系:
(员工编号)决定(员工姓名、年龄、部门编码、部门经理)。
由上述决定关系可知,表1-7符合第二范式,但不符合第三范式。要想符合第三范式,表1-7须存在如下决定关系:
(员工编号)决定(部门编码)决定(部门经理)。
即存在非关键字段“部门经理”对关键字段“员工编号”的传递函数依赖。我们可用表1-8和表1-9来表示可使表1-7符合第三范式的决定关系。
表1-8 员工信息表

表1-9 部门信息表
