无损连接定义:
给定一个关系模式 R 和其分解 {R₁, R₂, ..., Rₙ},若通过自然连接 R₁ ⨝ R₂ ⨝ ... ⨝ Rₙ 能还原出原始关系 R(不丢失也不产生多余元组),则称这个分解是 无损连接的(lossless-join)。
判断方法一(函数依赖的属性法):
若满足(R₁ ∩ R₂) → R₁ 或 (R₁ ∩ R₂) → R₂ 成立(可由 F 推出),则该分解是无损连接的。
判断方法二(Chase表):
-
构造一个表格:每行代表一个子关系,列为 R 中的每个属性;
-
初始填入变量,子关系中有的属性填a,没有的填b;
-
对比每行属性,若某一列全是a,则将与之相关的依赖属性也全变为a;
-
若某一行中所有属性都变成a,则是无损连接。
例1:
请考虑关系模式 R(A, B, C, D, E, G, H, I, J),以及一组函数依赖集:F = {BD → CH, BC → HI, EI → H, H → AB, I → E, EJ → I}。请注意,A, B, C, D, E, G, H, I, J 都是属性。关于函数依赖集 F,关系模式 R 的一个分解R₁ = {A, B, C, D, H},R₂ = {E, G, H, I, J}是否是无损连接的?请说明理由
解:
方法一:
关系 R = {A, B, C, D, H, E, G, I, J}
分解为:R₁ = {A, B, C, D, H},R₂ = {E, G, H, I, J}
交集是 R₁ ∩ R₂ = {H}
-
若 H → ABCD 或 H → EGIJ 能由 F 推出 ⇒ 无损连接
-
否则 ⇒ 有损连接
证明过程省略,F显然不能直接推出H->ABCD和H->EGIJ
∴R1和R2不是无损连接的
方法二:
A B C D E G H I J
R1 a a a a b b a b b
R2 b b b b a a a a a
可以看到只有H列全部为a,因此找到依赖于H的属性:H → AB
将A、B列全部改为a
A B C D E G H I J
R1 a a a a b b a b b
R2 a a b b a a a a a
∵没有一行全部为a
∴不是无损连接的
例2(只用方法二):
请考虑一个关系模式 R(A, B, C, D, E, G, H, I, J),以及其函数依赖集:F = {AC → BDI, DHI → EJ, BC → G, GJ → H, CEI → BE, AH → CG}。关于函数依赖集 F,关系 R 的如下分解:R₁ = {A, D, H, J},R₂ = {C, B, E, H},R₃ = {B, G, H, J}是否满足无损连接性质?
A B C D E G H I J
R1 a b b a b b a b a
R2 b a a b a b a b b
R3 b a b b b b a b a
可以看到只有H列全部为a,因此找依赖于H的属性,结果发现没有,Chase表不变
∵没有一行全部为a
∴不是无损连接的