第六章 关系模式规范化理论.docx
《第六章 关系模式规范化理论.docx》由会员分享,可在线阅读,更多相关《第六章 关系模式规范化理论.docx(18页珍藏版)》请在冰豆网上搜索。
![第六章 关系模式规范化理论.docx](https://file1.bdocx.com/fileroot1/2022-12/13/3f6644aa-3188-43e2-b0b7-01e43fde3667/3f6644aa-3188-43e2-b0b7-01e43fde36671.gif)
第六章关系模式规范化理论
第6章关系模式的规范化理论
关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合。
规范化设计理论对关系数据库结构的设计起着重要的作用。
关系模型有严格的数学理论基础,因此人们就以关系模型为作为讨论对象,形成了数据库逻辑设计的一个有力工具――关系数据库的规范化理论。
本章内容
(1)关系模式的冗余和异常问题。
(2)FD的定义、逻辑蕴涵、闭包、推理规则、与关键码的联系;平凡的FD;属性集的闭包;推理规则的正确性和完备性;FD集的等价;最小依赖集。
(3)无损分解的定义、性质、测试;保持依赖集的分解。
(4)关系模式的范式:
1NF,2NF,3NF,BCNF。
分解成2NF、3NF模式集的算法。
(5)MVD、4NF、5NF的定义。
一,关系模式设计中的问题
1.什么是好的数据库
构建好的,合适的数据库模式,是数据库设计的基本问题
a)体现客观世界的信息
b)无过度的冗余
c)无插入异常
d)无删除异常
e)无更新复杂
如书上的S_C_G关系。
假设需要设计一个学生学习情况数据库StuDB。
下面我们以模式S_C_G(Sno,Sname,Dname,Age,Cno,Cname,Score,Pre_cno)为例来说明该模式存在的问题。
下表是其一个实例。
3冗余度大:
每选一门课,他本人信息和有关课程信息都要重复一次。
4插入异常:
插入一门课,若没学生选修,则不能把该课程插入表中。
5删除异常:
如S11号学生的删除,有一门只有他选,会造成课程的丢失。
6更新复杂:
更新一个人的信息,则要同时更新很多条记录。
还有更新选修课时也存在这样的情况。
2.异常的原因:
数据信赖的约束
3.解决方法:
数据库设计的规范化:
分解,每个相对的独立,依赖关系比较单纯,如分解为3NF
我们采用分解的方法,将上述S_C_G分解成以下三个模式:
S(Sno,Sname,age,Dname)
C(Cno,Cname,Pre_cno)
S_C(Sno,Cno,Score)
4.规范化设计理论包括三个内容:
i>数据信赖----核心,研究数据之间的联系
ii>范式----关系模式的标准
iii>模式设计方法----自动化设计的基础
二,函数依赖(FunctionalDependency,FD)
1.函数依赖的定义:
(还有非函数的依赖?
,什么是函数?
给出一个值能唯一确定另外一个值?
映射:
一对一,多对一,一对多?
)
定义:
函数依赖是指一个或一组属性可以(唯一)决定其它属性的值。
数学的语言:
设有关系模式R(U),其中U={A1,A2,…,An}是关系的属性全集,X、Y是U的属性子集,设t和u是关系R上的任意两个元组,如果t和u在X的投影t[X]=u[X]推出t[Y]=u[Y],即:
t[X]=u[X]=>t[Y]=u[Y],
则称X函数决定Y,或Y函数依赖于X。
记为X→Y。
在上述的关系模式S(Sno,Sname,age,Dname)中,存在以下函数依赖:
Sno→age
Sno→Dname
...
(Sno,Cno)→Score
...
2.几种类型的函数依赖
定义6.2(非平凡函数依赖、平凡函数依赖):
一个函数依赖X→Y如果满足Y⊈X,则称此函数依赖为非平凡函数依赖,否则称之为平凡函数依赖。
例如X→Φ,X→X,XZ→X等都是平凡函数依赖。
定义6.3(完全函数依赖、部分函数依赖):
设X、Y是关系R的不同属性集,若X→Y(Y函数依赖于X),且不存在X’⊂X,使X’→Y,则称Y完全函数依赖于X,记为
;(即不存在真子集仍然是函数依赖关系的函数依赖是完全函数依赖)。
否则则称Y部分函数依赖于X,记为
。
例如,在上例关系S中,
是完全函数依赖;
、
是部分函数依赖。
在属性Y与X之间,除了完全函数依赖和部分函数依赖关系等直接函数依赖,还存在间接函数依赖关系。
如果在关系S中增加系的电话号码Dtel,从而有Sno→Dname,Dname→Dtel,于是Sno→Dtel。
在这个函数依赖中,Dtel并不直接依赖于Sno,是通过中间属性Dname间接依赖于Sno。
这就是传递函数依赖。
定义6.4(传递函数依赖):
设X、Y、Z是关系模式R(U)中的不同的属性集,如果X→Y,Y→X,Y→Z,则称Z传递依赖于X。
否则,称为非传递函数依赖。
举例说明:
定义6.5关键字(Key,候选键):
在关系模式R(U)中,若K⊆U,且满足
,则称K为R的关键字。
一个包含了关键字的属性集合也能够函数决定(但不是完全函数决定,而是部分决定)属性全集,我们把这种包含了关键字的属性集合称为超关键字(SuperKey)。
例如,在上例的S(Sno,Sname,Dname,Age)、C(Cno,Cname,Pre_cno)、S_C(Sno,Cno,Score)三个关系模式中,存在以下关键字:
所以,Sno、Cno和(Sno,Cno)分别是关系模式S、C和S_C的关键字。
所以,(Sno,Sname)和(Sno,Dname)都不是关键字,而是超关键字。
3函数依赖的公理系统
(1)函数依赖的逻辑蕴涵
例如在上述的传递函数依赖中,由X→Y,Y→Z,推导出X→Z,这可以表示为:
{X→Y,Y→Z}⊨X→Z其中:
⊨表示逻辑蕴涵。
一般地,函数依赖的逻辑蕴涵定义如下:
定义6.6(逻辑蕴涵):
设F是由关系模式R(U)满足的一个函数依赖集,X→Y是R的一个函数依赖,且不包含在F,如果满足F中所有函数依赖的任一具体关系r,也满足X→Y,则称函数依赖集F逻辑地蕴涵函数依赖X→Y,或称X→Y可从F推出。
可表示为:
F⊨X→Y
例:
Sno→Dname,Dname→Dtel,则:
Sno→Dtel
FX→Y
函数依赖集F的闭包F+
定义6.7:
函数依赖集F所逻辑蕴涵的函数依赖的全体称为为F的闭包(Closure),记为F+,即F+={X→Y|F⊨X→Y}
例如,有关系R(X,Y,Z),它的函数依赖集F={X→Y,Y→Z},则其闭包F+为:
(2)Armstrong公理系统
1)独立推理规则
即下面给出的Armstrong公理的三条推理规则是彼此独立的。
A1:
自反律(Reflexivity)
如果Y⊆X,则X→Y成立,这是一个平凡函数依赖。
根据A1可以推出X→Ф、U→X等平凡函数依赖(因为Ф⊆X⊆U)、XY→X。
A2:
增广律(Augmentation)
如果X→Y,且Z⊆W,则XW→YZ成立。
根据A2可以推出XW→Y、XZ→YZ或XW→YW、X→XY、XY→X等。
A3:
传递律(Transitivity)
如果X→Y且Y→Z,则X→Z成立
其他推理规则
推论1:
合并规则(TheUnionRule)
{X→Y,X→Z}⊨X→YZ
推论2:
分解规则(TheDecompositionRule)
如果X→Y,Z⊆Y,则X→Z成立;(X→YZ),X→Y,X→Z
推论3:
伪传递规则(ThePseudoTransitivityRule)
{X→Y,WY→Z}⊨XW→Z
证:
(1)X→Y⊨X→XY (A2增广律)
X→Z⊨ XY→YZ (A2增广律)
由上可得X→YZ (A3传递律)
(2)Z⊆Y⊨Y→Z (A1自反律)
X→Y (给定条件)
由上可得X→Z (A3传递律)
(3)X→Y⊨WX→WY (A2增广律)
WY→Z (给定条件)
由上可得XW→Z (A3传递律)
例6.2:
设有关系模式R(A,B,C,D,E)及其上的函数依赖集F={AB→CD,A→B,D→E},求证F必蕴涵A→E。
证明:
∵A→B(给定条件)
∴A→AB(A2增广律)
∵AB→CD(给定条件)
∴A→CD(A3传递律)
∴A→C,A→D(分解规则)
∵D→E(给定条件)
∴A→E(A3传递律)
证毕。
一个重要定理
定理6.1:
若Ai(i=1,2,…,n)是关系模式R的属性,
则X→(A1,A2,…,An)成立的充分必要条件是X→Ai均成立
证明由分解和合并规则容易得到。
推论6.1X是候选键的充分必要条件是X→每个属性Ai。
例:
1.现有如下关系模式:
R(A#,B#,C,D,E),R上存在的FD有A#B#→E,B#→C,C→D,求R的一个候选键。
解:
A#B#→E,得A#B#→A#B#E
又B#→C,得A#B#→A#B#CE
又C→D,得A#B#→A#B#CDE
因此A#B#是候选键。
也可以这样做:
先由B#→C出发,得B#→B#CD,还少一个A#,再加一个A#即可,得
A#B#→A#B#CDE
2.设有关系模式R(A,B,C,D),F是R上成立的FD集,F={D→A,D→B},试写出关系模式R的候选键,并说明理由。
方法一
因为:
D→A,D→B(已知)得D→AB
D→D,得D→ABD,但D!
→C
而CD→C(A1自反律),
我们有,CD→ABCD,即CD→U
因此,CD为候选键。
也可以这样做:
方法二
D→A,D→B(已知)
D→D,但D!
→C
而CD→C(A1自反律),
我们有,CD→A,CD→B,CD→C,CD→D,由合并规则知:
CD→ABCD
因此,CD为候选键。
3.关系模式R(A,B,C,D)的函数依赖集为F={AC→B},求R的候选键
解:
因为AC→B
所以AC→ACB
所以ACD→ABCD
所以R的候选码是ACD
4.有关系模式R(A,B,C,D,E,F)其函数依赖集为F={E→D,C→B,CE→F,B→A},判断CE为候选键。
解
CE→D(A2增广律)
CE→B
CE→C(A1自反律)
CE→E
CE→F(给定条件)
CE→C,C→B,则CE→B,又B→A,所以有:
CE→A
由合并规则,即CE→U,为候选键
按方法一
由E→D知:
E→DE
由C→B知:
C→BC,又B→A,知:
C→ABC
由合并规则知:
CE→ABCDE,为候选键
5.设关系R={A,B,C,D,E,F},其函数依赖集F={A→B,C→D,D→E,E→F,F→C},求R的所有候选键。
解:
C→D,C→E,C→E,C→C,C!
→A,把A加上,则有
AC→A,AC→B,…AC→U
因此AC为候选键。
又因为:
D→E,D→F,D→C,D→D,同理:
AD为候选键。
同理可得:
AE,AF也为候选键。
综上所述,R的候选码为:
AC,AD,AE,AF。
关系模式R(A,B,C,D)的函数依赖集为F={AC→B},则R的候选键为()。
6.关系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X,X→Z,Y→W}。
关系模式R的候选建是什么?
解法:
从函数依赖集出发,把所有属性分为4类
1、L类:
全部出现在函数依赖的左半部
2、R:
全部出现在函数依赖的右半部
3、LR:
出现在函数依赖的左右两边
4、N:
不出现在函数依赖中
可能成为候选键的有L类,LR类和N类
对于L类,求出它的闭包,若包含所有属性,则说明其为候选键,且为唯一候选键。
对于LR类,求出其闭包,若包含所有属性,则为候选键,若不包含,在找出其中一个属性结合。
对于N类,直接加至候选键即可。
L:
无
R:
Z
LR:
W,X,Y
N:
无
先排除Z
在LR中,W的闭包为{W,Y,Z,X}
X的闭包为{X,Z}
Y闭包为{Y,W}
WX的闭包为{W,X,Y,Z}
WY的闭包为{W,Y}
XY的闭包为{X,Y,Z,W}
WXY的闭包为{X,Z,Y,W}
由此可见,可能的键为{W,WZ,XY,XYW},去掉多余的属性,得:
W,XY为候选键。
F+很大,一般不去求它。
在我们求候选键时,主要用到的是属性集的闭包。
属性集闭包
定义6.8(属性集闭包):
设有关系模式R(U),U={A1,A2,…,An},X是U的子集,F是U上的一个函数依赖集,则属性集X关于函数依赖集F的闭包定义为:
={Ai|Ai∈U,且X→Ai可用阿氏公理从F推出}
即:
属性(集)闭包是那些由X用阿氏公理从F推出的属性组成的集合。
例:
设关系模式R(A,B,C)的函数依赖集为F={A→B,B→C},分别求A、B、C的闭包。
解:
若X=A,
∵A→B,B→C (给定条件)
∴A→C(A2传递律)
∵A→A(A1自反律)
∴={A,B,C}(据定义)
若X=B
∵B→B(A1自反律)
B→C(给定条件)
∴={B,C}(据定义)
若X=C,
C→C(自反律)
∴={C}(据定义)
定理6.2:
设F是关系模式R(U)上的函数依赖集,U是属性全集,X,Y⊆U,则函数依赖X→Y是用阿氏公理从F推出的,充分必要条件是Y⊆;
反之,能用阿氏公理从F推出的所有X→Y的Y都在中。
证明:
略
这个定理告诉我们,只要Y⊆,则必有X→Y。
于是,一个函数依赖X→Y能否用阿氏公理从F推出的问题,就变成判断Y是否为子集的问题。
属性集的闭包计算
算法6.1:
求属性集X(X⊆U)关于U上的函数依赖集F的闭包 。
输入:
属性全集U,U上的函数依赖集F,以及属性集X⊆U。
输出:
X关于F的闭包。
方法:
根据下列步骤计算一系列属性集合X(0),X
(1),…
(1)令X(0)=X,i=0;
(2)求属性集
/*在F中寻找满足条件V⊆X(i)的所有函数依赖V→W,并记属性W的并集为B*/
(3)X(i+1)=X(i)∪B
(4)判断X(i+1)=X(i)吗?
(4)若X(i+1)≠X(i),则用i+1取代i,返回
(2);
(5)若X(i+1)=X(i),则=X(i),结束。
定理6.3Armstrong公理是正确的,完备的。
完备性:
F所蕴涵的每个函数依赖都可由Armstrong公理从F可推出。
3函数依赖集的等价和覆盖
定义6.9(函数依赖集的等价、覆盖):
设F和G是关系R(U)上的两个依赖集,若F+=G+,则称F与G等价,记为F=G。
也可以称F覆盖G,或G覆盖F;也可说F与G相互覆盖。
检查两个函数依赖集F和G是否等价的方法是:
第一步:
检查F中的每个函数依赖是否属于G+,若全部满足,则F⊆G+。
如若有X→Y∈F,则计算,如果Y⊆,则X→Y∈G+;
第二步:
同第一步,检查是否G⊆F+;
第三步:
如果F⊆G+,且G⊆F+,则F与G等价。
由此可见,F和G等价的充分必要条件是:
F⊆G+,且G⊆F+。
引理6.1:
设G是一个函数依赖集,且其中所有依赖的右部都只有一个属性,则G覆盖任一左部与G(左部)相同的函数依赖集。
证明:
构造G={X→A|X→Y∈F且A∈Y}
由A∈Y,X→Y∈F根据分解规则导出,从而等到G⊆F+。
反之,如果Y=A1A2…An,而且X→A1,X→A2,…X→An在G中可根据合并律等到F⊆G+。
由此可见,F与G等价,即F被G覆盖。
一个函数依赖集F可能有若干个与其等价的函数依赖集,我们可以从中选择一个较好以便应用的函数依赖集。
标准至少是:
所有函数依赖均独立,即该函数依赖集中不存在这样的函数依赖,它可由这个集合中的别的函数依赖推导出来。
表示最简单,即每个函数依赖的右部为单个属性,左部最简单。
定义6.10(最小函数依赖集):
函数依赖集F如果满足下列条件,则称F为最小函数覆盖,记为Fmin:
(1)F中每一个函数依赖的右部都是单个属性。
(2)对F中任一函数依赖X→A,F-{X→A}都不与F等价。
(3)对于F中的任一函数依赖X→A,{F-{X→A}}∪{Z→A}都不与F等价,其中Z为X的任一子集。
求函数依赖集F的最小覆盖的方法是:
(1)检查F中的每个函数依赖X→A,若A=A1,A2,…,Ak,则根据分解规则,用X→Ai(i=1,2,…,k)取代X→A。
(2)检查F中的每个函数依赖X→A,令G=F-{X→A},
若有A∈,则从F中去掉此函数依赖。
(3)检查F中各函数依赖X→A,设X=B1,B2,…,Bm,检查Bi,
当A∈时,即以X-Bi替换X。
例6.5:
求下列函数依赖集的最小覆盖:
F={AH→C,C→A,EH→C,CH→D,D→EG,CG→DH,CE→AG,ACD→H}。
解:
(1)用分解规则将F中的所有依赖的右部变成单个属性,可以得到以下11个函数依赖:
AH→C,C→A,CH→D,ACD→H(给定)
C→E,C→G (由C→EG分解得到)
EH→C (给定)
CG→H,CG→D (由CG→DH分解得到)
CE→A,CE→G (由CE→AG分解得到)
(2)根据阿氏公理去掉F中的冗余依赖
由于从C→A可推出CE→A,从C→A、CG→D、ACD→H推出CG→H,因此CE→A和CG→H是冗余,可从F删除。
(3)用所含属性较少的依赖代替所含属性较多的依赖。
由于C→A,ACD→H中A是冗余属性,因此,可用CD→H代替ACD→H,故删除ACD→H。
最后得到F的最小覆盖为:
F={AH→C,C→A,CH→D,CD→H,C→E,C→G,EH→C,CG→D,CE→G}
6.5关系模式的规范化
一.什么是范式(NormalForms)
构造数据库必须遵循一定的规则,满足特定规则的模式称为范式。
R(U|F)
1.一个关系满足某个范式所规定的一系列条件时,它就属于该范式。
2.可以用规范化要求来设计数据库。
3.也可验证设计结果的合理性,用其来指导优化数据库设计过程。
4.关系规范化条件可分为几级,每级称为一个范式,记为第xNF(NormalForms)
1NF2NF3NFBCNF,4NF5NF
级别越高,条件越严格
5NF(4NF(BCNF(3NF(2NF(1NF.
5.范式是衡量模式优劣的标准,范式表达了模式中数据依赖之间应满足的联系。
如果关系模式R是3NF,那么R上成立的非平凡FD都应该左边是超键或右边是非主属性。
如果关系模式R是BCNF,那么R上成立的非平凡的FD都应该左边是超键。
范式的级别越高,其数据冗余和操作异常现象就越少
二,第1范式(1NF)
1.如果一个关系模式R的每个属性的域都只包含单纯值,而不是一些值的集合或元组,则称关系是第1范式,记为R∈1NF.
或:
如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式
(理解:
每个元组的每个属性只含有一个单纯值,即要求属性是原子的。
)
这是关系模式的基本要求,条件是最松的,只要你不硬把两个属性塞到一个字段中去。
如果不满足1NF,就不是关系数据库。
字段1
字段2
字段3
属性1
属性2
2.把一个非规范化的模式变为1NF有两种方法:
1)把不含单纯值的属性分解为多个属性,使它们仅含有单纯值。
例:
通讯方式:
电话、手机,邮编,地址等。
通讯方式分开:
电话,邮编,通讯地址。
例:
NameFirstName,LastName
2)把关系模式分解,并使每个关系都符合1NF
学生(学生信息)
3.原子属性:
列的:
每个字段不再分割成多个属性。
行的:
每个元组在表可只出现一次。
4.第一范式中一般情况下都会存在着数据的冗余和异常现象,因此关系模式需要进一步的规范化。
三,第2范式(2NF)
它是在1NF的基础上建立起来的。
如果关系模式R∈1NF,且它的任一非主属性都完全函数依赖于任一候选关键字,则称R满足第2范式,记为R∈2NF.
(理解:
不存在非主属性对关键字的部分函数依赖)
例:
学生(sno,cno,score,credit)是否属于2NF?
(sno,cno)-fScore
但(sno,cno)-pcredit
因此,学生∈1NF。
例:
S(sno,sname,age,dname,dtel)
因为每个非主属性对关键字S都是完全函数依赖的,S∈2NF.
由上例,2NF依然可有过多冗余(dtel)。
继续分解,提高条件。
四,第3范式(3NF)
如果R∈2NF,且每一个非主属性不传递依赖于任一候选关键字,则称R∈3NF.
(理解:
任一属性不依赖于其它非主属性)
例:
S(sno,sname,age,dname,dtel)
因为dtel属性对关键字sno是传递函数依赖的,S!
∈3NF.
分解:
S(sno,sname,age,dname)
D(dname,dtel)
注:
一个R∈3NF它个每个非主属性既不部分依赖也不传递依赖于候选关键字。
例:
S_C_G(U)是第几范式?
2NF
五,BCNF(Boyce-Codd)
在第3范式的基础上,设有R,及其函数依赖集F,X和A是R的属性集合,且A!
(X,如果只要R满足XA,X就包含R的一个候选关键字,则称R满足BCNF,记为:
理解:
表可不存在任何字段(主属性和非主属性)对任一候选关键字的完全函数依赖则符合BCNF.
(1)所有非主属性A对键都是完全函数依赖的(R∈2NF)。
(2)没有属性完全函数依赖于非键的任何属性组(R∈3NF)。
(3)所有主属性对不包含它的键是完全函数依赖的(新增加条件)。
例,模式S(NAME,SEX,BIRTH,ADDR,DNAME)的主属性为:
NAME,SEX,BIRTH和ADDR,候选关键字为:
(NAME,SEX)、(NAME,BIRTH)以及(NAME,ADDR)。
定义中的A为(ADDR,DNAME)。
显然有:
例6.13:
关系模式STC(SNO,TNO,CNO),SNO表示学号,TNO表示教师编号,CNO表示课程号。
每一个教师只教一门课,每门课有若干教师,某一个学生选定某门课,就对应一个固定教师。
试判断ST的最高范式。
解 由语义可得到如下的函数依赖:
(SNO,CNO)→TNO,(SNO,TNO)→CNO,TNO→CNO
这里(SNO,CNO),(SNO,TNO)都是侯选关键字。
因为没有任何非主属性对侯选关键字部分依赖,所以STC∈2NF。
没有任何非主属性对侯选关键字传递依赖,所以STC∈3NF。
但在F中有TNO→CNO,而TNO不包含侯选关键字,所以STC不是BCNF关系
这里我们可以将STC(SNO,TNO,CNO)分解成ST(SNO,TNO)和TC(TNO,CNO),它们都是BCNF。
范式之间的关系
例: