文章目录
- 1 概述
- 1.1 关系模式分解的好坏标准
- 2 无损连接验证算法
1 概述
1.1 关系模式分解的好坏标准
- 书上的算法太抽象了,咱不好理解,以下举例说明。
- 一个关系可以有很多种分解方法,如何判断分解的好与坏呢?
- ① 查询时的连接操作,是否会 丢失某些信息 或 多出某些信息。这引出了 无损连接 的概念
- ② 分解后的关系模式,是否 保持了原来的函数依赖。这是 保持函数依赖性 的问题
2 无损连接验证算法
关系模式 R( A 1 , A 2 , … … , A n A_1,A_2,……,A_n A1,A2,……,An),它的函数依赖集 F,以及分解 ρ = { R 1 , R 2 , … … , R n } ρ=\{R_1,R_2,……,R_n\} ρ={R1,R2,……,Rn}
矩阵法:
- 构造一个 i 行 j 列 的表,第 i 行对应关系模式 R i R_i Ri,第 j 列对应属性 A j A_j Aj。如果 A j ∈ R i A_j ∈ R_i Aj∈Ri,则在第 i 行第 j 列上放元素 a j a_j aj,否则放元素 b i j b_{ij} bij
- 重复考察 F 中的 每一个函数依赖,并修改表中的元素。如:取 F 中一个函数依赖 X -> Y,并在 X 列上寻找 元素相同的行,然后将这些行对应 Y 列的值,按下列情况的 顺序 进行修改
- ① 如果其中有 a j a_j aj,则将 b i j b_{ij} bij 改为 a j a_j aj
- ② 如果其中无 a j a_j aj,则全部改为 b i j b_{ij} bij(i 是这些行的行号最小值)
- 如果发现表中某一行变成了 a 1 , a 2 , … , a n a_1, a_2, …, a_n a1,a2,…,an,则分解 ρ 具有无损连接性;反之,不具有无损连接性。
举例:
U = { A , B , C , D , E } U=\{A,B,C,D,E\} U={A,B,C,D,E}
F = { A → C , B → C , C → D , D E → C , C E → A } F=\{A→C, B→C, C→D, DE→C, CE→A\} F={A→C,B→C,C→D,DE→C,CE→A}
ρ = { R 1 , R 2 , R 3 , R 4 , R 5 } ρ=\{R_1, R_2, R_3, R_4, R_5\} ρ={R1,R2,R3,R4,R5},其中 R 1 = A D , R 2 = A B , R 3 = B E , R 4 = C D E , R 5 = A E R_1=AD,R_2=AB,R_3=BE,R_4=CDE,R_5=AE R1=AD,R2=AB,R3=BE,R4=CDE,R5=AE
步骤1:构造 k行n列 的表…
R i R_i Ri | A | B | C | D | E |
---|---|---|---|---|---|
AD | a 1 a_1 a1 | b 12 b_{12} b12 | b 13 b_{13} b13 | a 4 a_4 a4 | b 15 b_{15} b15 |
AB | a 1 a_1 a1 | a 2 a_2 a2 | b 23 b_{23} b23 | b 24 b_{24} b24 | b 25 b_{25} b25 |
BE | b 31 b_{31} b31 | a 2 a_2 a2 | b 33 b_{33} b33 | b 34 b_{34} b34 | a 5 a_5 a5 |
CDE | b 41 b_{41} b41 | b 42 b_{42} b42 | a 3 a_3 a3 | a 4 a_4 a4 | a 5 a_5 a5 |
AE | a 1 a_1 a1 | b 52 b_{52} b52 | b 53 b_{53} b53 | b 54 b_{54} b54 | a 5 a_5 a5 |
步骤2:重复考察 F 中的每一个函数依赖…
步骤3:判断是否具有无损连接性
- 通过观察发现,只有 BE 具有无损连接性