620 likes | 840 Views
第三章 数 据 依 赖. 本章的主要内容: 函数依赖的概念及函数依赖公理 函数依赖集的等价和覆盖 多值依赖及多值依赖公理 连接依赖. 数据依赖 是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系 是现实世界属性间相互联系的抽象 是数据内在的性质 是语义的体现. 数据依赖 : 函数依赖、多值依赖、连接依赖. 3.1 函数依赖( Functional dependency FD) 定义1( FD)
E N D
本章的主要内容: • 函数依赖的概念及函数依赖公理 • 函数依赖集的等价和覆盖 • 多值依赖及多值依赖公理 • 连接依赖
数据依赖 是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系 是现实世界属性间相互联系的抽象 是数据内在的性质 是语义的体现 数据依赖 : 函数依赖、多值依赖、连接依赖
3.1 函数依赖(Functional dependency FD) 定义1(FD) 设关系模式R(U),X,Y U,r是R(U)上的任一关系,对任意t1、t2r, 如果 t1[X]=t2[X] 有t1[Y]=t2 [Y],称X函数决定Y,或Y函数依赖于X,记为:FD X→Y。 定义2(FD) 对X中的任一值x,ΠY(σX=x(r)) 的值仅有一个元组,则有X→Y。 定义(平凡/非平凡的FD) 设FD X→Y,如果YX,则称 FD X→Y为非平凡的函数依赖;否则,若YX,称FD X→Y为平凡的函数依赖。
定义(传递FD):设关系模式R,X、Y、Z是R的属性子集,若FD X→Y,Y → X,Y→Z,则有FD X→Z,称FD X→Z为传递函数依赖。 定义(完全FD):设FD X→Y,如果对任意的XX,X→Y都不成立,则称X→Y是完全函数依赖;若对X的真子集X有XX,而X→Y成立,则称FD X→Y是部分函数依赖,即Y函数依赖于X的一部分。
学校数据库的语义: ⒈ 一个系有若干学生, 一个学生只属于一个系; ⒉ 一个系只有一名主任; ⒊ 一个学生可以选修多门课程, 每门课程有若干学生选修; ⒋ 每个学生所学的每门课程都有一个成绩。 函数依赖的例子 R(SNO,CNO,SNAME,GRADE,DEPT,MNG) SNO → DEPT, DEPT → MNG; SNO,CNO→GRADE; SNO,CNO→SNO; SNO,CNO→SNAME; SNO→MNG
3.2 函数依赖公理 3.2.1 函数依赖公理 定义(FD的逻辑蕴涵) : 设关系模式R(U,F),X,YU,如果能从函数依赖集F推导出FD X→Y,则称 F逻辑蕴涵 FD X→Y,或称X→Y逻辑蕴涵于F。记为 F|= X→Y。
Armstrong公理: 设r是R(U)上的一个关系,X、Y、Z、WU。 A1. 自反律: 若YXU, 则 X→Y; A2. 增广律: 若X→Y且ZU,则 XZ→YZ; A3. 传递律: 若X→Y, Y→Z,则 X→Z.
证明: A1. 自反律: 若YXU, 则 X→Y; 设r是R的关系,t1, t2是r的任意元组,X、Y、Z U (1) 对X的任意值x,有ΠX(σX=x(r))至多有一个元组, 因YX,ΠY(σX=x(r))至多只有一个元组,则有X→Y
证明: A2. 增广律: 若X→Y且ZU,则 XZ→YZ; (2)对任意x值,ΠX(σX=x(r))至多有一个 元组。有 : σXZ=xz (r) σX=x(r),则 ΠY(σXZ=xz(r)) ΠY(σX=x(r))。所以, ΠY (σXZ=xz (r))至多有一个元组, r必满足XZ→Y。
证明: A3. 传递律: 若X→Y, Y→Z,则 X→Z. (3) 若X→Y,则t1[X] = t2[X], t1[Y] = t2[Y] 又 Y→Z,则有t1[Y]=t2[Y], t1[Z]=t2[Z]。 显然,X→Y在r中成立。
推论1 若X→Y,X→Z,则X→YZ。 证明:若X→Y X → XY X→Z XY→YZ X→YZ 推论2 若X→Y且ZY,则X→Z。 证明: ZY Y→Z 推论3 若X→Y,YZ→W,则XZ→W。 证明: X→Y XZ→Y Z YZ→ W XZ→W
示例:SC(SNO,CNO,SNAME,GRADE,DEPT,MN) F={ SNO,CNO→GRADE, SNO → SNAME,DEPT, DEPT → MN} SNO → SNAME,DEPT,MN SNO,CNO → SNAME,DEPT,MN SNO,CNO → SNAME,GRADE,DEPT,MN
定理1 如果Ai (i =1, 2, …, n)是关系模式R的属性,则 X→ A1A2 … An成立的充要条件是: X→ Ai (i =1, 2, …, n) 都成立。
例: 设F={AB→E,AG→J,BE→I,E→G,GI→H} 试证:F|= AB→GH 证明:用公理系统和F中的函数依赖,推导过程如下: 1. 已知 AB→E,E→G则:AB→G; (传递律) 2. 已知 AB→E 则:AB→BE; (增广律) 3. 已知 BE→I,又 AB→BE 则:AB→I (传递律) 4. 由1和3有AB→G, AB→I 则:AB→GI (合成规则) 5. 由4有 AB→GI,又 GI→H则:AB→H (传递律) 6. 由1和5有 AB→H,AB→G 则:AB→GH (合成规则)
定义(使用集) 用公理从F推出 X→Y成立所使用的函数依赖组成的序列称F上的一个推理序列。由推理序列中出现的且包含在F中的函数依赖的集合称推理序列的使用集(use set),记为: U(F, X→Y) 例:U(F, AB→GH) ={AB→E,E→G, BE→I, GI→H}
3.2.2 公理的完备性 定义(FDs的闭包 F +) 设F是关系r(R)上的FDs,F所蕴含的所有FD的集合称为F的闭包,记作F +。 F + = { X→Y | 所有F |= X→Y }
例:设F={AB→C,C→B}。 F+ 为: F+ = {A→A, AB→A, AC→A, ABC→A, B→B, AB→B, BC→B,ABC→B,C→C,AC→C,BC→C,ABC→C,AB→AB,ABC→AB,AC→AC,ABC→AC,BC→BC, ABC→BC, ABC→ABC, AB→C, AB→AC, AB→BC, AB→ABC,C→B, C→BC,AC→B ,AC→AB}
定义(属性集的闭包X +) 设关系模式R(U, F),X U, 所有用公理推出的X→Ai中Ai的属性集合称X对于F的闭包,记作:X + X +={ Ai | 用公理推出的X→Ai且Ai U}
定理2 Armstrong公理是完备的。 证明:如果能证明X→Y不能由公理推出将不会被F所蕴涵,则公理得证。为此,构造一个关系r(R)。 我们将证明两点: (1). F中的所有函数依赖在 r (R)上都成立; (2). X→Y在r(R)上不成立。
设R=A1A2 … An,关系r中仅有二个元组 t 和 t'。 元组t=〈a1a2 … an〉。元组t'被定义为: ai若Ai X+ t'(Ai ) = bi若Ai X+ X+U - X+ A1 A2 ...Ak Ak+1 ... An t a1a2 ... akak+1 ... an t'a1a2 ... akbk+1... bn
证明: (1) 设W→ZF,W在r中有两种情况: (a) W X+。根据属性闭包定义,有X→W,又因W→Z,根据公理A3有 X→Z。因此 ZX+,即 t[Z]= t’[Z]= ai , 所以,W→Z在r上成立。 (b) W X+。则在r中有t[W] t’[W],因此,W→Z在r上总是成立的。 由(a)和(b)得:r(R)满足F。 (2) 若X→Y不能由公理推出。即XX+而YX+,由r的构造知,X→Y在r上不成立,即 X→Y不被F所蕴涵。
3.2.3 函数依赖集闭包及成员测试算法 算法1 计算属性集X的闭包X+的算法 输入:属性集X和函数依赖集F 输出:X的闭包X+ CLOSURE(X, F) Begin VAR:=φ; RESULT:=X; While RESULT≠VAR do Begin VAR:=RESULT; for every FD W→Z in F do if WRESULT then RESULT:=RESULT∪Z end; return(RESULT) end.
例:F={A→D, AB→E, BI→E,CD→I,E→C} 求: AE+ 解: AE0 =AE AE1 =AED AE2 =AEDC … AE+ =ACDEI F={A2→A1, A3→A2, A4→A3,,Am→Am-1} 算法改进:每个FD仅考察一次;每个属性仅考察一次
计算属性闭包的改进算法: 1. 构造一个LIST表,存放含相同左部属性的FD。 如list[A],将存放左部含A的FD; 2. 构造一个计数器COUNT,计数FD的左部属性数。 如: COUNT[W→Z]=|W|; 3. 变量UPDATE记录未考察的属性,使每个属性仅 考察一次,RESULT放中间和最后结果。
算法3.2.2 计算属性闭包的改进算法 LINCLOSURE(X, F) Ⅰ. 初始化 for each FD W→Z in F do begin COUNT[W→Z]:=│W│; for each attribute A in W do add W→Z to list[A] end; RESULT:=X; UPDATE:=X.
Ⅱ. 计算 While UPDATEφ do begin Choose an A in UPDATE; UPDATE:=UPDATE-A; for each FD W→Z in LIST[A] do begin COUNT[W→Z]:=COUNT[W→Z]-1; if COUNT[W→Z]=0 then begin ADD:=Z-RESULT; RESULT:=RESULT∪ADD UPDATE:=UPDATE∪ADD end end end. Ⅲ. return(RESULT).
例: 设F={A→D,AB→E,BI→E,CD→I,E→C} 计算:LINCLOSURE(AE,F)。 解:(1) 初始化: RESULT=AE UPDATE=AE LIST[A]=A→D,AB→E COUNT[A→D]=1 LIST[B]=BI→E,AB→E COUNT[AB→E]=2 LIST[C]=CD→I COUNT[BI→E]=2 LIST[D]=CD→I COUNT[CD→I]=2 LIST[E]=E→C COUNT[E→C]=1 LIST[I]=BI→E (2)COUNT[A→D]=0 COUNT[AB→E]=1 RESULT=ADE UPDATE=ED 其余不变。 (3) COUNT[E→C]=0 RESULT=ACDE UPDATE=CD 其余不变。 最后返回结果为ACDEI。
定理1: LINCLOSURE算法对输入长度n而言,具有时间复杂度O(n)。 证明: (1) 初始化阶段计算COUNT[W→Z]所用时间和|W|成正比。计算COUNT的全部初始化值为 O(n)次。 (2) 填写LIST表花费O(n),RESULT和UPDATE能用O(n)时间进行初始化。 (3) 计算阶段,F中的属性加入到UPDATE至多一次。减COUNT所花费的时间为O(n)。算法中涉及ADD的计算与│Z│成正比,是O(n)的。
算法3.2.3 判定F是否蕴涵X→Y的成员测试算法 输入:函数依赖集F和FD X→Y。 输出:若F蕴涵X→Y输出为true,否则为false MEMBER(F, X→Y) begin if Y LINCLOSURE(X,F) then return(true) eles return(false) end.
3.3 函数依赖的等价和覆盖 3.3.1 函数依赖的等价和覆盖 定义(等价和覆盖) 在模式R上的FDs F和G,若F+=G+,则F和G等价。 记作FG。 若FG,称F是G的一个覆盖,也称G是F的一个覆盖。
定理4 已知模式R上的函数依赖集 F和G。当且仅当 F|=G 且 G|=F ,则 F G。 证明:如果F|=G,若有X→Y∈G,则F|=X→Y,即X→Y∈F +, 有GF +,(G)+(F+)+ = F + 。 同理,如果G|=F,有F +G +。因此,F +=G +,则FG。 反之,若FG,则F|=G和G|=F是显然的。证毕。 例: 证明F={A→BC, A→D, CD→E}和 G={A→BCE, A→ABD, CD→E}等价
3.3.2 无冗余覆盖 定义(无冗余覆盖) 如果FDs F不存在真子集F使F F成立,则F是无冗余的。如果F是G的一个覆盖且F是无冗余的,则F是G的一个无冗余覆盖。 例: 求F={A→B, B→A, B→C, AB→C }的一个无冗余覆盖。 {A→B, B→A, B→C, AB→C } *一个函数依赖集的无冗余覆盖不是唯一的.
算法3.3.1 计算无冗余覆盖 NONREDUN(F) begin G: =F ; for each FD X→Y in F do if MEMBER(G-{X→Y}, X→Y) then G: =G-{X→Y}; return(G) end.
定义(属性集等价) 设X、YR,若F|=X→Y,且F|=Y→X,则X和Y在F上等价。记作XY。 定理5 设F和G是模式R上的两个等价的、无冗余的FDs。令X→Y是F上的一个FD。则在G中存在一个FD V→W使得XV。
证明:若X→YF,因FG,G|=X→Y. 则对X→Y有一个基于G的推理序列,其使用集为U(G,X→Y)。 对任一FD S→ZU(G,X→Y),则根据属性闭包的概念, 有:G|=X→S。 又因 FG, F|= S→Z. 则该函数依赖有一个基于F的推理序列。 要证明: XV 在G中一定有一个FD V→WU(G,X→Y),则有X→V。 因FG,V→W有一个基于F的推理序列且X→Y U(F,V→W), 则有G|= V→X。 <接下页>
否则,若X→YU(F,V→W),则FD V→W的使用集可写为:U(F{X→Y},V→W)。这样,由F和G等价可推出: F{X→Y} |= U(G,X→Y),则X→Y在F中是冗余的,这与F是无冗余的相矛盾。因此,必定有 X→YU(F,V→W),则F|=V→X。 由以上证明可知,G|=X→V ,则F|=X→V,又 F|=V→X。因此,在F中有XV,同理,在G中亦有XV。 证毕。 示例
例:设无冗余的等价的函数依赖集FG F ={A→BC,B→A,AD→E} G={A→ABC,B→A,BD→E} F和G中左部等价的属性集为: AA,BB,ADBD AD→E是F中的FD,在G中有BD→E 使得ADBD: 在G中,U(G,AD→E)={A→ABC,BD→E} 在F中,U(F,A→ABC )={A→BC} U(F,BD→E )={B→A,AD→E} 因此,在F和G中有 ADBD。
设无冗余的等价的函数依赖集F和G: |EF| = | EG| 等价类:对于模式R上的FDs集F和属性集X R。设EF(X)是F中左部等价于X的函数依赖集,即: EF(X)={Z→W Z→WF且 XZ} 令 EF 为F上所有左部等价的函数依赖的集合,即: EF={ EF(X) X R且EF (X) φ} *F上左部等价的依赖集的集合 EF 是F的一个划分。
例: 设F={A→BC,B→A,AD→E}, G={A→B,B→A, B→C, BD→E}, F和G是无冗余的且FG 求:F和G中左部等价的依赖集。 解:EF为:EF (A)={A→BC,B→A}, EF (AD)={AD→E} EG为:EG (A)={A→B, B→A, B→C}, EG (AD)={BD→E}
3.3.3 规范覆盖(canonical cover) 定义 设F是模式R上的一个FDs集,X→YF。若模式R中的属性A满足下列条件,则称属性A在X→Y中是外部属性。 1. X=AZ, XZ,且(F-{X→Y})∪{Z→Y} F 或者; 2. Y=AW, YW,且(F-{X→Y)}∪{X→W} F。 35 36
定义(化简覆盖) 若FD X→Y的左部或右部都不包含外部属性,称FDX→Y是化简的。 如果FDs集F中的所有FD都是化简的,称FDs集F是化简的。如果F是G的一个覆盖且F是化简的,称F是G的一个化简覆盖。 例:G={A→BC, B→C, AB→D} 求:G的化简覆盖。 解:A→BC、AB→D中C、B是外部属性, G1={A→B, B→C, A→D}是G的化简覆盖。
算法3.3.2 求化简覆盖 输入:函数依赖集F 输出:化简的F REDUCE(F) begin Ⅰ. 左化简 G:=F; for each FD X→Y in F do for each attribute A in X do if MEMBER(G, (X-A)→Y)then remove A from X in X→Y in G;
Ⅱ. 右化简 F:=G; for each FD X→Y in F do for each attribute A in Y do if MEMBER(G-{X→Y}∪{X→(Y-A)}, X→A) thenremove A from Y in X→Y in G; Ⅲ.除去形如X→φ的FD remove all FDs of the form X→φ from G; F:=G return(F) end.
例: 已知:F={A→C,AB→D,AE→CI,AC→J, C→D} 求:化简F 解:(1) 左简化 检查F中的FD, 在AB→D和AC→J中分别有属性B和C为外部属性,去掉B和C: F={A→C,A→D,AE→CI,A→J, C→D } (2) 右简化 检查A→D和AE→CI分别有外部属性D和C, 去掉D和C后: F={A→C,A→φ, AE→I,A→J,C→D} (3) 去掉A→φ 结果为:F={A→C,AE→I,A→J,C→D}。
** 求简化覆盖时,应该按照算法中给出的顺序: (1) 左简化 (2) 右简化 例:F={B→A,D→A,AB→D } (1) 右简化 结果为F (2) 左简化 结果为: F={ B→A,D→A,B→D } (3) 右简化 结果为: F ={ D→A,B→D }
定义(规范覆盖) 如果FDs集F是G的一个覆盖,F中的每个FD都具有X→A形式而且F是左化简的和无冗余的,称F是G的一个规范覆盖。 计算规范覆盖: (1)将每个FD的右部化为单属性; (2)将每个FD化为左简化的; (3)计算无冗余的覆盖。
3.3.4 最小覆盖 定义(最小覆盖) 如果FDs集F和任一等价的FDs集G相比,具有最少的函数依赖数,则称F为G的最小覆盖。 例: G={A→BC, B→A, AD→E, BD→I} F={A→BC, B→A, AD→EI}
定义(FD的直接决定) 如果存在一个G的无冗余覆盖F,使U(F, X→Y)∩EF(X)=φ。 则在G中X直接决定Y, 记作:X→Y。 说明:(1)若Y=X,有 X→Y 总是成立的。 (2)如果X→Y, 则有X→Y, 反之不一定成立。 (3)如果X为单属性,除了Y=X 外X→Y 都不成立。 例:G={A→CD, AB→E, B→I,DI→J} AB→J 因 U(G,AB→ J )∩EF(AB)=φ
定理6 在FDs集G中若X → Y,则对G的每一个无冗余覆盖F,有U(F, X→Y)∩EF(X)=φ