本文笔者总结了1NF、2NF、3NF、BCNF的概念、关系以及判别方式,尽可能帮助读者以比较轻松的方式了解这四种范式。
在数据库课程中,函数依赖部分总共涉及到四种范式,即1NF、2NF、3NF、BCNF,他们之间存在着非常简明易懂的包含关系,可以使用洋葱圈模型直观表示,见下图。
可见,1NF包含的范围最大,2NF、3NF、BCNF包含的范围依次减小 ,它们之间存在这样的关系:
某一关系模型R为第n范式,即可简记为
一个低一级范式的关系模型,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。(其中,1NF为最低级的关系模型)
先验知识
在讲解之前,需要明晰以下几个概念。
1、候选码:能够唯一标识一条记录的最小属性集(候选码可以有多个)
2、主码:某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条)
3、主属性:包含在任一个候选码中的单个属性都称为主属性
4、非主属性:没有出现在任何一个候选码中的属性都称为非主属性
5、完全函数依赖与部分函数依赖
举个例子:
有一个关系模式S【学号,课程号,课程名,学生成绩】,其主码为【学号,课程号】,
那么对于【学生成绩】来说,【学号,课程号】决定【学生成绩】,此时称【学生成绩】完全依赖于【学号,课程号】
但是对于【课程名】来说,【课程号】决定【课程名】,但主码为【学号,课程号】,所以此时称【学生成绩】部分依赖于【学号,课程号】
6、传递函数依赖
如果X -> Y,Y !-> X,Y -> Z,则称Z对X传递函数依赖。
注意:如果Y->X,则不再是传递函数依赖,此时Z直接依赖于X。
举个例子:
有一个关系模式S【学号,学生院系,院系主任】
则明显可知,【学号】决定【学生院系】,【学生院系】不决定【学号】,【学生院系】决定【院系主任】,此时称【院系主任】传递函数依赖于【学号】。
1NF
从洋葱圈图也可以看出,1NF是数据库的基础,一个关系模式最低要求就是要满足1NF,否则他都不能成为一个数据库。
1NF的概念为:对于一个表来说,如果每一个单元格都是不可再分的数据项,那么就可以称关系模型为第一范式。
简单举个例子——
@符合要求的表(记作表A)
籍贯省份 | 籍贯市区 | 籍贯县区 |
江苏 | 南京 | 江宁 |
@不符合要求的表(记作表B)
籍贯地区 |
江苏省南京市江宁区 |
可以看出,表B中的单元格明显可以再分,可以将籍贯地区进一步拆分出省、市、区,因此表B并不符合1NF。
当然以上属于比较特殊的情况,基本上我们按照正常逻辑构造一个数据表,都是符合一范式的。(不符合一范式,之后的所有工作都无法进行!)
2NF
概念:若关系模式,并且每一个非主属性都完全函数依赖于任何一个候选码,则
。
2NF适用于消除非主属性对主属性的部分函数依赖。
3NF
概念:在2NF的基础上,如果非主属性对任意一个主属性都没有传递函数依赖,则。
3NF适用于消除非主属性对主属性的传递函数依赖。
BCNF
BCNF是3NF的特殊情况,其适用于消除主属性对码的部分和传递函数依赖。
判别标准:
在3NF的基础上,所有主属性内部之间没有部分或传递函数依赖关系,此时。
判断的模板步骤
无论判断属于哪种范式,都可以按照以下几步来进行:
(1)找出关系模式中的所有候选码;
(2)确定主属性、非主属性
(3)列出所有的函数依赖关系(主属性间、非主属性间、主属性与非主属性间的函数依赖关系)
(4)按照1NF、2NF、3NF、BCNF的判别标准进行判断
(5)进行模式分解