> 文章列表 > 【数据库】— 无损连接、Chase算法、保持函数依赖

【数据库】— 无损连接、Chase算法、保持函数依赖

【数据库】— 无损连接、Chase算法、保持函数依赖

【数据库】— 无损连接、Chase算法

  • Chase算法
  • Chase算法举例
  • 一种简便方法:分解为两个模式时
  • 无损连接和函数依赖的一个简单例子

Chase算法

形式化定义:

  • 构造一个kkknnn列的表格,每行对应一个模式Ri(1≤i≤k)Ri (1≤i ≤ k)Ri(1ik),每列对应一个属性Aj(1≤j≤n)Aj( 1≤j≤ n)Aj1jn,若AjAjAjRiRiRi中,则在表格的第iii行第jjj列处填上ajajaj,否则填上符号bijbijbij
  • 检查FFF的每个FDFDFD,并修改表格中的元素,方法如下:
    • 对于F中的函数依赖X→YX→YXY,若表格中有两行在XXX分量上相等,在YYY分量
      上不相等,则修改YYY
      • YYY的分量中有一个ajajaj,则另一个也修改为ajajaj
      • 如果没有ajajaj,则用其中一个bijbijbij替换另一个符号(iii是所有bbb中最小的行数) ,一直到表格不能修改为止
  • 若修改后,表格中有一行是全aaa,即a1a2…ana1a2…ana1a2an,则ppp相对于FFF是无损连接的分解,否则不是
    举例:

关系模式:R(A,B,C,D,E)分解:R1(A,D),R2(A,B),R3(B,E),R4(C,D,E),R5(A,E)函数依赖:F={A→C,B→C,C→D,DE→C,CE→A}判断R分解为p=R1,R2,R3,R4,R5是否是无损连接的分解关系模式:R(A,B,C,D,E)\\\\ {}\\\\ 分解:R1(A,D), R2(A,B), R3(B,E), R4(C,D,E), R5(A,E)\\\\ {}\\\\ 函数依赖:F=\\{A→C, B→C, C→D, DE→C, CE→A\\}\\\\ {}\\\\ 判断R分解为p={R1,R2,R3,R4,R5}是否是无损连接的分解 关系模式:R(A,B,C,D,E)分解:R1(A,D),R2(A,B),R3(B,E),R4(C,D,E),R5(A,E)函数依赖:F={AC,BC,CD,DEC,CEA}判断R分解为pR1,R2,R3,R4,R5是否是无损连接的分解

Chase算法举例

① 构造一个初始的二维表若“属性”属于“模式”中的属性,则填aj,否则填bij

请添加图片描述

② 根据A→C,对上表进行处理,由于属性列A上第1、2、5行相同均为a1,所以将属性列C上的b13、b23、b53改为同一个符号b13(取行号最小值)。

请添加图片描述
③ 根据B→C,对上表进行处理,由于属性列B上第2、3行相同均为a2,所以将属性列C上的b13、b33改为同一个符号b13(取行号最小值)。

请添加图片描述
④ 根据C→D,对上表进行处理,由于属性列C上第1、2、3、5行相同均为b13,所以将属性列D上的值均改为同一个符号a4。

请添加图片描述
⑤ 根据DE→C,对上表进行处理,由于属性列DE上第3、4、5行相同均为a4a5,所以将属性列C上的值均改为同一个符号a3。

请添加图片描述
⑥ 根据CE→A,对上表进行处理,由于属性列CE上第3、4、5行相同均为a3a5,所以将属性列A上的值均改为同一个符号a1。

请添加图片描述

⑦ 通过上述的修改,使第三行成为a1a2a3a4a5a1a2a3a4a5a1a2a3a4a5,则算法终止。且分解具有无损连接性。

Chase算法示例部分参考链接

一种简便方法:分解为两个模式时

在这里插入图片描述

无损连接和函数依赖的一个简单例子

在这里插入图片描述