规范化理论研究关系模式中各属性之间的依赖关系及其对关系性能的影响,它讨论的是关系模式应该具备的性质和设计方法,为数据库的设计工作提供严格的理论依据。规范化理论是E.F.Codd在1971年提出的,研究者为数据库设计定义了五种规范化模式(Normal Form,NF)。
1.第一范式(1NF)
属于第一范式的关系应满足的基本条件是元组中的每个分量都必须是不可分割的数据项,就是同一个表中没有重复项。例如表3-4不符合1NF的要求,表3-5符合1NF的要求。
表3-4 不符合第一范式的关系
表3-5 符合第一范式的关系
在当前的关系数据库管理系统(DBMS)中不可能做出不符合第一范式的数据库,因为DBMS不允许将数据库表的一列再分成两列或多列。
2.第二范式(2NF)
所谓第二范式,指每个非主属性要完全函数依赖于主属性的第一范式。即每个非主属性由整个主键函数决定,而不能由主键的一部分来决定。如表3-6所示的“选课”表,关键字为组合关键字(学号,课程名称),其他字段为非主属性。而表中的非主属性并不都完全依赖于主属性,因此,这个关系只是1NF,而不是2NF。
表3-6 不符合第二范式的学生与课程关系
该表存在如下决定关系:
(学号,课程名称)→(姓名,年龄,成绩,学分)
这个数据库表不符合2NF,因为存在如下决定关系:
(课程名称)→(学分),(学号)→(姓名,年龄)
由于不符合2NF,这个选课关系表会存在如下问题:
(1)数据冗余
一门课有n个同学选修,则“课程名称”与“学分”字段就重复n-1次,这就使数据项多次重复而产生数据冗余。
(2)更新异常
若调整了某门课程的名称,数据表中所有行的“课程名称”值都要更改,否则会出现选修同一门课程而名称不同的情况,产生更新异常。(www.xing528.com)
(3)插入异常
假设要开设一门新的课程,暂时还没有人选修。由于还没有“学号”关键字,课程名称和学分也无法记录入数据库,这就产生插入异常。
(4)删除异常
假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常,这就产生删除异常。
为了处理上述问题,我们可以将选课表改为如下三个表:
学生表:Student(学号,姓名,年龄);
课程表:Course(课程号,课程名称,学分);
选课关系表:Select Course(学号,课程号,成绩)。
上述数据库表是符合2NF的,消除了数据冗余、更新异常、插入异常和删除异常。
3.第三范式(3NF)
第三范式是消除了传递依赖的第二范式,也就是非主属性之间不存在函数依赖,则称关系R是属于第三范式。所谓传递函数依赖,指的是如果存在“A→B→C”的决定关系,则C传递函数依赖于A。
表3-7存在如下决定关系:
表3-7 不符合第三范式的学生与课程关系
(学号)→(姓名,年龄,学院,学院地点,学院电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
(学号)→(学院)→(学院地点,学院电话)
即存在非关键字段“学院地点”、“学院电话”对关键字段“学号”的传递函数依赖。它也会存在数据冗余、更新异常、插入异常和删除异常的情况,所以要将学生关系表分为如下两个表:
学生:(学号,姓名,年龄,学院);学院:(学院,地点,电话)。
这样的数据库表是符合3NF的,消除了数据冗余、更新异常、插入异常和删除异常。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。