【数据库】判断关系模式的分解是否是无损连接的

无损连接定义:

        给定一个关系模式 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

∴不是无损连接的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值