基于3N范式的数据表设计
范式
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
关系数据库现有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
第三范式
说明:
定义:
设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z(Z不包含Y)使得X->Y,Y->Z成立,Y推不出X,则R<U,F>∈3NF。
定义实属枯燥难懂,简单理解即为,若R<U,F>∈3NF,则每一个非主属性既不传递依赖于码,也不部分依赖于码。3NF是基于2NF的,2NF要求每一个非主属性完全依赖于任何一个候选码。
码:主码或候选码都简称为码。
完全依赖:在R(U)中,如果X->Y,并且对于X的任意一个真子集都不能保证推出Y,则Y对于X完全函数依赖。
传递依赖:在R(U)中,如果X->Y(X不包含Y),Y->Z(Y不包含Z),则称Z对X完全传递函数依赖。
举个例子:
假定学生关系表为:
Student:[学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话]
分析:
这个表结构是符号2NF的,因为从学号可以推出所有的非主属性。但是存在如下关系:
即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。
它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。
把学生关系表分为如下两个表:
学生:[学号, 姓名, 年龄, 所在学院];
学院:[学院, 地点, 电话]。
这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。