证明:
根据合并规则和分解规则,可得引理6.1
引理6.lX→A1A2…Ak成立的充分必要条件是X→Ai成立
4.函数依赖闭包
定义6.12在关系模式R中为F所逻辑蕴含的函数依赖的全体叫作F的闭包,记为F+。
F+={X→Y|F|=X→Y}
例:
已知关系模式R(XYZ>,F={X→Y,Y→Z},求F+。
这里对函数依赖的定义做一下扩充。
用φ表示空属性集,并定义φ→φφ函数依赖于任何属性和属性集合。
则φ→φ,X→φ,Y→φ
XXXYYZXZ
计可得到43个函数依赖。
F={XY,YZ},F+计算是NP完全问题,XA1A2...An
F+={X->φ,Y->φ,Z->φ,XY->φ,XZ->φ,YZ->φ,XYZ->φ,
X->X,Y->Y,Z->Z,XY->X,XZ->X,YZ->Y,XYZ->X,
X->Y,Y->Z,XY->Y,XZ->Y,YZ->Z,XYZ->Y,
X->Z,Y->YZ,XY->Z,XZ->Z,YZ->YZ,XYZ->Z,
X->XY,XY->XY,XZ->XY,XYZ->XY,
X->XZ,XY->YZ,XZ->XZ,XYZ->YZ
X->YZ,XY->XZ,XZ->XY,XYZ->XZ,
X->ZYZ,XY->XYZ,XZ->XYZ,XYZ->XYZ}
自反律、增广律和传递律称为Armstrong公理系统。
Armstrong公理系统是有效的、完备的。
有效性是指:
由F出发根据Armstrong公理系统推导出来的每一个函数依赖一定在F+中。
完备性是指:
在F+中每一个函数依赖,必定可以由F出发根据Armstrong公理系统推导出来。
6.属性集的闭包
定义6.13设F为属性集U上的一组函数依赖,X
U,XF+={A|X→A能由F根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F的闭包
引理6.2
设F为属性集U上的一组函数依赖,X,YÍU,X→Y能由F根据Armstrong公理导出的充分必要条件是YÍXF+
用途
将判定X→Y是否能由F根据Armstrong公理导出的问题,
就转化为求出XF+,判定Y是否为XF+的子集的问题
6.求属性集闭包的算法
算法6.l求属性集X输入:
X,F
输出:
XF+
步骤:
<1)令X<0)=X,i=0
<2)求B,这里B={A|($V>($W>(V→WÎF∧VÍX};
<3)X
<4)判断X
<5)若相等或X
<6)若否,则i=i+l,返回第<2)步。
对于算法6.l,令ai=|X
[例1]已知关系模式R,其中
U={A,B,C,D,E};
F={AB→C,B→D,C→E,EC→B,AC→B}。
求(AC>F+(C>F+
解设X<0)=AB;
(1>计算X<1):
逐一的扫描F集合中各个函数依赖,
找左部为A,B或AB的函数依赖。
得到两个:
AB→C,B→D。
于是X<1)=AB∪CD=ABCD。
(2>因为X<0)≠X<1),所以再找出左部为ABCD子集的那些函数依赖,又得到AB→C,B→D,C→E,AC→B,
于是X<2)=X<1)∪BCDE=ABCDE。
(3>因为X<2)=U,算法终止
所以U={A,B,C,D}。
F={AB,BCD}。
nA+=AB.
nC+=C.
n(AC>+=ABCD.
7.候选码的求解理论和算法
候选码求解理论
给定一个关系模式R,U={A1,A2,…An},F只R的函数依赖集,则属性可以分为如下四类:
L类:
仅出现在函数依赖集F左部的属性;
R类:
仅出现在函数依赖集F右部的属性;
LR类:
在函数依赖集F左右都出现的属性;
N类:
在函数依赖集F左右都不出现的属性;
根据候选码的特性,可以得出如下结论:
给定一个关系模式R,设X⊆U。
(1>若X是L类属性,则X必为R的任一候选码的成员。
若XF+=U,则X为R的唯一候选码。
(2>若X是R类属性,则X不是R的任一候选码的成员。
(3>若X是N类属性,则X必包含在R的任一候选码中。
(4>若X是LR类属性,则X可能是也可能不是R的任一候选码的成员。
输入:
关系模式R及其函数依赖集F。
输出:
R的所有候选码。
步骤:
(1>将R的所有属性分为L、R、N、LR四类,令X代表L、N两类,Y代表LR类。
(2>求XF+。
若XF+包含R的全部属性,则X即为R的唯一候选码,转(5>;否则,转(3>。
(3>在Y中任取一属性A,求(AX>F+。
若它包含了R的全部属性,则转(4>;否则,调换一属性,反复进行这一过程,直到试完Y中的所有属性。
(4>如果已找出所有候选码,则转(5>;否则,在Y中依次取两个、3个、…,求它们的属性闭包,直到其闭包包含R的全部属性。
(5>停止,输出结果。
6.3函数依赖的等价和最小函数依赖集
4.Armstrong公理系统的有效性与完备性
⏹建立公理系统体系目的:
从已知的f推导出未知的f
⏹明确:
1.公理系统推导出来的f正确?
2.F+中的每一个f都能推导出来?
⏹有效性:
由F出发根据Armstrong公理推导出来的每一个函数依赖一定在F+中
/*Armstrong正确
⏹完备性:
F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来
/*Armstrong公理够用,完全
完备性:
所有不能用Armstrong公理推导出来f,都不为真
若f不能用Armstrong公理推导出来,f∈F+
6.函数依赖集等价
定义6.14如果G+=F+,就说函数依赖集F覆盖G例如,R(ABC>F1={A→B,B→C},F2={A→B,B→C,A→C}F1等价F2
函数依赖集等价的充要条件
引理6.3F+=G+的充分必要条件是FÍG+,和GÍF+
证:
必要性显然,只证充分性。
<1)若FÍG+,则XF+ÍXG++。
<2)任取X→YÎF+则有YÍXF+ÍXG++。
所以X→YÎ(G+)+=G+。
即F+ÍG+。
<3)同理可证G+ÍF+,所以F+=G+。
要判定FÍG+,只须逐一对F中的函数依赖X→Y,考察Y是否属于XG++就行了。
因此引理6.3给出了判断两个函数依赖集等价的可行算法。
6.最小依赖集
定义6.15如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。
亦称为最小依赖集或最小覆盖。
(1>F中任一函数依赖的右部仅含有一个属性。
(2>F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3>F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}∪{Z→A}与F等价。
[例2]对于6.l节中的关系模式S,其中:
U={SNO,SDEPT,MN,CNAME,G},
F={SNO→SDEPT,SDEPT→MN,
设F’={SNO→SDEPT,SNO→MN,
SDEPT→MN,(SNO,CNAME>→G,
(SNO,SDEPT>→SDEPT}
F是最小覆盖,而F’不是。
因为:
F’-{SNO→MN}与F’等价
F’-{(SNO,SDEPT>→SDEPT}也与F’等价
F’-{(SNO,SDEPT>→SDEPT}∪{SNO→SDEPT}也与F’等价
定理6.3每一个函数依赖集F均等价于一个极小函数依赖集Fm。
此Fm称为F的最小依赖集。
证:
构造性证明,依据定义分三步对F进行“极小化处理”,找出F的一个最小依赖集。
(1>逐一检查F中各函数依赖FDi:
X→Y,
若Y=A1A2…Ak,k>2,
则用{X→Aj|j=1,2,…,k}来取代X→Y。
引理6.1保证了F变换前后的等价性。
(2>逐一检查F中各函数依赖FDi:
X→A,
令G=F-{X→A},
若AÎXG+,则从F中去掉此函数依赖。
由于F与G=F-{X→A}等价的充要条件是AÎXG+
因此F变换前后是等价的。
(3>逐一取出F中各函数依赖FDi:
X→A,设X=B1B2…Bm,
逐一考查Bi
则以X-Bi取代X。
由于F与F-{X→A}∪{Z→A}等价的充要条件是AÎZF+,其中Z=X-Bi
因此F变换前后是等价的。
由定义,最后剩下的F就一定是极小依赖集。
因为对F的每一次“改造”都保证了改造前后的两个函数依赖集等价,因此剩下的F与原来的F等价。
证毕
定理6.3的证明过程也是求F极小依赖集的过程
[例3]F={A→B,B→A,B→C,A→C,C→A}
Fm1、Fm2都是F的最小依赖集:
Fm1={A→B,B→C,C→A}
Fm2={A→B,B→A,A→C,C→A}
F的最小依赖集Fm不一定是唯一的
它与对各函数依赖FDi及X→A中X各属性的处置顺序有关
极小化过程(定理6.3的证明>也是检验F是否为极小依赖集的一个算法
若改造后的F与原来的F相同,说明F本身就是一个最小依赖集
在R中可以用与F等价的依赖集G来取代F
原因:
两个关系模式R1,R2,如果F与G等价,那么R1的关系一定是R2的关系。
反过来,R2的关系也一定是R1的关系。
求F={A→BC,B→C,A→B,AB→C}的最小依赖集。
Fm={A→B,B→C}
6.4模式的分解
定义6.16关系模式R的一个分解:
ρ={R1,R2,…,Rn}
U=U1∪U2∪…∪Un,且不存在UiÍUj,Fi为F在Ui上的投影
定义6.17函数依赖集合{X→Y|X→YÎF+∧XYÍUi}的一个覆盖Fi叫作F在属性Ui上的投影
6.4.1模式的分解的3个定义
把低一级的关系模式分解为若干个高一级的关系模式的方法并不是唯一的
只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义
三种模式分解的等价定义
⒈分解具有无损连接性
⒉分解要保持函数依赖
⒊分解既要保持函数依赖,又要具有无损连接性
例:
SLF={Sno→Sdept,Sdept→Sloc,Sno→Sloc}
SL∈2NF
存在插入异常、删除异常、冗余度大和修改复杂等问题
分解方法可以有多种,分解后的数据库丢失了许多信息,例如无法查询95001学生所在系或所在宿舍。
如果分解后的关系可以通过自然连接恢复为原来的关系,那么这种分解就没有丢失信息
2.SL分解为下面二个关系模式:
NL(Sno,Sloc>
DL(Sdept,Sloc>
分解后的关系为:
3.将SL分解为下面二个关系模式:
ND(Sno,Sdept>
NL(Sno,Sloc>
分解后的关系为:
与SL关系一样,因此没有丢失信息
第一种分解方法既不具有无损连接性,也未保持函数依赖,它不是原关系模式的一个等价分解
第二种分解方法保持了函数依赖,但不具有无损连接性
第三种分解方法具有无损连接性,但未持函数依赖
第四种分解方法既具有无损连接性,又保持了函数依赖
6.4.2分解的无损连接性和保持函数依赖性
定义6.18关系模式R的一个分解ρ={R1,R2,…,Rn}
若R与R1、R2、…、Rn自然连接的结果相等,则称关系模式R的这个分解ρ具有无损连接性具有无损连接性的分解保证不丢失信息
无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题
如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。
分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。
具有无损连接性的分解不一定能够保持函数依赖。
同样,保持函数依赖的分解也不一定具有无损连接性。
算法6.2判别一个分解的无损连接性。
设关系模式RU={A1,A2,…An}F={FD1,FD2,…FDk}F为极小依赖集。
一个分解p={R1,R2,…Rk}
步骤:
(1>构造一个k行n列的表。
每一行对应一个分解中的关系模式,每一列对应一个属性。
如果Aj在Ri中,则在表的第i行,第j列处填上aj;否则填上符号bij。
(2>对每一个FDi做下列操作:
找到Xi所对应的列中具有相同符号的那些行。
考察这些行中li列的元素,若其中有ali,则全部改为ali;否则全部改为bmli;m是这些行的行号最小值。
注意:
若某个btli被改动,那么li列的所有btli的符号都要做相应的更改。
(3>比较扫描前后,表中元素有无变化。
如有变化。
则返回第(2>步,否则,算法终止。
保持函数依赖的分解
设关系模式R被分解为若干个关系模式R1,R2,…,Rn
<其中U=U1∪U2∪…∪Un,且不存在UiÍUj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的保持函数依赖的分解
定义6.19设关系模式R被分解为若干个关系模式R1,R2,…,Rn
<其中U=U1∪U2∪…∪Un,且不存在UiÍUj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的6.4.3模式分解的算法
若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。
算法6.3<合成法)转换为3NF的保持函数依赖的分解。
(1>对R中的函数依赖集F进行”极小化处理”,处理后的依赖集仍记为F。
(2>找出不在F中出现的属性,把这样的属性构成一个关系模式。
把这些属性从U中去掉,剩余的属性仍记为U。
(3>若有X→A∈,且XA=U,则ρ={R},算法终止。
(4>否则,对F按具有相同左部的原则分组(假定分为k组>,每一组函数依赖Fi’所涉及的全部属性形成一个属性集Ui。
若UiÍUj(i=j>就去掉Ui。
于是ρ={R1,…,Rk}构成R的一个保持函数依赖的分解。
算法6.4转换为3NF既有无损连接性又保持函数依赖的分解
(1>设X是R的码。
R已由算法6.3分解为ρ={R1,…,Rk},令τ=ρU{R*}。
(2>若有某个Ui,使XÍUi,将{R*}从τ中去掉。
(3>τ就是所求的分解。
算法6.5转换为BCNF的无损连接分解<分解法)
(1>令ρ={R}
(2>检查ρ中各关系模式是否均属于BCNF。
若是,则算法终止。
(3>否则,设ρ中Ri不属于BCNF,那么Ri必有X→AÍFi+(A不包含在X中>,且X非Ri的码。
因此,XA是Ui的真子集。
对Ri进行分解:
σ={S1,S2},其中Us1=XA,Us2=Ui-{A},以σ代替Ri返回第(2>步。
由于U中的属性有限,因此有限次循环后,算法6.5一定会终止。
这是一个自顶向下的算法。
它自然地形成一棵对R的二叉分解树。
注意R的分解树不一定是唯一的。
这与步骤(3>中选择的X→A有关。
算法6.6达到4NF的具有无损连接性的分解。
P196图5.11
(1>首先使用算法6.5得到R的一个达到了BCNF的无损连接分解ρ。
(2>然后对某一Ri,若不属于4NF,则按定理6.6的作法进行分解。
直到每一个关系模式均属于4NF为止。
归
纳
总
结
本节理论性较强,是本章的难点。
概念特别多,不好理解。
应深刻体会各种概念,学会分解的方法。
思
考
练
习
Armstrong公理系统有什么用?
为什么要对关系模式分解?
作
业
P195-3,5
P196-12
课
后
分
析
下一单元预习内容及要求
第七章数据库设计
了解数据库设计的步骤。
申明:
所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。