Bootstrap

判断无损连接

很多资料讲解比较抽象下文相对比较通俗易懂,个人理解如有错误欢迎指正

当分解ρ只有两组的时候

这种情况相对较好判断,有现有公式: R1∩R2→R1-R2或R1∩R2→R2-R1  这两个条件满足任何一个都是无损连接都不满足即为有损连接   例如:

  • 设有关系模式R(U,V,W,X,Y,Z),其函数依赖集:F={U→V,W→z,Y→U,WY→X},现有下列分解:ρ={UVY,WXYZ} (摘自软考题)
  1. R(UVY) ∩ R(WXYZ) 得出Y   R1-R2 得出UV   R2-R1 得出WXZ   此处注意Ri-Rj 以前一个Ri为基准有相同项去除保留不同项
  2. 现在只要证明 → UV  或 → WXZ 是否至少有一个成立
  3. 根据F={U→V,W→z,Y→U,WY→X}  因为 Y→U  U→V   Y → UV 成立
  4. → WXZ 现有条件无法推出   但Y → UV 成立  即可判断为无损连接

当分解ρ大于两组的时候

此时相对复杂一点,需要列出初始判断表,根据已知条件在初始判断表里修改, 最终表里如果有一行全部为a的即为无损连接。具体规则如下

  • U=(A,B,C,D,E)    F={AD,ED,DB,BCD,DCA} 判断ρ={AB,AE,CE,BCD,AC}是否为无损连接分解。(摘自教材例题)

初始表(左侧第一列为ρ 第一行为U) 规则为:左侧的ρ包含U即为ai不包含则为bji i为第几列 j为第几行

ρ/UABCDE
ABa1a2b13b14b15
AEa1b22b23b24a5
CEb31b32a3b34a5
BCDb41a2a3a4b45
ACa1b52a3b54b55

有了初始表现在根据F条件修改表

第一步 A规则为:找出A列存在的相同项(初始表A列相同项为a1) 修改对应的D列不为ai的值,改为以第一行为基准,如果第一行为bij时需要添加特殊标记(有特殊标记*的再次更改时所有*bij也需要修改)[***此处相关材料存在错误,多谢评论区指出]

ρ/UABCDE
ABa1a2b13b14b15
AEa1b22b23*b14a5
CEb31b32a3b34a5
BCDb41a2a3a4b45
ACa1b52a3*b14b55

第二步 E规则如第一步: 相同项a5  D列对应第一行为b14

ρ/UABCDE
ABa1a2b13b14b15
AEa1b22b23*b14a5
CEb31b32a3*b14a5
BCDb41a2a3a4b45
ACa1b52a3*b14b55

第三步 D规则如第一步: 相同项b14 B列对应第一行为a2 

ρ/UABCDE
ABa1a2b13b14b15
AEa1a2b23*b14a5
CEb31a2a3*b14a5
BCDb41a2a3a4b45
ACa1a2a3*b14b55

第四步 BC规则: 需要满足BC列相同(相同项为a2 a3)  D列改为BC列(BC列为a)[***因为此时修改到标记过得*b14那么所有*b14都需要修改]

ρ/UABCDE
ABa1a2b13b14b15
AEa1a2b23a4a5
CEb31a2a3a4a5
BCDb41a2a3a4b45
ACa1a2a3a4b55

第五步 DC规则如第四步 满足DC列相同(相同项为a3 a4)  A列改为DC列 a1  

ρ/UABCDE
ABa1a2b13b14b15
AEa1a2b23a4a5
CEa1a2a3a4a5
BCDa1a2a3a4b45
ACa1a2a3a4b55

最后判断最终表只要存在一行全为a则为无损连接 没有即为有损连接   

ρ/UABCDE
ABa1a2b13b14b15
AEa1a2b23a4a5
CEa1a2a3a4a5
BCDa1a2a3a4b45
ACa1a2a3b14b55

CE行都为a最后得出此题为无损连接

 

;