数据库范式化
数据库范式化是一种设计关系型数据库的方法, 它可以减少数据冗余和异常, 提高数据完整性和一致性.
无范式 (Unnormalized form, UNF)
不满足 1NF.
第一范式 (1NF)
作用: 使属性不可再分.
每个字段都是不可再分的最小数据单元.
第二范式 (2NF)
作用: 消除部分依赖.
满足第一范式, 且所有非候选键的属性都完全函数依赖于候选键.
函数依赖 (Functional dependency)
若确定了属性 \(X\) 的值必定能确定对应属性 \(Y\) 的值, 则 \(Y\) 函数依赖于 \(X\), 写作 \(X \rightarrow Y\). 比如:
\[
系名 \rightarrow 系主任 \\
(学号, 课名) \rightarrow 分数
\]
假设 X 为一个属性集:
- 完全依赖: \(X \rightarrow Y\), 但不依赖于 \(X\) 下面的任何子集.
- 部分依赖: \(X \rightarrow Y\) 且 \(Y\) 不完全依赖于 \(X\).
若依赖关系如下:
\[
员工号 \rightarrow 部门 \\
(员工号, 员工姓名) \rightarrow 部门
\]
则 部门
完全依赖于 员工号
, 部分依赖于 (员工号, 员工姓名)
.
第三范式 (3NF)
作用: 消除传递依赖.
满足第二范式, 且没有非候选键属性传递性依赖于候选键本身.
传递性依赖 (Transitive dependency)
若 \(A \rightarrow B, B \rightarrow C\), 则 \(C\) 通过 \(B\) 传递依赖于 \(A\).