【数据库】— 无损连接、Chase算法
- Chase算法
- Chase算法举例
- 一种简便方法:分解为两个模式时
- 无损连接和函数依赖的一个简单例子
Chase算法
形式化定义:
- 构造一个 k k k行 n n n列的表格,每行对应一个模式 R i ( 1 ≤ i ≤ k ) Ri (1≤i ≤ k) Ri(1≤i≤k),每列对应一个属性 A j ( 1 ≤ j ≤ n ) Aj( 1≤j≤ n) Aj(1≤j≤n),若 A j Aj Aj在 R i Ri Ri中,则在表格的第 i i i行第 j j j列处填上 a j aj aj,否则填上符号 b i j bij bij
- 检查
F
F
F的每个
F
D
FD
FD,并修改表格中的元素,方法如下:
- 对于F中的函数依赖
X
→
Y
X→Y
X→Y,若表格中有两行在
X
X
X分量上相等,在
Y
Y
Y分量
上不相等,则修改 Y Y Y:- 若 Y Y Y的分量中有一个 a j aj aj,则另一个也修改为 a j aj aj;
- 如果没有 a j aj aj,则用其中一个 b i j bij bij替换另一个符号( i i i是所有 b b b中最小的行数) ,一直到表格不能修改为止
- 对于F中的函数依赖
X
→
Y
X→Y
X→Y,若表格中有两行在
X
X
X分量上相等,在
Y
Y
Y分量
- 若修改后,表格中有一行是全
a
a
a,即
a
1
a
2
…
a
n
a1a2…an
a1a2…an,则
p
p
p相对于
F
F
F是无损连接的分解,否则不是
举例:
关系模式: R ( A , B , C , D , E ) 分解: R 1 ( A , D ) , R 2 ( A , B ) , R 3 ( B , E ) , R 4 ( C , D , E ) , R 5 ( A , E ) 函数依赖: F = { A → C , B → C , C → D , D E → C , C E → A } 判断 R 分解为 p = R 1 , R 2 , R 3 , R 4 , R 5 是否是无损连接的分解 关系模式: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是否是无损连接的分解
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。
⑦ 通过上述的修改,使第三行成为 a 1 a 2 a 3 a 4 a 5 a1a2a3a4a5 a1a2a3a4a5,则算法终止。且分解具有无损连接性。
Chase算法示例部分参考链接