一、基本概念
数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。现在人们已经提出了很多种类型的数据依赖,其中最重要的是函数依赖(FD)和多值依赖(MVD)。
规范化理论致力于解决关系模式中不适合的数据依赖问题。而函数依赖和多值依赖是最重要的数据依赖。
函数依赖:设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R(U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称“X函数确定Y”或者“Y函数依赖于X”,记做X→Y。
在关系模式R(U)中,对于U的自己X和Y,如果X→Y,但Y⊈X,则X→Y是非平凡函数依赖。若Y⊆X,则称X→Y成为平凡函数依赖。
若不特别声明,我们总是讨论非平凡函数依赖。
在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X',都有X'↛ Y,则称Y完全函数依赖于X,记做
Y。若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X
Y。
在关系模式R(U)中,如果X→Y,Y→Z,且Y⊈X,Y↛ X,则称Z传递函数依赖于X。
码是表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。注意码可以包含多个属性。
设R(U)是一个属性的一个关系模式,X,Y和Z是U的子集,并且Z=U-X-Y,多值依赖X→→Y成立当且仅当对R的任一关系r,r在(X,Z)上的每个值对应的一组Y的值,这组值仅仅决定于X值而与Z值无关。
二、范式(规范化 normalization)
关系数据库中的关系必须满足一定的规范化要求,对于不同的规范化程度可用范式来衡量。
1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF
1)第一范式(1NF)
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。即属性的原子性
第一范式是对关系模式的一个最起码的要求.不满足第一范式的数据库模式不能称为关系数据库.
2)第二范式(2NF)
2NF就是不允许关系模式的属性之间有这样的函数依赖X→Y,其中X是码的真子集,Y是非主属性。(显然,码只包含一个属性的关系模式,如果它属于1NF,那么它一定属于2NF,因为它不可能存在非主属性对码的部分函数依赖。)
即理解为(非主属性完全依赖于码)或者 (消除部分依赖)。
3)第三范式(3NF)
如果关系模式R(U,F)中不存在候选码、属性组Y以及非主属性Z(Z⊈Y),使得X→Y,Y→Z和Y↛ X成立,则R∈3NF。
即满足第二范式的条件下不存在传递函数依赖。
4)BC范式(BCNF)
设关系模式R(U,F)∈ 1NF,如果对于R的每个函数依赖X→Y,若Y⊈X,则X必含有候选码,那么R∈BCNF。
换句话说,在关系模式R(U,F)中,如果每一个决定属性集都包含候选码,则R∈BCNF。
由BCNF的定义可以看到,每个BCNF的关系模式都具有如下3个性质:
1、所有非主属性都完全函数依赖于每个候选码。(NF2)
2、所有主属性都完全函数依赖于每个不包含它的候选码。
3、没有任何属性完全函数依赖于非码的任何一组属性。
BCNF实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
4)第四范式(4NF)
关系模式R(U,F)∈1NF,如果对于R的每个非平凡多值依赖X→\→Y(Y⊈X),X都含有候选码,则R∈4NF
三、关系模式的规范化
关系模式规范化时一般应遵循以下原则:
1、关系模式进行无损连接分解。
2、合理选择规范化程度。
3、正确性与可实现性原则。
关系模式规范化的步骤
关系模式的分解
关系模式的规范化过程是通过对关系模式的分解来实现的,但是把低一级的关系模式分解为若干个高一级的关系模式的方法并不是唯一的。在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。
关系模式分解的三个定义:
1)、分解具有“无损连接性”
2)、分解要“保持函数依赖”
3)、分解既要“保持函数依赖”,又要具有“无损连接性”
规范化理论提供了一套完整的模式分解算法,按照这套算法可以做到:
1)若要求分解具有无损连接性,那么模式分解一定能够达到4NF
2)若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
3)若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。
级别 | 特点 | 无损分解 | 保持FD |
1NF | 属性值是原子值 | 无 | 无 |
2NF | 消除了非主属性对码的部分函数依赖 | 可达到 | 可达到 |
3NF | 消除了非主属性对码的部分函数传递 | 可达到 | 可达到 |
BCNF | 消除了主属性对码的部分和传递函数依赖 | 可达到 | 不一定 |
4NF | 消除了非平凡函数依赖的多值依赖 | 可达到 | 不一定 |
5NF | 消除了不是由候选码所蕴含的连续依赖 | 可达到 | 不一定 |