# 函数依赖的概念

函数依赖是关系模式中各个属性之间的一种依赖关系
例如可以通过一个学号值,得到唯一一个姓名值
== 属性(属性组)属性(属性组)== 之间的推导关系便为函数依赖

# 平凡函数依赖

设一个关系为 R(U)R(U)XXYY 为属性集 UU 的子集,当 XYX \to Y 时,如果 YXY \subsetneq XYYXX 的子集),那么称 XYX \to Y 是平凡函数依赖

  • (学号,姓名) \to 姓名

# 非平凡函数依赖

设一个关系为 R(U)R(U)XXYY 为属性集 UU 的子集,若 XYX \to YXBX \nsubseteq B,那么称 XYX \to Y 是非平凡函数依赖

  • (学号,课程号) \to 个人成绩

# 完全函数依赖

一个关系模式 R(U)R(U) 中,XXYY 为属性集 UU 上的子集,如果 XYX \to Y,且对与 XX 的任意一个真子集 Z 来说,ZYZ \to Y 都不成立

  • XX 为单个属性,此时 XYX \to Y,那么此时必为完全函数依赖
  • XX 为属性组,XX 的任何一个子集 ZZ 都不满足 ZYZ \to Y,那么此时为完全函数依赖

# 部分函数依赖

一个关系模式 R(U)R(U) 中,XXYY 为属性集 UU 上的子集,如果 XYX \to Y,且存在 XX 的一个真子集 Z,满足 ZYZ \to Y,则称 YY 部分依赖于 XX

# 传递函数依赖

一个关系模式 R(U)R(U) 中,XX, YY, ZZ 为属性集 UU 上的子集,如果 XYX \to YYY 不能反推出 XX,且 YZY \to Z,这时候通过 XX 可以推出 ZZ,即 XZX \to Z,我们把 XZX \to Z 称为传递函数依赖

  • 学号 \to 所在系 \to 系主任

# 与函数依赖相关的概念

  • 候选键:对于关系 R(U)R(U) 中的属性(组)KK,如果 UU 完全函数依赖于 KK,即 KK 中的所有属性一起才能决定 UU,则称 KKR(U)R(U) 的候选键
  • 主键:若有多个候选键,则可任选一个作为主键
  • 主属性:包含在任一候选键中的属性称为主属性,其他属性称为非主属性
  • 外来键:一个关系的外键是另一关系的候选键
  • 逻辑蕴含:设 FF 是关系 R(U)R(U) 中的一个函数依赖集合,XXYYRR 的属性子集。如果能从 FF 这个函数依赖集合中推导出 XYX \to Y,则称 FF 逻辑蕴含 XYX \to Y,或者说 XYX \to YFF 的逻辑蕴含。记作: FXYF \models X \rightarrow Y
    • 在已知的函数依赖集合中,能推导出一个新的函数依赖,则成这个新的函数依赖逻辑蕴含于函数依赖集合 FF
  • 闭包:被 FF 逻辑蕴含的所有函数依赖集合称为 FF 的闭包,记作 F+F^+
    • 如果 F+=FF^+ = F,则称 FF 是一个全函数依赖族(函数依赖完备集)

# Armstrong 公理及引理

FFR(U)R(U) 的一组函数依赖,记为 R(U,F)R(U, F)

# 公理

  • 自反律:若 YXUY \subseteq X \subseteq U,则 XYX \to YFF 逻辑蕴含
    • 人话:平凡函数依赖
  • 增广率:若 XYF,ZUX \to Y \subseteq F, Z \subseteq U,则 XZYZXZ \to YZFF 逻辑蕴含
  • 传递率:若 XYF,YZFX \to Y \in F, Y \to Z \in F,则 XZX \to ZFF 逻辑蕴含

# 引理

# 引理 1

  • 合并率:若 XYX \to YXZX \to Z,则 XYZX \to YZ
  • 伪传递率:若 XYX \to YWYZWY \to Z,则 XWZXW \to Z
  • 分解率:若 XYX \to YZYZ \subseteq Y,则 XZX \to Z

# 引理 2

如果 A1,A2...,AnA_1,A_2...,A_n 是属性,则 XA1A2...AnX \to A_1A_2...A_n,当且仅当 XAi(1in)X \to A_i ~ (1 \le i \le n)

  • 一组属性整体依赖于 XX,等价于:其中每一个属性都分别依赖于 XX

# 属性(集)闭包和引理 3

# 属性(集)闭包

对于 R(U,F),XU,U=A1A2...AnR(U,F),X \subseteq U,U=A_1A_2...A_n,令 XF+=AiX^+_F = A_i,即可从 FF 推导出 XAiX \to A_i,称 XF+X^+_FXX 关于 FF 的属性(集)闭包

  • 属性集闭包的元素是属性
  • 闭包的元素是函数依赖

# 引理 3

若从 FF 这个函数依赖中,可以通过公理导出 XYX \to Y,则当且仅当 YXF+Y \subseteq X_F^+

# 覆盖和引理 4、5

# 覆盖

R(U)R(U) 上的两个函数依赖集合 F,GF,G,如果 F+=G+F^+=G^+,则称 FFGG 也是等价的,也称 FF 覆盖 GG 或者 GG 覆盖 FF

# 引理 4

F^{+} = G^{+} \iff F \subseteq G^{+} \land G \subseteq F^

# 引理 5

每个函数依赖集 FF 可被一个其右端至多有一个属性的函数依赖集 GG 覆盖
人话解释:​​任何复杂的函数依赖集 FF,都可以用一个更简单的依赖集 GG 来代替​,而且这个 GG 有一个特点: 它的每一条规则,右边都只有一个属性​​(比如 ABA \to B,而不是 ABCA \to BC

# (正则)最小覆盖

  • 每条规则右边只有一个属性
  • 不能有废话规则
  • 每条规则左边属性不能多余
    每个函数依赖集 FF 都有等价的最小覆盖 F^