数据库系统概论|第六章:关系数据理论—课程笔记2
前言
前文我们介绍了规划化的基本概念,同时引入了关于规范化的相关定义与基本概念,低一级范式的关系模式,通过模式分解,可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。本文将围绕范式展开讨论,分别介绍第一范式、第二范式、第三范式以及BC范式,首先讲解各个范式的基本概念,最后介绍关于各个范式之间的区别与联系。
第一范式(1NF)
定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库,但是满足第一范式的关系模式并不一定是一个好的关系模式。
第二范式(2NF)
定义:若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。 【此处的码不仅可以是主码,还可以是候选码】【第二范式的核心要求在于消除部分函数依赖】
如上图所给出的S-L-C关系模式,其中候选码为(Sno,Cno),其中的函数依赖如箭头所示,这其中便存在着部分函数依赖,该关系模式中存在的核心问题便是:Sdept,Sloc部分函数依赖于码。
解决方法:S-L-C分解为两个关系模式,以消除这些部分函数依赖。
- SC(Sno, Cno, Grade)
- S-L(Sno, Sdept, Sloc)
关系模式SC的码为(Sno, Cno);关系模式S-L的码为Sno。分解后,非主属性对码都是完全函数依赖。
分解后如上图所示,此时的关系模式符合第二范式。但此时应该注意,将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
第三范式(3NF)
定义:在R<U, F> 中,若不存在这样的码X、属性组Y及非主属性Z(Z ⊄ Y),使得X→Y,Y→Z成立,Y不函数依赖于X,则称R<U, F> ∈ 3NF。【第三范式的核心要求在于消除传递函数依赖】
若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
上图中展示的S-L-C关系模式中存在着传递函数依赖,即使进行模式分解后的S-L中仍然存在着传递函数依赖,即S-L⊄ 3NF,因此需要把S-L分解为两个关系模式,以消除传递函数依赖:
- S-D(Sno, Sdept)
- D-L(Sdept, Sloc)
S-D的码为Sno, D-L的码为Sdept。可见,分解后的关系模式S-D与D-L中,都不再存在传递依赖。因此,S-D(Sno, Sdept) ∈ 3NF;D-L(Sdept, Sloc)∈ 3NF。但是注意,将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。
BC范式(BCNF)
定义:关系模式R<U, F>∈1NF,若X→Y且Y ⊄ X时X必含有码,则R<U, F> ∈BCNF。
BC范式的言外之意在于每一个决定属性因素都包含码。即在这个关系模式中,能够起到决定作用的属性组中必须包含码。
BCNF具有高度的概括性,一个满足BCNF的关系模式有:
①所有非主属性对每一个码都是完全函数依赖。
②所有的主属性对每一个不包含它的码,也是完全函数依赖。
③没有任何属性完全函数依赖于非码的任何一组属性。
在这其中,一定要重点理解第三点,就是说,在满足BC范式的关系模式中,非码的属性组无法起到决定作用!
若R∈BCNF ,则其一定属于3NF;相反,若R∈3NF ,则其不一定属于BCNF 。如果R∈3NF,且R只有一个由单属性构成的候选码,则R ∈BCNF。
小结
规范化理论是数据库逻辑设计的工具。它的目的在于尽量消除插入、删除异常,修改复杂,数据冗余等问题。基本思想是通过模式分解逐步消除现有关系模式中,数据依赖中不合适的部分。
规范化的步骤可以总结如下: