计算机技术学习札记

数据库 4:函数依赖与模式分解

函数依赖

定义

\(R(U)\) 是属性集合 \(U=\{A_1, A_2, \cdots, A_n\}\) 上的一个关系模式,\(X\)\(Y\)\(U\) 的两个子集,若对 \(R(U)\) 的任何一个关系 \(r\) 都没有两个这样的元组,它们在 \(X\) 中的属性值相等而在 \(Y\) 中的属性值不等,则称 \(X\) 函数决定 \(Y\),或 \(Y\) 函数依赖 \(X\)。记作 \(X\to Y\)

例如:\(U=\{学号, 姓名, 年龄, 班号, 班长, 课号, 成绩\}\),则

  • \(学号\to\{姓名, 年龄\}\)

  • \(班号\to 班长\)

  • \(\{学号, 课号\}\to 成绩\)

如果 \(X\to Y\),但 \(Y\not\subset X\),称 \(X\to Y\) 是非平凡的函数依赖。

部分与完全函数依赖

\(X\to Y\),且对 \(X\) 的任何真子集 \(X'\) 都有 \(X'\not\to Y\),称 \(Y\) 完全函数依赖于 \(X\),记作 \(X\xrightarrow{f} Y\);否则称 \(Y\) 部分依赖于 \(X\),记作 \(X\xrightarrow{p} Y\)

传递函数依赖

\(R(U)\) 中,若 \(X\to Y\)\(Y\to Z\)\(Y\not\subset X\)\(Z\not\subset Y\)\(Z\not\subset X\)\(Y\not\to X\),则 \(X\to Z\),称 \(Z\) 传递依赖于 \(X\)

候选键

对于 \(R(U)\) 中的属性或属性组合,若 \(K\xrightarrow{f}U\),称 \(K\)\(R(U)\) 上的候选键。

任一候选键都可以作为 \(R\) 的主键。包含在任一候选键中的属性称为主属性,其他属性称为非主属性。

逻辑蕴涵

\(F\)\(R(U)\) 上的一个函数依赖集合,\(X\)\(Y\)\(R\) 的属性子集。如果从 \(F\) 中的函数依赖能推导出 \(X\to Y\),称 \(F\) 逻辑蕴涵 \(X\to Y\),记作 \(F\vDash X\to Y\)

闭包

\(F\) 逻辑蕴涵的所有函数依赖集合称为 \(F\) 的闭包,记作 \(F^+\)。如果 \(F=F^+\),则 \(F\) 是一个全函数依赖族,或称函数依赖完备集。

Armstrong's Axioms

设有关系模式 \(R(U)\)\(F\)\(R(U)\) 的一组函数依赖,有:

  • A1 自反律:若 \(Y\subseteq X\subseteq U\),则 \(X\to Y\)\(F\) 逻辑蕴涵。

  • A2 增广律:若 \(X\to Y\in F\)\(Z\subseteq U\),则 \(XZ\to YZ\)\(F\) 逻辑蕴涵。

  • A3 传递律:若 \(X\to Y\in F\)\(Y\to Z\),则 \(X\to Z\)\(F\) 逻辑蕴涵。

可以由它们推出这些次要结论:

  • 合并律:如果 \(X\to Y\),且 \(X\to Z\),则 \(X\to YZ\)

  • 伪传递律:如果 \(X\to Y\),且 \(WY\to Z\),则 \(XW\to Z\)

  • 分解律:若 \(X\to Y\),且 \(Z\subseteq Y\),则 \(X\to Z\)

最小覆盖

如果函数依赖集合 \(F\) 满足下面的条件,称 \(F\) 为最小覆盖或最小依赖集:

  • \(F\) 中每个函数依赖,右部都是单个属性。

  • \(\forall X\to A\in F\),有 \(F-\{X\to A\}\) 不等价于 \(F\)——即,\(F\) 是最小的,去掉 \(F\) 中的任何一个函数依赖都不行。

  • \(\forall X\to A\in F\)\(Z\subset X\),有 \((F-\{X\to A\})\cup\{Z\to A\}\) 不等价于 \(F\)——即,\(F\) 中的任何一个函数依赖都是最小的,不可以把它们的左部缩小。

构造最小依赖的方法:

  1. 分解——将 \(X\to AB\) 分解成 \(X\to A\)\(X\to B\),即所有依赖的右部都是单一属性。

  2. 去除左部多余的属性——逐一检查所有的依赖项的左部。对于左部不是单一属性的依赖项,例如 \(XY\to A\),判断 \(Y\) 是否多余。计算 \(X^+\),如果 \(X^+\) 包含 \(Y\),那么 \(Y\) 就是多余的,可以去掉。

  3. 去掉多余的依赖——对于每一个依赖项 \(X\to Y\),先去掉它,然后在其他项里求 \(X^+\),如果 \(X^+\) 包含 \(Y\),那么确实可以去掉它,否则就不能去掉。

关系范式

第一范式(1NF)

若关系模式 \(R(U)\) 中每个关系都不可分,则 \(R(U)\) 满足第一范式,记为 \(R(U)\in \text{1NF}\)。即,不存在复合属性的关系模式满足 1NF。

将含有复合属性的关系中的复合属性拆分,就可以得到满足 1NF 的关系。

第二范式(2NF)

如果满足 1NF 的关系模式 \(R(U)\),每一个非主属性完全函数依赖于候选键,则 \(R(U)\) 满足 2NF。

例如:

\[R(S\#, SN, SD, CN,G)\]

分别对应学号、姓名、班级、课程、成绩。候选键有 \(S\#\)\(CN\),但是因为 \(S\#\xrightarrow{f}\{SN, SD\}\),故 \(\{S\#, CN\}\xrightarrow{p}\{SN, SD\}\),所以不满足 2NF。

将原关系拆分成两个子关系 \(R_1(S\#, SN, SD)\)\(R_2(S\#, CN, G)\),这两个子关系都满足 2NF。

第三范式(3NF)

如果满足 2NF 的关系模式 \(R(U)\) 不存在这样的情况:对于候选键 \(X\),属性组 \(Y\) 和非主属性 \(A\)\(A\not\in X\)\(A\not\in Y\)\(Y\not\subset X\)\(Y\not\to X\),但有 \(X\to Y\)\(Y\to A\) 成立,则 \(R(U)\) 满足 3NF。

即,某些属性依赖一些非主属性,构成传递依赖。例如:学号 \(\to\) 系号 \(\to\) 系主任。这样的关系就不满足 3NF。

同样,通过拆分可以构造满足 3NF 的关系。

Boyce-Codd 范式(BCNF)

满足 1NF 的关系模式 \(R(U)\),对于任何 \(X\to Y\),当 \(Y\not\subset X\) 时,\(X\) 必含有候选键,则 \(R(U)\) 满足 BCNF。

即,有不依赖于候选键的函数依赖,就不满足 BCNF。

分解规则:将左侧不含候选键的函数依赖单独组成一个关系,将含有的组成另一关系。

模式分解

关系模式 \(R(U)\) 的分解指用 \(R\) 的一组子集 \(\rho=\{R_1(U_1), R_2(U_2), \cdots, R_k(U_k)\}\) 代替它。其中 \(U=U_1\cup U_2\cup\cdots\cup U_k\),并且任意两个子关系 \(U_i\)\(U_j\) 不同。

  • 无损连接性:\(R\)\(\rho\) 在数据内容方面是否等价。

  • 保持依赖性:\(R\)\(\rho\) 在数据依赖方面是否等价。