1 概述
1.1 关系模式: R < U , F > R<U,F> R<U,F>
关系模式 R < U , F > R<U,F> R<U,F>,其含义表示如下:
R:表名
U:列名的集合,如:列A,B,C,D,E,记作: U = { A B C D E } U=\{ABCDE\} U={ABCDE}
F:关系的集合,如:A→B,B→C,D→E,记作: F = { A → B , B → C , D → E } F=\{A→B,B→C,D→E\} F={A→B,B→C,D→E}
1.2 函数闭包 F + F^+ F+
定义:在关系模式 R < U , F > R<U,F> R<U,F> 中为 F F F 所逻辑蕴涵的函数依赖的全体叫作 F F F 的闭包,记作 F + F^+ F+
- 通俗理解 F + F^+ F+: F F F 中写了的 + + + 没写的
举例说明:
设 U = { A B C D E } , F = { A → B , B → C , D → E } U=\{ABCDE\},F=\{A→B,B→C,D→E\} U={ABCDE},F={A→B,B→C,D→E},则
F F F 中写了的有: A → B , B → C , D → E A→B,B→C,D→E A→B,B→C,D→E
F F F 中没写的有: A → C A→C A→C(根据 传递函数依赖 所得)
所以 F + = { A → B , B → C , D → E , F^+=\{A→B,B→C,D→E, F+={A→B,B→C,D→E, A → C A→C A→C } \} }
2 无损连接
- 定义:将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损连接分解。
2.1 两个子模式
定理:关系模式 R ( U , F ) R(U,F) R(U,F) 的一个分解 ρ = { R 1 ( U 1 , F 1 ) , R 2 ( U 2 , F 2 ) } ρ=\{R_{1}(U_1,F_1), R_{2}(U_2,F_2)\} ρ={R1(U1,F1),R2(U2,F2)},具有无损连接的充分必要条件是: U 1 ∩ U 2 → U 1 − U 2 ∈ F + 或 U 1 ∩ U 2 → U 2 − U 1 ∈ F + U_1∩U_2 → U_1 - U_2 ∈ F^+ 或 U_1 ∩ U_2 → U_2 - U_1 ∈ F^+ U1∩U2→U1−U2∈F+或U1∩U2→U2−U1∈F+
注意:这个定理只适用于分解为两个子模式的情况,分解为多个模式的时候不适用。
【例题】对给定的关系模式 R ( U , F ) , U = { A , B , C } , F = { A → B } R(U,F),U=\{A,B,C\},F=\{A→B\} R(U,F),U={A,B,C},F={A→B},有两个分解: ρ 1 = { A B , B C } 和 ρ 2 = { A B , A C } ρ_1=\{AB,BC\} 和 ρ_2=\{AB,AC\} ρ1={AB,BC}和ρ2={AB,AC}。请判断这两个分解是否无损。
ρ 1 ρ_1 ρ1 是否无损连接分析:
∵ A B ∩ B C = B , A B − B C = A , B C − A B = C AB ∩ BC = B,AB - BC = A,BC-AB = C AB∩BC=B,AB−BC=A,BC−AB=C。 F + = { A → B } F^+=\{A → B\} F+={A→B}
∴ B → A ∉ F + , B → C ∉ F + B → A ∉ F^+,B → C ∉ F^+ B→A∈/F+,B→C∈/F+,故 ρ 1 ρ_1 ρ1 为有损连接。
ρ 2 ρ_2 ρ2 是否无损连接分析:
∵ A B ∩ A C = A , A B − A C = B , A C − A B = C AB ∩ AC = A,AB - AC = B,AC-AB = C AB∩AC=A,AB−AC=B,AC−AB=C。 F + = { A → B } F^+=\{A → B\} F+={A→B}
∴ A → B ∈ F + A → B ∈ F^+ A→B∈F+,故 ρ 2 ρ_2 ρ2 为无损连接。
2.2 多个子模式
书上公式太复杂了,直接说解法过程。
步骤1:构造一个 i i i 行 j j j 列 的表,第 i i i 行对应关系模式 R i R_i Ri,第 j j j 列对应属性 A j A_j Aj。如果 A j ∈ R i A_j ∈ R_i Aj∈Ri,则在第 i i i 行第 j j j 列上放元素 a j a_j aj,否则放元素 b i j b_{ij} bij
步骤2:重复考察 F F F 中的 每一个函数依赖,并修改表中的元素。如:取 F F F 中一个函数依赖 X → Y X → Y X→Y,并在 X X X 列上寻找 元素相同的行,然后将这些行对应 Y Y 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 是这些行的行号最小值)
步骤3:比较表前后变化。如果发现表中某一行变成了 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:构造 i 行 j 列 的表…
A | B | C | D | E | |
---|---|---|---|---|---|
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | b23 | b24 | b25 |
BE | b31 | a2 | b33 | b34 | a5 |
CDE | b41 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | b53 | b54 | a5 |
步骤2:重复考察 F 中的每一个函数依赖,并修改表中的元素
步骤3:判断是否具有无损连接性
- 通过观察发现,只有 BE 具有无损连接性
3 保持函数依赖性
核心思想:F 分解的子集合并(∪)之后,仍能恢复原 F 的函数依赖关系(即: F 1 ∪ F 2 ∪ F n = F F_1∪F_2∪F_n=F F1∪F2∪Fn=F)。可分为以下四步,进行判断
第一步:求每个 F i Fi{} Fi。即 F F F 的子集
第二步:求原 F { } F\{\} F{} 中左侧元素的闭包,将其补齐在 F i { } Fi\{\} Fi{} 中
第三步:求 G(分解 ρ 关系模式的并集),判断 F F F 中的关系是否都在 G G G 中
第四步:如果在,则保持函数依赖,如果不在,就对其求闭包(在 G G G 中)
如果闭包包含它的右侧元素,则保持函数依赖,否则就不保持
【例题】R={A,B,C,D,E},F={B→A,D→A,A→E,AC→B},判断分解 ρ={R1{ABCE},R2{CD}} 是否保持函数依赖
第一步:求 F 1 F1{} F1 和 F 2 F2{} F2。题干中分成了两个,R1 和 R2
F 1 = { B → A , A → E , A C → B } F1=\{B→A,A→E,AC→B\} F1={B→A,A→E,AC→B}。依据:左右两侧元素是否都在 R 中?若是,则填入 F,若否,则不填
F 2 = { 空 } F2=\{空\} F2={空}
第二步:求 F F F 中左侧元素的闭包。目的是为了找出所有 传递函数依赖
【注1:过滤到 平凡函数依赖(自己 推导出 自己) 和 题干中已有依赖】
B + = { B A E } B^+ = \{BAE\} B+={BAE}。得到 B → E B→E B→E
D + = { D A E } D^+ = \{DAE\} D+={DAE}。得到 D → E D→E D→E
A + = { A E } A^+ = \{AE\} A+={AE}。
A C + = { A C E B } AC^+ = \{ACEB\} AC+={ACEB}。得到 A C → A , A C → E AC→A,AC→E AC→A,AC→E然后补齐在 F 1 和 F 2 中 F1 和 F2 中 F1和F2中,得到
【注2: F 1 F1 F1 是由 ABCE 4个元素组成, F 2 F2 F2 只由 CD 2 个元素组成】
F 1 = { B → A , A → E , A C → B , F1=\{B→A,A→E,AC→B, F1={B→A,A→E,AC→B, B → E , A C → A , A C → E B→E,AC→A,AC→E B→E,AC→A,AC→E } \} }
F 2 = { 空 } F2=\{空\} F2={空}
第三步:求 G(分解 ρ 关系模式的并集)
G = F 1 ∪ F 2 = { B → A , A → E , A C → B , B → E , A C → A , A C → E } G=F1 ∪ F2=\{B→A,A→E,AC→B,B→E,AC→A,AC→E\} G=F1∪F2={B→A,A→E,AC→B,B→E,AC→A,AC→E}
根据题干可知: F = { B → A , A → E , A C → B , D → A } F=\{B→A,A→E,AC→B,D→A\} F={B→A,A→E,AC→B,D→A}
通过观察发现, F F F 中只有 D → A D→A D→A 不在 G G G 中
第四步:判断 D G + D^+_G DG+ 是否有 A A A?
根据题干: D + = { D } D^+=\{D\} D+={D},没有包含它右侧的 A A A,所以不保持函数依赖