简介:本文总结了数据库范式的概念、类型及范式分解的方法和技巧,旨在帮助读者理解和掌握规范化理论的核心知识点。
### 数据库设计与范式分解概述
#### 一、第一范式
在关系数据库的设计过程中, 第一范式 (First Normal Form, 1NF) 是最基本的要求之一,它规定了表中的每一列都必须是不可分割的基本数据项。简单来说,每个字段的数据内容应该保持原子性。
例如,在一个关系模式 `R` 中,如果所有属性都是基本的、不可再分的数据单元,则可以说该关系满足第一范式要求。
#### 二、函数依赖
在数据库规范化理论中, 函数依赖是核心概念之一。它描述了表中的列之间存在怎样的依赖关系。例如,在一个给定的关系模式 `R` 中,如果两个元组的属性值相等,则它们的另一些属性也必须相等。
- **超码**: 如果集合 `K` 是包含在关系模式 `R` 内的所有可能组合,并且可以唯一地标识每一个元组, 则称其为一个超码。
- **候选码**: 若某个超码中的任何子集都不再是超码,这个超码被称为候选键。
#### 三、函数依赖的闭包
函数依赖的闭包 `F+` 是指所有可以通过原集合推导出的函数依赖关系。计算方法通常基于Armstrong公理:
1. **自反律**: 如果属性集X包含Y,则有 X -> Y。
2. **增强律**: 若X->Y成立,那么对于任何Z, 也有 XZ ->YZ 成立。
3. **传递性**: 当且仅当X->Y 和 Y->Z 都成立时,可以推导出 X->Z。
此外还可以通过合并、分解和伪传递规则来扩展函数依赖的闭包集合。具体步骤如下:
- 初始化 `F+ = F`
- 对于每个函数依赖 f ∈ F+, 应用自反律和增强律得到新的规则并加入到`F+`中。
- 如果可以使用传递性合并两个已存在的依赖,则将结果添加至`F+`.
- 重复以上步骤直到不再有变化为止。
#### 四、Boyce-Codd范式 (BCNF)
**Boyce-Codd 范式**(BCNF) 是比第三范式更严格的规范化形式。如果在关系模式 `R` 中,每个非平凡的函数依赖 X->Y 都满足X是超码,则称该模式符合 BCNF。
例如,在关系模式 `instr_dept(ID, name, salary, dept_name, building, budget)` 中,由于存在 `dept_name -> building,budget` 的依赖关系而违反了BCNF规则。
#### 五、第三范式 (3NF)
在第三范式(Third Normal Form)中,要求所有非主属性完全函数地依赖于候选键或与之成直接映射。具体来说, 如果一个模式满足下列条件之一,则它符合3NF:
1. `X -> Y` 是平凡的;
2. X是R的一个超码;
3. 属性集Y中的每个属性都属于某个候选键。
满足BCNF的关系一定也满足第三范式,但反之则不一定成立。
#### 六、数据库设计目标
在进行数据库设计时, 主要追求以下几点:
1. **模式分解**:将复杂关系模式 `R` 分解成更简单的子关系集合{`R1,R2,...,Rn`}。
2. **无损连接性**: 确保这些子模式可以组合起来重建原始的完整数据结构而不丢失信息。
3. 保持函数依赖: 尽可能保留原有表中属性间的关联。
#### 七、闭包计算
给定一个属性集合`α`和一组函数依赖规则 `F`, 那么在 F 下 α 的闭包 `α+` 是指所有能由 α 函数决定的其他属性集。具体步骤如下:
- 初始化 result := ∅
- 当结果发生变化时,遍历每个函数依赖 f ∈ F, 如果 X ⊆ result,则将 Y 添加到result中。
#### 八、无关属性检测
在给定的一组函数依赖集合 `F` 中,如果移除一个特定的属性 A 后仍然能够推导出原有的所有其他关系,则称该属性为无关。具体来说,在 `X ->Y` 中, 如果 F 能够蕴含 `(F - { X-> Y }) ∪ {(X-A) -> (Y-A)}` ,则A是无关属性。
通过上述讨论可以看出,数据库设计与范式分解在提高数据一致性和减少冗余方面起着关键作用,并且有助于优化查询效率和维护性。