跳转至

数据库范式化

数据库范式化是一种设计关系型数据库的方法, 它可以减少数据冗余和异常, 提高数据完整性和一致性.

无范式(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\).

评论