1NF、2NF、3NF、BCNF精讲

本文笔者总结了1NF、2NF、3NF、BCNF的概念、关系以及判别方式,尽可能帮助读者以比较轻松的方式了解这四种范式。

在数据库课程中,函数依赖部分总共涉及到四种范式,即1NF、2NF、3NF、BCNF,他们之间存在着非常简明易懂的包含关系,可以使用洋葱圈模型直观表示,见下图。

可见,1NF包含的范围最大,2NF、3NF、BCNF包含的范围依次减小 ,它们之间存在这样的关系:

1NF\subset 2NF\subset 3NF \subset BCNF

某一关系模型R为第n范式,即可简记为R\in nNF

一个低一级范式的关系模型,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。(其中,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

概念:若关系模式R\in1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R\in2NF

2NF适用于消除非主属性对主属性的部分函数依赖

3NF

概念:在2NF的基础上,如果非主属性对任意一个主属性都没有传递函数依赖,则R\in3NF

3NF适用于消除非主属性对主属性的传递函数依赖

BCNF

BCNF是3NF的特殊情况,其适用于消除主属性对码的部分和传递函数依赖

判别标准:

在3NF的基础上,所有主属性内部之间没有部分或传递函数依赖关系,此时R\in BCNF

判断的模板步骤

无论判断属于哪种范式,都可以按照以下几步来进行:

(1)找出关系模式中的所有候选码;

(2)确定主属性、非主属性

(3)列出所有的函数依赖关系(主属性间、非主属性间、主属性与非主属性间的函数依赖关系)

(4)按照1NF、2NF、3NF、BCNF的判别标准进行判断

(5)进行模式分解

猜你喜欢

转载自blog.csdn.net/wyr1849089774/article/details/136109543