(5)Armstrong公理系统、无损连接和有损连接
-
-
-
- 函数依赖及其推导规则
-
- [三条基本公理(Armstrong 公理)](#三条基本公理(Armstrong 公理))
- 由公理推导的推论(常用规则)
- 无损连接和有损连接
-
-
函数依赖及其推导规则
函数依赖的推导规则属于Armstrong 公理系统,是关系数据库中推导函数依赖、分析数据依赖关系的理论基础。以下是核心规则的详细说明:
三条基本公理(Armstrong 公理)
-
自反律(Reflexivity Rule)
定义 :若属性集 Y ⊆X ⊆U (U 是关系的所有属性集),则 X →Y 必然成立。
公式 :Y ⊆X ⟹X →Y
示例 :若 X ={A ,B ,C },Y ={A ,B }(Y ⊆X ),则 {A ,B ,C }→{A ,B} 成立。
-
增广律(Augmentation Rule)
定义 :若 X →Y 成立,对任意属性集 Z ⊆U ,则 XZ →YZ 成立("增广" 指在依赖两边同时添加属性集 Z)。
公式 :X →Y ⟹XZ →YZ
示例 :若 {A }→{B } 成立,则 {A ,C }→{B ,C} 也成立。
-
传递律(Transitivity Rule)
定义 :若 X →Y 且 Y →Z 成立,则 X →Z 成立(依赖关系可通过中间属性 Y 传递)。
公式 :X →Y ∧Y →Z ⟹X →Z
示例 :若 {A }→{B } 且 {B }→{C },则 {A }→{C} 成立。
由公理推导的推论(常用规则)
-
合并规则(Union Rule)
定义 :若 X →Y 且 X →Z 成立,则 X →YZ 成立(将两个依赖的右部 "合并" 为属性组)。
公式 :X →Y ∧X →Z ⟹X →YZ
示例 :若 {A }→{B } 且 {A }→{C },则 {A }→{B ,C} 成立。
-
分解规则(Decomposition Rule)
定义 :若 X →YZ 成立,则 X →Y 且 X →Z 成立(将依赖的右部 "分解" 为单个属性)。
公式 :X →YZ ⟹X →Y ∧X →Z
示例 :若 {A }→{B ,C } 成立,则 {A }→{B } 且 {A }→{C} 成立。
-
伪传递规则(Pseudotransitivity Rule)
定义 :若 X →Y 且 WY →Z 成立,则 WX →Z 成立(传递律的扩展,左部添加属性集 W)。
公式 :X →Y ∧WY →Z ⟹WX →Z
示例 :若 {A }→{B } 且 {C ,B }→{D },则 {C ,A }→{D} 成立。
-
复合规则(Composition Rule)
定义 :若 X →Y 且 W →Z 成立,则 XW →YZ 成立(两个依赖的左部和右部分别 "复合")。
公式 :X →Y ∧W →Z ⟹XW →YZ
示例 :若 {A }→{B } 且 {C }→{D },则 {A ,C }→{B ,D} 成立。
无损连接和有损连接
定义
在关系数据库的模式分解中,无损连接 和有损连接是判断分解是否 "保留原数据完整性" 的核心概念,直接影响数据的可恢复性。
类型 | 定义 | 本质 |
---|---|---|
无损连接(Lossless Join) | 关系模式分解后,通过自然连接 可完全还原原关系模式,无信息丢失。 | 分解是 "可逆" 的,连接结果与原关系完全一致。 |
有损连接(Lossy Join) | 关系模式分解后,自然连接的结果包含原关系中没有的元组,或丢失原元组,导致信息失真。 | 分解是 "不可逆" 的,连接后数据出现冗余或缺失。 |
示例:直观理解无损与有损
- 无损连接示例
设关系模式 R (A ,B ,C ),函数依赖 F ={A →B},原关系数据如下:
A | B | C |
---|---|---|
1 | 2 | 3 |
4 | 5 | 6 |
将 R 分解为 R 1(A ,B ) 和 R 2(A ,C):
- R1:
A | B |
---|---|
1 | 2 |
4 | 5 |
- R2:
A | C |
---|---|
1 | 3 |
4 | 6 |
自然连接 R1⋈R2(按公共属性 A 连接):
A | B | C |
---|---|---|
1 | 2 | 3 |
4 | 5 | 6 |
结果与原 R 完全一致,因此是无损连接。
- 有损连接示例
设关系模式 R (A ,B ,C),无函数依赖,原关系数据如下:
A | B | C |
---|---|---|
1 | 2 | 3 |
4 | 2 | 5 |
将 R 分解为 R 1(A ,B ) 和 R 2(B ,C):
- R1:
A | B |
---|---|
1 | 2 |
4 | 2 |
- R2:
B | C |
---|---|
2 | 3 |
2 | 5 |
自然连接 R1⋈R2(按公共属性 B 连接):
A | B | C |
---|---|---|
1 | 2 | 3 |
1 | 2 | 5 |
4 | 2 | 3 |
4 | 2 | 5 |
其中 (1,2,5) 和 (4,2,3) 是原 R 中没有的元组,导致数据冗余,因此是有损连接。
无损连接的判定方法
- 分解为两个子模式的判定(最常用场景)
若关系模式 R 分解为 R 1 和 R 2,则无损连接的充要条件是:
(R 1∩R 2)→(R 1−R 2)或(R 1∩R 2)→(R 2−R1)
即公共属性集能决定其中一个子模式的非公共属性。
-
示例(无损连接):
R 1(A ,B )∩R 2(A ,C )={A },且 A →B (来自 F ),因此 A →(R 1−R 2)={B},满足条件,无损。
-
示例(有损连接):
R 1(A ,B )∩R 2(B ,C )={B },但无函数依赖 B →A 或 B →C,因此不满足条件,有损。
- 分解为多个子模式的判定(通用算法)
使用 "无损连接判定表法",步骤如下:
- 构造初始表:行对应原关系的属性,列对应分解的子模式,若属性属于子模式则填 ai ,否则填 bij。
- 按函数依赖 F 迭代修改表:若某行在依赖左部的属性全为 a ,则将右部属性也改为 a。
- 若最终表中存在一行全为 a,则分解是无损的。
关键结论
- 无损连接是模式分解的基本要求,否则会导致数据失真;
- 无损连接与 "保持函数依赖" 是两个独立概念:
- 无损连接保证 "数据可恢复";
- 保持函数依赖保证 "依赖可推导";
- 优秀的分解需同时满足两者(如 3NF、BCNF 的分解通常是无损的)。