【数据库原理】关系数据库理论(五)

范式Normal Forms.

分解以后关系模式的评判标准就是模式的范式,范式的概念最早由E.F.Codd提出,他相继提出了关系的三级规范形式:

  • 第一范式1NF
  • 第二范式2NF
  • 第三范式3NF

1974年Codd和Boyce共同提出了一个新的范式:Boyce-Codd范式,简称为BCNF,1976年Fagin提出了第四范式4NF,后来又有人定义了第五范式5NF,至此,关系数据库规范中建立了一系列范式,相互之间的包含关系如下所示:
在这里插入图片描述
在这里插入图片描述

1NF.

第一范式1NF是最基本的规范形式,即关系中每个属性都是不可再分的原子项。如果关系模式R的所有属性均为原子属性,即每个属性都是不可再分的,则称R属于第一范式,记作 R ∈ 1 N F R∈1NF R1NF.
我们将满足第一范式的关系称为规范化关系,在关系数据库中只讨论规范化的关系,凡是非规范的关系模式都必须转化为规范化关系,因此1NF是一个关系模式具备的最起码的条件。在非规范化关系中拆解组合项就能够转化成规范化的关系。
然而一个关系仅仅属于第一范式是不够的,例如下面这个很经典的关系模式SCD:
在这里插入图片描述
它也属于第一范式,但却有很多不如意之处,当中的属性之间,即存在部分函数依赖,又存在传递函数依赖。正是由于这些复杂、不直接的函数依赖,导致这一关系模式的操作面临很多的问题,克服这一笔端的方法是用投影运算将关系分解,去掉复杂的函数依赖,使其向着高一级的范式转化。

2NF.

在这里插入图片描述
在上面给出的关系模式SCD中,SNo+CNo为主码,所以SNo、CNo是主属性,Age、Dept、SN和MN是非主属性。根据2NF的判定条件,我们发现SCD存在类似SNo→Age这样的非主属性对于主码的部分函数依赖,所以SCD不属于2NF. 通过分析,我们可以得到下面两个结论:

  • 从1NF关系中消除非主属性对于主码的部分函数依赖,就得到2NF;
  • 若关系模式R的主码是单属性,或其主码是全码,则R∈2NF.

★2NF规范化算法.

在这里插入图片描述
【例】将SCD(SNo,SN,Age,Dept,MN,CNo,Score)规范为2NF.

  • 按照算法,SCD中存在非主属性对主码的部分函数依赖:(SNo,CNo)→SN|Age|Dept|MN,且其中SNo能够完全决定右边的属性,所以将SCD分解出SD(SNo,SN,Age,Dept,MN)和SC(SNo,CNo,Score),再次检查得到SD∈2NF,SC∈2NF,分解完毕。

但2NF并不是我们最终的目标,它还不理想,还有着下面这些不足之处:
在这里插入图片描述
在这里插入图片描述

3NF.

【定义】如果一个关系模式R∈2NF,并且每个非主属性都不传递函数依赖于R的主码,那么我们称R∈3NF.
例如前面分解得到的SC和SD两个关系模式,对于SC而言,其主码为(SNo,CNo),非主属性为Score,函数依赖为(SNo,CNo)→Score,所以其中没有非主属性对于主码的传递函数依赖,所以SC∈3NF;而对于SD而言,其中主码为SNo,但函数依赖中存在SNo→Dept,Dept→MN,所以就有了系主任名MN对于主码SNo的传递函数依赖,所以SD不属于3NF,需要对其进一步分解。

★3NF规范化算法.

在这里插入图片描述
在这里插入图片描述

★★3NF规范化算法Pro.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SCD关系规范到3NF以后,其中存在的异常现象已经全部消失。但是3NF只限制了非主属性对于主码的依赖关系,而没有限制主属性对于主码的依赖关系。如果其中存在这种依赖,仍有可能存在数据冗余、插入异常、修改异常和删除异常,这时候就需要对3NF进一步规范化,消除主属性对于主码的依赖关系。这就是Codd和Boyce共同提出的新范式:BCNF.

BCNF.

在这里插入图片描述
在这里插入图片描述

BCNF规范化算法.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关系模式的规范化过程.

一个关系只要其分量都是不可再分的原子项,就可以称其为规范化关系,但这只是最基本的规范化要求,即1NF. 规范化的目的就是使数据结构合理,消除存储异常,使数据冗余尽可能地少,便于插入、删除和修改。规范化的基本原则是"一事一地",即一个关系只描述一个实体或实体间的联系,若多于一个实体,就把它分离出来,因此所谓的规范化,实际上是单一化——一个关系表示一个实体。

  • 对1NF关系进行投影,消除其中非主属性对于主码的部分函数依赖,得到2NF;
  • 对2NF关系进行投影,消除其中非主属性对于主码的传递函数依赖,得到3NF;
  • 对3NF关系进行投影,消除其中主属性对于主码的部分函数依赖、传递函数依赖,使得函数依赖的左部都是关系的一个候选码,得到BCNF.

如果一个分解具有无损连接性,则它可以保证不会丢失数据;如果一个分解具有函数依赖性,则可以减轻或解决各种异常情况。前面也已经说过,无损连接性和函数依赖保持性是两个相互独立的标准,具有前者的不一定具有后者,反之亦然。规范化理论提供了一套完整的程式化模式分解算法,按照这套算法可以做到:如果要求分解ρ既保持函数依赖又是无损连接的,则一定可以达到3NF,但不一定能够达到BCNF。

猜你喜欢

转载自blog.csdn.net/weixin_44246009/article/details/108108937