# 函数依赖的概念
函数依赖是关系模式中各个属性之间的一种依赖关系
例如可以通过一个学号值,得到唯一一个姓名值
== 属性(属性组)和属性(属性组)== 之间的推导关系便为函数依赖
# 平凡函数依赖
设一个关系为 , 和 为属性集 的子集,当 时,如果 ( 是 的子集),那么称 是平凡函数依赖
(学号,姓名)
姓名
# 非平凡函数依赖
设一个关系为 , 和 为属性集 的子集,若 且 ,那么称 是非平凡函数依赖
(学号,课程号)
个人成绩
# 完全函数依赖
一个关系模式 中, 和 为属性集 上的子集,如果 ,且对与 的任意一个真子集 Z 来说, 都不成立
- 为单个属性,此时 ,那么此时必为完全函数依赖
- 为属性组, 的任何一个子集 都不满足 ,那么此时为完全函数依赖
# 部分函数依赖
一个关系模式 中, 和 为属性集 上的子集,如果 ,且存在 的一个真子集 Z,满足 ,则称 部分依赖于
# 传递函数依赖
一个关系模式 中,, , 为属性集 上的子集,如果 , 不能反推出 ,且 ,这时候通过 可以推出 ,即 ,我们把 称为传递函数依赖
学号
所在系
系主任
# 与函数依赖相关的概念
- 候选键:对于关系 中的属性(组),如果 完全函数依赖于 ,即 中的所有属性一起才能决定 ,则称 为 的候选键
- 主键:若有多个候选键,则可任选一个作为主键
- 主属性:包含在任一候选键中的属性称为主属性,其他属性称为非主属性
- 外来键:一个关系的外键是另一关系的候选键
- 逻辑蕴含:设 是关系 中的一个函数依赖集合,、 是 的属性子集。如果能从 这个函数依赖集合中推导出 ,则称 逻辑蕴含 ,或者说 是 的逻辑蕴含。记作:
- 在已知的函数依赖集合中,能推导出一个新的函数依赖,则成这个新的函数依赖逻辑蕴含于函数依赖集合
- 闭包:被 逻辑蕴含的所有函数依赖集合称为 的闭包,记作
- 如果 ,则称 是一个全函数依赖族(函数依赖完备集)
# Armstrong 公理及引理
设 为 的一组函数依赖,记为
# 公理
- 自反律:若 ,则 被 逻辑蕴含
- 人话:平凡函数依赖
- 增广率:若 ,则 被 逻辑蕴含
- 传递率:若 ,则 被 逻辑蕴含
# 引理
# 引理 1
- 合并率:若 且 ,则
- 伪传递率:若 且 ,则
- 分解率:若 且 ,则
# 引理 2
如果 是属性,则 ,当且仅当
- 一组属性整体依赖于 ,等价于:其中每一个属性都分别依赖于
# 属性(集)闭包和引理 3
# 属性(集)闭包
对于 ,令 ,即可从 推导出 ,称 为 关于 的属性(集)闭包
- 属性集闭包的元素是属性
- 闭包的元素是函数依赖
# 引理 3
若从 这个函数依赖中,可以通过公理导出 ,则当且仅当
# 覆盖和引理 4、5
# 覆盖
对 上的两个函数依赖集合 ,如果 ,则称 和 也是等价的,也称 覆盖 或者 覆盖
# 引理 4
F^{+} = G^{+} \iff F \subseteq G^{+} \land G \subseteq F^
# 引理 5
每个函数依赖集 可被一个其右端至多有一个属性的函数依赖集 覆盖
人话解释:任何复杂的函数依赖集 ,都可以用一个更简单的依赖集 来代替,而且这个 有一个特点: 它的每一条规则,右边都只有一个属性(比如 ,而不是 )
# (正则)最小覆盖
- 每条规则右边只有一个属性
- 不能有废话规则
- 每条规则左边属性不能多余
每个函数依赖集 都有等价的最小覆盖 F^