数据库关系模式核心概念详解:候选关键字与无损连接判断
本文详细讲解数据库关系模式中两个核心概念——候选关键字的选择和无损连接的判断方法,通过系统化的步骤和丰富的实例帮助读者彻底掌握这些关键技术。
1. 候选关键字的选择方法
1.1 候选关键字的定义
候选关键字是关系模式中能够唯一标识元组的最小属性集合,必须满足两个条件:
- 唯一性:能唯一标识关系中的每一个元组
- 极小性:不包含任何多余的属性
1.2 属性分类法
根据属性在函数依赖中出现的位置进行分类:
- L类:只出现在函数依赖左边的属性
- R类:只出现在函数依赖右边的属性
- LR类:既出现在左边又出现在右边的属性
- N类:不出现在任何函数依赖中的属性
关键规则:
- L类和N类属性必须包含在候选关键字中
- R类属性绝对不能包含在候选关键字中
- LR类属性可能包含在候选关键字中
1.3 求解步骤
示例分析
关系模式:R(A,B,C,D,E)
函数依赖集:F = {A→B, DE→B, CB→E, E→A, B→D}
步骤1:属性分类
- L类:C
- R类:无
- LR类:A, B, D, E
- N类:无
步骤2:基础集构建与闭包计算
- 基础集 = {C}(L类属性)
- C⁺ = {C} ≠ U
步骤3:与LR类属性组合
- 尝试 {C, E}:
- C⁺ = {C, E}
- 根据 E→A,加入A:{C, E, A}
- 根据 A→B,加入B:{C, E, A, B}
- 根据 B→D,加入D:{C, E, A, B, D} = U
- {C, E}⁺ = U ✓
步骤4:检查极小性
- {C}⁺ = {C} ≠ U
- {E}⁺ = {E, A, B, D} ≠ U
- 因此 {C, E} 是极小的候选关键字
其他候选关键字:{C, B}, {C, A}
2. 无损连接的判断方法
2.1 无损连接的定义
将关系模式分解为多个子模式后,通过自然连接操作能够完全恢复原始关系,不丢失任何信息,也不产生多余数据。
数学定义:对于分解ρ = {R₁, R₂, …, Rₖ},如果满足:
r = π_{R₁}(r) ⋈ π_{R₂}(r) ⋈ ... ⋈ π_{Rₖ}(r)
则分解ρ具有无损连接性。
2.2 表格法详解
表格法是判断无损连接最通用的方法。
初始表格构造规则
- 行:每个子模式对应一行
- 列:每个属性对应一列
- 填充规则:
- 属性在子模式中 → 填 aⱼ(j是属性下标)
- 属性不在子模式中 → 填 bᵢⱼ(i是行下标,j是属性下标)
表格修改规则
对每个函数依赖 X → Y:
- 在表格中寻找X列上值相同的行
- 在这些行中,如果Y列上的值不同:
- Y列中有
aⱼ→ 将其他行的Y列改为aⱼ - Y列中没有
aⱼ→ 用其中一个b符号统一
- Y列中有
判断标准
- 出现全a行(某行所有列都是
a)→ 无损连接 - 没有全a行 → 有损连接
2.3 完整示例演示
关系模式:R(A,B,C,D,E)
函数依赖集:F = {A→C, B→C, C→D, DE→C, CE→A}
分解:ρ = {R₁(A,D), R₂(A,B), R₃(B,E), R₄(C,D,E), R₅(A,E)}
步骤1:构造初始表格
| 行号 | 子模式 | A | B | C | D | E |
|---|---|---|---|---|---|---|
| 1 | R₁(A,D) | a₁ | b₁₂ | b₁₃ | a₄ | b₁₅ |
| 2 | R₂(A,B) | a₁ | a₂ | b₂₃ | b₂₄ | b₂₅ |
| 3 | R₃(B,E) | b₃₁ | a₂ | b₃₃ | b₃₄ | a₅ |
| 4 | R₄(C,D,E) | b₄₁ | b₄₂ | a₃ | a₄ | a₅ |
| 5 | R₅(A,E) | a₁ | b₅₂ | b₅₃ | b₅₄ | a₅ |
步骤2:根据函数依赖修改表格
应用A→C:
- 行1、2、5在A列上都有a₁
- C列值不同:b₁₃、b₂₃、b₅₃ → 统一为b₁₃
应用B→C:
- 行2、3在B列上都有a₂
- C列值不同:b₁₃、b₃₃ → 统一为b₁₃
应用C→D:
- 行1、2、3、5在C列上都有b₁₃
- D列值:行1有a₄,其他有b → 将b改为a₄
应用DE→C:
- 行3、4在D和E列上都有(a₄, a₅)
- C列值不同:b₁₃、a₃ → 将b₁₃改为a₃
应用CE→A:
- 行3、4在C和E列上都有(a₃, a₅)
- A列值不同:b₃₁、b₄₁ → 统一为b₃₁
经过多轮迭代,最终第2行变为:a₁, a₂, a₃, a₄, a₅(全a行)
步骤3:判断结果
出现全a行,因此分解具有无损连接性
3. 方法对比总结
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 属性分类法 | 候选关键字选择 | 系统化,不易遗漏 | 需要计算闭包 |
| 表格法 | 无损连接判断 | 通用性强,直观 | 过程繁琐 |
| 定理法 | 二分分解的无损连接判断 | 简单快速 | 只适用于两个子模式 |
4. 关键要点
- 候选关键字选择:牢记L类属性必须参与,通过闭包计算验证唯一性和极小性
- 无损连接判断:表格法中寻找"全a行"是核心目标
- 实际应用:在数据库设计中,通常要求分解既保持函数依赖又具有无损连接性
- 技巧提示:可以从包含最多属性的子模式开始检查,优先处理能产生a值的函数依赖
掌握这些核心概念和方法,对于数据库设计、范式分析和查询优化都具有重要意义。通过反复练习实例,能够加深理解并提高应用能力。
