判断模式分解是否为无损连接的方法

判断模式分解是否为无损连接的方法

【方法步骤】

ρ = { R1<U1 , F1> , R2<U2 , F2> , … , Rk<Uk , Fk> } 是关系模式 R<U , F> 的一个分解,U = {A1 , A2 , … , An},F = {FD1 , FD2 , … , FDp},并设 F 是一个最小依赖集,记 FDi 为 Xi→Aj,其步骤如下:

① 建立一张 n(U中属性的个数) 列 k(ρ中关系模式的个数) 行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj 属于 Ui,则在 j 列 i 行上真上 aj,否则填上 bij

A1 A2 An
R1<U1 , F1>
R2<U2 , F2>
Rk<Uk , Fk>

② 对于 F 中的每一个 FDi 做如下操作:找到 Xi 所对应的列中具有相同符号的那些行。考察这些行中 j 列的元素,若其中有aj,则全部改为aj,否则全部改为bij,i 得是这些行的行号最小值。

如果在某次更改后,有一行成为:a1,a2,…,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性

【例题】

题目:

设关系模式R(U,F),其中:U= {A,B,C,D,E } ,F={A→B,DE→B,CB→E,E→A,B→D}。( D )为关系模式R的候选关键字。分解( D )是无损连接,并保持函数依赖的。

问题1选项

​ A.AB B.DE C.DB D.CE

问题2选项

​ A.ρ={ R1(AC),R2(ED),R3(B)} B.ρ={ R1(AC),R2(E),R3(DB)}

​ C.ρ={ R1(AC),R2(ED),R3(AB)} D.ρ={ R1(ABC),R2(ED),R3(ACE)}

解析:

第一空:由于B、E、A、D都能被推出来,所以候选关键字中一定包含C。所以选D。

第二空:解析如下👇

​ 1、一般关系中只有一个关键字都是有损的

​ 2、注意F中的关系并不是只能用一次,可以反复使用。

这里我们以正确答案 D 为例来判断说明是否为无损连接的具体过程:

  1. 构造一个初始的 i 行 j 列 的二维表,若 “属性” 属于 “模式” 中的属性,则填 aj,否则填 bij

    A B C D E
    R1(ABC) a1 a2 a3 b14 b15
    R2(ED) b21 b22 b23 a4 a5
    R3(ACE) a1 b32 a3 b34 a5
  2. 根据 A→B ,对上表进行处理,由于属性列 A上第1、3行相同均为a1,所以将属性列 B 上的 a2、b32 改为同一个符号 a2(这里有有 a2 于是就改为 a2)。

    A B C D E
    R1(ABC) a1 a2 a3 b14 b15
    R2(ED) b21 b22 b23 a4 a5
    R3(ACE) a1 a2 a3 b34 a5
  3. 根据 DE→B ,对上表进行处理,由于属性列 DE 上没有相同的列所以这里不做处理。

  4. 根据 CB→E ,对上表进行处理,由于属性列 CB上第1、3行相同均为 a2 a3,所以将属性列 E 上的 a5、b15 改为同一个符号 a5(这里有有 a5 于是就改为 a5)。

    A B C D E
    R1(ABC) a1 a2 a3 b14 a5
    R2(ED) b21 b22 b23 a4 a5
    R3(ACE) a1 a2 a3 b34 a5
  5. 根据 E→A ,对上表进行处理,由于属性列 E 上第1、2、3行相同均为 a5,所以将属性列 A 上的 a1、b21 、a1改为同一个符号 a1(这里有有 a1 于是就改为 a1)。

    A B C D E
    R1(ABC) a1 a2 a3 b14 a5
    R2(ED) a1 b22 b23 a4 a5
    R3(ACE) a1 a2 a3 b34 a5
  6. 根据 B→D ,对上表进行处理,由于属性列 B 上第1、3行相同均为 a2,所以将属性列 D 上的 b14 、b34 改为同一个符号 b14 (取行号最小值)。

    A B C D E
    R1(ABC) a1 a2 a3 b14 a5
    R2(ED) a1 b22 b23 a4 a5
    R3(ACE) a1 a2 a3 b14 a5
  7. 再根据 A→B (前面已经用过,F中的依赖关系是可以重复使用的),对上表进行处理,由于属性列 A上第1、2、3行相同均为a1,所以将属性列 B 上的 a2、b22、a2 改为同一个符号 a2

    A B C D E
    R1(ABC) a1 a2 a3 b14 a5
    R2(ED) a1 a2 b23 a4 a5
    R3(ACE) a1 a2 a3 b14 a5
  8. 根据 B→D ,对上表进行处理,由于属性列 B 上第1、2、3行相同均为 a2,所以将属性列 D 上的 b14 、a4、b14 改为同一个符号 a4

    A B C D E
    R1(ABC) a1 a2 a3 a4 a5
    R2(ED) a1 a2 b23 a4 a5
    R3(ACE) a1 a2 a3 a4 a5
  9. 最终,第1、3行成为a1a2a3a4a5。所以 D.ρ={ R1(ABC),R2(ED),R3(ACE)} 分解具有无损连接性。

【参考博客】https://www.cnblogs.com/bewolf/p/4443730.html

全部评论

相关推荐

头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
嵌入式的小白:不错啊,淘天也是挺好的,恭喜
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务