380 likes | 607 Views
§3 函数依赖理论及其应用(书 p52:3.5). 一、 函数依赖的逻辑蕴涵. 设: F 是关系模式 R 给定 的 一组函数依赖集合。对于 R 的 满足 F 的 任意关系 r, 若 能够从 F 中推导出 关系 r 也满足函数依赖 X→Y, 则称 F 逻辑蕴涵 X→Y。 记为 F X→Y. 例 设:关系模式 R(A,B,C),F={ A→BC } 则: F A→B. 二 、 函数依赖 Armstrong 公理. 1. 函数依赖 Armstrong 公理. 设:关系模式 R(U,F)。.
E N D
§3 函数依赖理论及其应用(书p52:3.5) 一、 函数依赖的逻辑蕴涵 设:F 是关系模式 R 给定的一组函数依赖集合。对于R的满足F的任意关系r,若能够从F中推导出关系r 也满足函数依赖X→Y,则称F逻辑蕴涵X→Y。记为 F X→Y 例 设:关系模式R(A,B,C),F={ A→BC } 则:F A→B
二、函数依赖Armstrong公理 1.函数依赖Armstrong公理 设:关系模式R(U,F)。 A1. 自反性(Reflexivity): 若Y X U,则 X→Y A2. 增广性(Augmentation): 若 X→Y,且Z U,则 XZ→YZ 注:XZ (或:X, Z)即 X ∪ Z A3. 传递性(Transitivity): 若 X→Y,Y→Z,则 X→Z
2.四条推理规则 (1)合并规则:若X→Y,X→Z,则 X→YZ (2)分解规则:若X→YZ,则 X→Y, X→Z (3)伪增广规则:若X→Y,WZ,有XW→YZ (4)伪传递规则:由X→Y,WY→Z,有WX→Z 例 试证“合并规则”是正确的。 ∴X→XY (增广性) ∵ X→Y, 证: ∴XY→YZ (增广性) ∵X→Z, ∵ X→XY,XY→YZ, ∴X→YZ (传递性) 证毕。
三、函数依赖集的闭包和属性的闭包 1. 函数依赖集F的闭包(Closure) 定义:在关系模式R(U,F)中,F以及它的逻辑蕴涵所构成的函数依赖集合,叫做F的闭包,记为F+。
例 设:R(A,B,C),F={A→B,B→C} 则有: A→φ, B→φ, C→φ, AB→φ, AC→φ,BC→φ, ABC→φ, A→A, AB→A, AC→A, ABC→A, A→B, AB→B,AC→B,ABC→B, A→C, AB→C, AC→C, ABC→C, A→AB, AB→AB, AC→AB, ABC→AB, F+ = A→AC, AB→AC, AC→AC, ABC→AC, A→BC, AB→BC, AC→BC, ABC→BC, A→ABC,AB→ABC,AC→ABC,ABC→ABC, B→B, BC→B, B→C,BC→C,B→BC, BC→BC, C→C
2. 属性集X关于函数依赖集F的闭包X+F (1)定义 设:F为属性集U上给定的一组函数依赖, X,AU。 则, X+F称为属性集X关于函数依赖集F的闭包, 其中,X+F = { A | X→A是所有由F给定和推导出的函数依赖集合 }。 例 设:R(A,B,C),F={A→B,B→C}。 则 A+F ={ ABC }
初始: AF+ = {A} (因为:A A总是成立) AF+ = {AB} (因为F中有:A B) AF+ = {ABC} (因为F中有:BC) (2)计算X+F的算法 例 设:R(A,B,C),F={ A→B,B→C }。 求 AF+ = ?
3.判定一个函数依赖是否属于F+? 设:R(U,F),属性组X,YU。 问:函数依赖X→Y是否被F逻辑蕴涵? 即,判定:X→Y F+? 解决方案: 1) 计算: XF+。 2) 判定:Y XF+ ? 例 设:F = { AB, BC}问:ABC F+? 解:∵ (AB)+ F = { ABC } ,显然有:C (AB)+ F ∴ ABC F+
四、函数依赖的等价与复盖 1. 函数依赖集的等价 如果F+ = G+ ,就说函数依赖集F复盖G,或F与G 等价,记为F=G。 定理:F=G的充分必要条件是 F G+,且G F+ 例 设:F = { AB, BC,ABC }, G = { AB, BC} 问:F = G? 解:∵ (AB)+ G = { ABC } , 显然有:C (AB)+ G ∴ ABC G+, 故:F G+ 而显然有 G F+成立,∴ F=G成立。
2. 极小函数依赖集 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集(也称最小依赖集,最小复盖),记为Fm : (1) F中每个函数依赖的右部仅含一个属性。 (2) F中每个函数依赖的“左”部都没有“多余”的属性。即:不存在函数依赖XA,以及 Z X ,使得 F 与 (F–XA)∪ZA 等价。 (3) F中没有“多余”函数依赖。即:不存在这样的函数依赖XA,使得F与 F ―XA等价。
3. 计算Fm的算法: (1)应用分解规则,使F中每一个函数依赖的右部属性单一化。 (2)去掉各函数依赖左部多余的属性。 (3)去掉“多余”的函数依赖。 例 设有关系模式R上的一个依赖集: F={A BC,BC,ACB } 试计算Fm。 解:(1)函数依赖右部属性单一化: F= {A BC,BC,ACB } = { AB, AC, BC,ACB}
(2)消去函数依赖左部多余属性: 可见BC+F 由 F = { AB, AC, BC,ACB} 令 G = { AB, AC, BC,CB } ∵ C+F = {C} ∴ F G 又令 L = { AB, AC, BC,AB} ∵ A+ F={ABC}可见 B A+ F ∴ F = L ={ AB, AC, BC}。 (3)消去F多余的函数依赖: 显然, AC是多余的, ∴ Fm = { AB, BC}
五、从给定的函数依赖集,确定关系模式的键码 五、从给定的函数依赖集,确定关系模式的键码 例1 设:R(U, F),U={SCG}, F={(C,S)→G} (S:学号,C:课程号,G:学习成绩) 求:R的所有键码。 解:① CF+ ={C} , GF+ ={G} , SF+ ={S} ( CF+, GF+ , SF+ 都不能函数决定 U ) ② (CG)F+ = {CG} ({CG}→U不成立) (CS)F+ = {CGS} ({CS}→U成立!) (GS)F+ = {GS} ({GS}→U不成立) ③ 综上,键码 KEY = {CS} 结束! 注意:不必计算(CGS)F+
结论: (1)若属性X仅出现在F的左部, 则X必是关系模式R任一键码的属性。 (2)若属性X不出现在F的左部和右部, 则X必是关系模式R任一键码的属性。 (3)若属性X只出现在F的右部, 则X不是关系模式R的键码属性。
例2 设:关系模式R(U, F)。其中, U = { A, B, C, D, E }, F = { ABD,AE,CB,DC }。 求:R的所有键码。 解:① R的所有键码必定都含有属性A:AF+={AE} 而 BF+ 、 CF+ 、 DF+ 、 EF+均不必计算! ② (AB)F+= {ABDEC} ∴(AB)是一个键码! (AC)F+= {ACEBD} ∴(AC)是一个键码! (AD)F+= {ADECB} ∴(AD)是一个键码! ∵键码必不含E属性。 (AE)不可能是键码。 注意:其余都不必计算!
§4 关系数据库模式设计 关系模式R1 关系模式Rk 一、模式分解概述 1.模式分解和子模式 设关系模式R(U),以及模式集合:ρ={R1(U1),…,Rk(Uk)}。若U1∪ U2∪ …∪Uk = U,且不存在Ui Uj ( 1≤i, j≤k )。则称ρ是R(U)的一个分解,R1,… ,Rk称为R的子模式。 关系模式R ...... ρ
关 系 r1 关 系 rk 2. 关系的投影 关 系 r U Uk U1 ...... 例1 设有关系模式R(Eno,Es,Eg)。其中: Eno:职工号;Es:工资级别;Eg:工资额。 R上的函数依赖集F={Eno→Es, Eg;Es→Eg} ρ= {R1,R2,R3} R的一个关系r在ρ上的投影如下:
R1 Eno Es E01 3 E02 4 E03 4 R Eno Es Eg E01 3 2600 E02 4 2200 E03 4 2200 R2 Es Eg 3 2600 4 2200 R3 Eno Eg E01 2600 E02 2200 E03 2200
3. 函数依赖集的投影 关系模式 R1(U1, F1) 关系模式 Rk(Uk, Fk) 关 系 模 式 R( U, F ) . . . . . . F+ = { ...... }
A→φ, B→φ, C→φ, AB→φ, AC→φ,BC→φ, ABC→φ, A→A, AB→A, AC→A, ABC→A, A→B, AB→B,AC→B,ABC→B, A→C, AB→C, AC→C, ABC→C, F+ = A→AB, AB→AB, AC→AB, ABC→AB, A→AC, AB→AC, AC→AC, ABC→AC, A→BC, AB→BC, AC→BC, ABC→BC, A→ABC,AB→ABC,AC→ABC,ABC→ABC, B→B, BC→B, B→C, BC→C,B→BC, BC→BC, C→C 设:R(A,B,C),F={A→B,B→C} 则有:
思考: 1)若有R1(U1, F1),其中U1={ A, B }。问:F1=? 2)若有R2(U2, F2),其中U2={ B, C }。问:F2=? ●计算Fi(i=1,2,…,k)算法: 设:Ri(Ui,Fi)是R分解得到的一个子模式, A是 Ui的一个真子集,即A Ui 。 step1:对于所有A Ui,计算A+F 和A+F ∩Ui step2:根据(1)构造Fi (i=1,2,…,k)
例2 设:R(U,F),U={A,B,C,D}, F={A→B,B→C,C→D,D→A } ρ={ R1(A,B,C),R2(C,D) }。 求:F在R1、R2上的投影F1、F2 解: 令: U1={ABC}, U2={CD} 对于U1={ABC}: ∵ A+F = {ABCD}, A+F∩U1={ABC} B+F = {ABCD}, B+F ∩U1={ABC}C+F = {ABCD}, C+F ∩U1={ABC} (AB)+F = {ABCD}, (AB)+F ∩U1={ABC} (AC)+F = {ABCD}, (AC)+F ∩U1={ABC} (BC)+F = {ABCD}, (BC)+F ∩U1={ABC}
∴ F1 = {A→B,A→C, B→A, B→C, C→A, C→B, AB→C, AC→B, BC→A } = {A→B,B→A, B→C, C→A } = {A→B,B→C, C→A } 对于U2 = {CD}: ∵ C+F = {ABCD}, C+F∩U2 ={CD} D+F = {ABCD}, D+F ∩U2 ={CD} ∴ F2 = { C→D,D→C }。
4. 关系模式分解的不同准则 (书:p66 3.6.5-3.6.6) (1)分解具有“无损连接性”(Lossless join) (2)分解具有“保持函数依赖性”(Preserve dependency) (3)分解既具有“无损连接性”,又具有“保持函数依赖性”
关 系 r1 关 系 rk r1r2 rk …… 二、模式分解的无损连接性 关 系 r · · · · · · 无损连接性:对于关系模式R 及其子模式 R1, …, Rk所对应的任何关系r和r1,… , rk, 都有: r
三、模式分解的保持函数依赖性 设ρ={ R1,…,Rk }是关系模式R(U,F)的一个分解。Fi是 F到 Ri的投影(i=1,…,k)。如果 (∪Fi)+= F+,则称ρ是保持函数依赖性的。 k i=1 F F+ k (1)计算G =∪ Fi i=1 Fk F1 ... G: 1.什么叫分解的“保持函数依赖性” 2. 判定保持函数依赖性的算法 (2)若 FG+, 则ρ是保持函数依赖性的。 G F+ !
例3 设:R(U,F),U={A,B,C,D}, F={A→B,B→C,C→D,D→A }, ρ={R1(A, B, C),R2(C, D)}。 问:ρ是否保持函数依赖? 解:我们已得到: F1= {A→B,B→C, C→A} F2 = { C→D,D→C }。 (1)计算:G = F1∪ F2 = { A→B,B→C,C→A,C→D,D→C } (2)对于D→A∈F, ∵D+G ={ABCD} ∴A D+G 即: D→A∈G+;而对于F中的AB、 B→C 和C→D,它们显然属于G+。 故:ρ对R的分解是保持函数依赖性的。
四、模式分解的算法 1. 模式分解的几个结论 一个关系模式R: (1)它一定可以无损连接性地分解成若干个BCNF的子模式(甚至是4NF的子模式)。 (2)它一定可以保持函数依赖性地分解成若干个3NF的子模式,但不一定能达到BCNF。 (3)它可以既保持函数依赖性,又具有无损连接性地分解形成一些3NF的子模式,但不一定能分解成为若干BCNF的子模式。
2. 无损连接性地分解到BCNF的算法 定理:设有关系模式R(U,F),以及R的一个分解 ρ= { R1(U1,F1),R2(U2,F2) }。 该分解具有无损连接性的充要条件是: (U1U2)(U1 - U2)F+, 或者: (U1U2)(U2 - U1)F+。 例4 设有关系模式RL(U,F)。其中: U={ C,T,H,R,S,G } F={CS→G,C→T,HR→C,HS→R,TH→R} KEY = { HS }
解: (略去计算过程) “X” 找到非码决定因素函数依赖 “X” “A” U去掉“A” (GT) “X A” CSGT 非码依赖 CHRS U={CGHRST} F={ CS→G,C→T HR→C,HS→R TH→R } KEY={HS} 计算: (CS)F+= { CSGT } F1={C→T, CS→G} F2={CH→R,HR→C, HS→C,HS→R} KEY=CS KEY=HS 计算: (C)F1+ ={ CT } 计算: (CH)F2+ ={ CHR }
去掉R 去掉T CT {C→T} CGS { CS→G} CHR { CH→R, HR→C} CHS { HS→C} CSGT F1={ C→T, CS→G } KEY=CS CHRS F2={CH→R,HR→C, HS→C,HS→R} KEY=HS (CH)F2+ ={ CHR } (C)F1+ ={ CT } KEY=CS KEY=HS KEY=C KEY=CH/HR BCNF BCNF BCNF BCNF 注:失去函数依赖TH→R。
设:关系模式 R(U,F) 分解成为BCNF的算法: (1)初始, 令ρ= { R(U,F) } (2)重复以下步骤,直到ρ的所有关系模式都是 BCNF的: a. 找出ρ中不是BCNF的关系模式。不妨假设它就是Ri(Ui,Fi) 。其中必有:X→Y∈Fi,而X不含Ri的键码。 b. 计算:XFi+ , 并令:A = XFi+– X c. 把Ri分解成为子模式Ri1和Ri2,其中: URi1= XA, URi2= Ui – A。 d. 计算Fi在Ri1和Ri2的投影,以及Ri1和Ri2的键码。
3.保持函数依赖分解成3NF的算法: 例5 设有关系模式R(Eno,Ename, Es,Eg) F={ Eno→(Ename,Es,Eg),Ename→Eno, Es→Eg } 求:R的一个保持函数依赖性的分解。 解:1)求F的最小函数依赖集Fm: ∵ F中同时存在 Eno→Es 和 Es→Eg, ∴ Eno→Eg是F中“多余”的函数依赖。 故:Fm = { Eno→Ename, Eno→Es, Ename→Eno,Es→Eg }
2)按照Fm中“决定因素”的不同属性,创建子模式ρ={R1(U1,F1),R2(U2,F2), R3(U3,F3)} 其中, U1={Eno,Ename, Es},F1={ Eno→(Ename,Es)} U2={ Es,Eg }, F2={ Es→Eg } U3={ Ename,Eno }, F3={ Ename→Eno } 3) ∵U3U1 ∴ 把R3“并入”R1 得到:ρ={ R1(U1,F1),R2(U2,F2) }。 其中, U1={Eno,Ename, Es}, F1={ Eno→(Ename,Es),Ename→Eno } U2={ Es,Eg }, F2={ Es→Eg }
●保持函数依赖分解成3NF的算法: 设:关系模式R(U,F)。 (1)计算F的最小依赖集Fm。 (2)若Fm中仅有一个函数依赖X→Y,且XY=U,则ρ={ R(U,Fm)},并结束算法。 (3)把U中与Fm的所有函数依赖的左部和右部都无关的属性,从U中分离出去,并使它们构成一个关系模式R0( R0至少是3NF的!)。令:此时Fm剩余的属性构成属性集U0
(5)根据Fi所包含的属性构造Ui。并由此构造关系模式Ri(Ui, Fi)。于是,可得R的一个分解ρ={R0,R1,…,Rk},且有:∪kUi= U0 i=1 (4)按照Fm中各函数依赖的左部属性,把Fm划分为F1,…,Fk,使得每个Fi(i=1,2,…,k)的所有函数依赖的左部都相同。 (6)对于1≤i,j≤k (i≠j), 若Ui Uj,则把Ri“合并”到Rj。 (注意:须将Fi“合并”到Fj之上)
4. 达到4NF的无损连接性的分解 设:给定关系模式R(U,F): (1)把R保持无损连接性地分解为BCNF。假设分解结果为:ρ={ R1,R2,…,Rk }。 其中,R1,R2,…,Rk ∈BCNF (2)若对于ρ的任意一个关系模式Ri,存在:Ri4NF,则 Ri中必存在非平凡的非函数依赖的多值依赖X→→Y,且有: Ui={X,Y,Z}, Z = Ui – X – Y 于是,对Ri进行分解,使之成为: Ri′(X,Y) 和 Ri″(X,Z)。
掌握:函数依赖集闭包概念;多值依赖与4NF;关系投影;具有无损连接性分解和保持函数依赖分解的概念;低范式关系模式的缺点。掌握:函数依赖集闭包概念;多值依赖与4NF;关系投影;具有无损连接性分解和保持函数依赖分解的概念;低范式关系模式的缺点。 熟练掌握:函数依赖概念;函数依赖Armstrong公理系统和推理规则;属性集A关于函数依赖集F的闭包计算;BCNF、3NF、2NF和1NF的概念;判定关系模式属于第几范式;从函数依赖集计算关系模式的键码;关系模式分解的函数依赖投影计算;具有无损连接性分解到BCNF的算法。保持函数依赖分解到3NF的算法。 理解:数据冗余及其影响问题。