200 likes | 349 Views
授课顺序: 15 授课学时: 2 学时 教学方式:讲授 基本要求:基本要求:了解数据依赖的公理系统及模式分解 。. 6.4 数据依赖的公理系统. 6.4.1 定义 关系模式 R< U, F > ,对于其上任意一个关系 r ,若函数依赖 X Y 都成立,则称 F 逻辑蕴涵 X Y 。 在关系模式 R< U, F > 中,为 F 所逻辑蕴涵的函数依赖的全体称作 F 的闭包,记作 F + 。 例: F={ X Y , YZ} ,则 { X Z} F + 。 6.4.2.1Armstrong 公理
E N D
授课顺序:15 授课学时:2学时 教学方式:讲授 基本要求:基本要求:了解数据依赖的公理系统及模式分解 。
6.4 数据依赖的公理系统 • 6.4.1定义 • 关系模式R< U, F >,对于其上任意一个关系r,若函数依赖XY都成立,则称F逻辑蕴涵XY。 • 在关系模式R< U, F >中,为F所逻辑蕴涵的函数依赖的全体称作F的闭包,记作F+。 例:F={XY,YZ},则{XZ} F+。 • 6.4.2.1Armstrong公理 X,Y,Z是属性集, • 自反律。若Y X, 则X Y。 • 增广律。若X Y ,则XZ YZ。 • 传递律。若X Y, Y Z,则X Z 。
6.4.2.2 Armstrong公理的有效性及完备性 A = { f | 可用Armstrong公理从F中导出的函数依赖f} B = {f | 被F所逻辑蕴涵的函数依赖f} • 有效性:用Armstrong公理从F中导出的函数依赖必为F所蕴涵。 A B • 完备性:F所蕴涵的函数依赖都能用Armstrong公理从F中导出。 B A
6.4.2.3 Armstrong公理的有效性证明 按函数依赖定义r是R<U, F>上的任一关系,t,s r 自 反 律 t[X] = s[X] YX } X Y t[Y] = s[Y] t[XZ] = s[XZ] t[X] = s[X] } 增 广 律 t[Y] = s[Y] XY } t[XZ] = s[XZ] t[Z] = s[Z] XZYZ t[YZ] = s[YZ]
X Y t[X] = s[X] } 传 递 律 t[Y] = s[Y] } • 由Armstrong公理导出的推理规则 • 合并律。若X Y,X Z,则X YZ。 • 分解律。若X YZ ,则X Y,X Z 。 • 伪传递律。若X Y,WY Z,则XW Z 。 t[Z] = s[Z] Y Z X Z
示例 R< U, F >, U = (A, B, C, G, H, I), F = {AB, AC, CGH, CGI, BH}, • A H? Y • CG HI?Y • AG I? Y • 思考:若属性组合是码,则函数依赖会有何特征??
问题:有没有一般性的算法判定XY是否能由F根据Armstrong公理导出?问题:有没有一般性的算法判定XY是否能由F根据Armstrong公理导出? • 6.4.3 属性集的闭包 • 设F为属性集U上的一组函数依赖,X U, = {A | XA能由F根据Armstrong公理导出} 称 为属性集X关于函数依赖集F的闭包。 • 引理一: XA1 A2 Ak成立 XAi成立(i=1, 2, ,k) 证明: 由合并律 由分解律
引理二 Y F 逻辑蕴涵XY 必要性: F逻辑蕴涵XY 对Y中任意属性A,有XA Y 充分性: 若Y 假设Y中有属性A XA不能由F导出 } XY也不能由F导出 } 引理一 F逻辑蕴涵XY 矛盾
算法(求属性集的闭包) • 由引理二,判定XY是否能由F根据Armstrong公理导出,可转化为求 ,判定Y 是否成立。 Input:X,F Output: := X; while ( 发生变化)do for each 函数依赖 AB in F do begin if A then := B end 开始: 算法会终止吗?
示例1 R< U, F >, U = (A, B, C, G, H, I), F = {AB, AC, CGH, CGI, BH},计算 。 所用依赖 AB AGB AC AGBC CGH AGBCH CGI AGBCH I = AGBCHI
示例2 R< U, F >, U = (A, B, C, D, E), F = {ABC, BD, CE, CEB, ACB},计算 。 所用依赖 ABC ABC BD ABCD CE ABCDE = ABCDE
思考:若属性组合是码,则码的闭包会有何特征??思考:若属性组合是码,则码的闭包会有何特征?? • 快速热身 R< U, F >, U = (C, T, H, R, S), F = {CT, HRC, HTR, HSR},HR是码吗?(N) HS呢?(Y)
补充:后选关键字的求解理论和算法 • 对与给定关系R和函数依赖集,可将属性分为四类。 • L类:仅出现在F的函数依赖左边的属性。 • R类:仅出现在F的函数依赖右边的属性。 • N类:在F的函数依赖左右两边均未出现的属性。 • LR类:在F的函数依赖左右两边均出现的属性。
快速求解后选关键字的一个充分条件。 • 定理1:若X是L类属性,则X包含在R的任一后选关键字中。 • 推论1:若X是L类属性,且X包含了R的全部属性,则X必为R的唯一后选关键字。 • 定理2:若X是R类属性,则X不在任一后选关键字中。 • 定理3:若X是N类属性,则X包含在R的任一后选关键字中。 • 推论2:若X是R的N类和L类组成的属性集,且X+包含了R的全部属性,则X是R的唯一后选关键字。 • 快速热身:设R={A,B,C,D,E,P},F={AD,ED,DB,BCD,DCA} 求R的所有后选关键字。
6.4.4 函数依赖集的等价性 • 函数依赖集F,G,若F+= G+,则称F与G等价。 • F+ = G+ F G+,G F+ • 判定F G+,只需对F中的函数依赖XY,逐一考察Y是否属于 就行了。 • 例判断F函数依赖集F = {EB, BC, EC, EBC, EBC}和函数依赖集G= {EB, BC}是否等价?
F函数依赖集F = {EB, BC, EC, EBC, EBC}和函数依赖集G= {EB, BC}是否等价? 考察F中的依赖是否被G蕴涵: • 1、(E)G+=EBC ,B (E)G+,所以F的EB被G蕴涵。 • 2、(B)G+=BC ,C (B)G+,所以F的BC被G蕴涵。 • 3、(E)G+=EBC ,C (E)G+,所以F的EC被G蕴涵。 • 4、(EB)G+=EBC ,C (EB)G+,所以F的EBC被G蕴涵。 • 6、(E)G+=EBC ,BC (EB)G+,所以F的EBC被G蕴涵。 再考察G中的依赖是否被F包含: • 1、(E)F+=EBC ,B (E)F+,所以G的EB被F蕴涵。 • 2、(B)F+=BC, C (B)F+,所以G的BC被F蕴涵。 可看出,F G+,G F+,所以F和G等价。
正则覆盖(最小覆盖) 满足下列条件的函数依赖集F称为正则覆盖,记作Fm: • 单属性化:F中任一函数依赖X A,A必是单属性。 • 无冗余化:F中不存在这样的函数依赖X A,使得F与F {X A}等价。 • 既约化:F中不存在这样的函数依赖X A,在X中有真子集Z,使得F与F {X A} {Z A}等价。
算法:求解函数依赖集F的正则覆盖Fm • 单属性化:逐个检查F中各函数依赖FDi:XY, 若Y=A1 A2 Ak ,k≥2,则用诸XAi 代替Y。 • 无冗余化:逐个检查F中各函数依赖XA, 令G = F{XA},若A ,则从F中去掉该函数依赖。 • 既约化:逐个检查F中各函数依赖XA, 设X = B1Bm,逐个考查Bi, 若A ,则以(X Bi)取代X。
示例一 F = {AB,BA,AC,BC},求Fm。 1、单属性化:F已经是单属性了。 2、无冗余化: • 检查AB,G1=F{AB}={BA,AC,BC} (A)G+={A,C},B{A,C},所以AB不冗余。 • 检查AC,G1=F{AC}={AB,BA,BC} (A)G1+ ={A,B,C},C{A,B,C}, AC冗余, 所以从F中删除AC。 • 检查G1中的BC,G2= G1{BC}={AB,BA} (A)G2+ ={B},C {B}, BC不冗余。 3、既约化:左部已经无多余属性。 Fm = {AB,BA,BC} 或者 Fm = {AB,BA,AC} 注:正确答案的不止一个,考察依赖的顺序不同,答案也不同。
示例二 F = {CA,AG,CGB,BA},求Fm。 单属性化、无冗余化略。 判断CGB, • = = {G} B • = = {C,A,G,B} B ,以C代替CG 最后,Fm = {CA,AG,CB,BA}