一、函数依赖

1. 函数依赖

定义:设 R(U)属性集合 U={ A1, A2, … , An } 上的一个关系模式,X, Y 是 U 上的两个子集,若对 R(U) 的任意一个可能的关系 r ,r 中不可能有两个元组满足在 X 中的属性值相等而在 Y 中的属性值不等,则称 “ X 函数决定 Y ” 或 “ Y函数依赖于X ” ,记作 X → Y X \rightarrow Y XY

白话:在一个关系 R 中,属性(组) Y 的值是由属性(组) X 的值所决定的 。又可以说,在关系 R 中,若两个元组的 X 属性值相同,那么这两个元组的 Y 属性值也相同

为什么叫做函数依赖?
函数的定义:对于定义域中任意 x ,有且只有一个 y 与之对应。
属性之间的依赖:对于相同的 X 属性值,有且只有一个 Y 属性值与之对应。

本质:函数依赖的本质就是反应了 一个关系中属性之间约束关系,或者依赖关系。函数依赖是一种数据依赖。

举例

  1. U = { 学号,姓名,年龄,专业 }
  • {学号} → \rightarrow { 姓名,年龄,专业 }
  1. 属性A属性B属性C
    127
    257
    127
    345
  • { 属性 A, 属性B } → \rightarrow { 属性C }

函数依赖 分为 非平凡函数依赖平凡函数依赖
非平凡函数依赖:对 X → Y X \rightarrow Y XY ,但 Y ⊄ X Y \not\subset X YX,则称 X → Y X \rightarrow Y XY 为非平凡的函数依赖。也就是说 X 决定 Y,但是 Y 不在 X 中,这种叫做非平凡函数依赖。否则就是平凡函数依赖。

2. 完全函数依赖和部分函数依赖

定义:在关系 R(U) 中, 若 X → Y X \rightarrow Y XY,且对于 X 的任何真子集 X‘ 都有 X’ ↛ \nrightarrow Y,则称 Y 完全函数依赖于 X,记为: X → f Y X \stackrel{f}{\rightarrow} Y XfY 。否则称 Y函数部分依赖于 X,记为 X → p Y X \stackrel{p}{\rightarrow} Y XpY

白话:完全函数依赖就是说 属性组 X 的所有属性一起(即完全)才能决定属性 Y,去掉任何一个属性都不行。相反的,部分函数依赖就是说 属性组 X 中的 部分属性就可以决定 Y ,用不着全部。

Insight:如果 属性(组)Y 部分函数依赖于 属性组 X,则说明属性组 X 中存在着对属性(组) Y 的非受控冗余。在设计数据库时应避免这种情况。(对应着 2NF )。

举例:

U = {学号,姓名,年龄,班号,班长,课号,成绩 }

  • {学号,课号} → f \stackrel{f}{\rightarrow} f U
  • { 学号,课号 } → p \stackrel{p}{\rightarrow} p { 姓名,年龄 }
  • { 学号,课号 } → p \stackrel{p}{\rightarrow} p { 成绩 }

解释:单个学号可以决定性别和年龄,单个学号就可以决定成绩。因此 姓 名 , 年 龄 { 姓名,年龄 } 成 绩 {成绩} 学 号 , 课 号 { 学号,课号 } 是部分函数依赖。

3. 传递函数依赖

定义:在 R(U) 中,若 X → Y , Y → Z X \rightarrow Y,Y \rightarrow Z XYYZ Y ⊄ X , Z ⊄ Y , Z ⊄ X , Y ↛ X Y \not\subset X,Z \not\subset Y,Z \not\subset X,Y \nrightarrow X YXZYZXYX,则称 Z 传递函数依赖于 X 。

白话:如果 X 函数决定 Y,Y 函数决定Z,且 Y、Z 都不包含于 X,Z 不包含于 Y ,Y 不能决定 X,则称 Z 传递函数依赖于 X。
注意!:若 X → Y , Y → Z X \rightarrow Y,Y \rightarrow Z XYYZ,可以得到 X → Z X \rightarrow Z XZ,但 不能说 Z 传递函数依赖于 X。

Insight:传递函数依赖存在着非受控冗余。

举例:

学生( 学号,姓名,系号,系主任 )

  • {学号} → \rightarrow { 系号 }
  • {系号} → \rightarrow { 系主任 }
  • {学号} → \rightarrow { 系主任 }
    “系主任” 是传递依赖于 “学号” 的。

图示:

illustration
注:以上图片来自哈工大战德臣老师的PPT

4. 与函数依赖相关的概念

(1). 候选键

定义:设 K 为 R(U) 中的属性或属性组合,若 K → f U K \stackrel{f}\rightarrow U KfU,则称 K 为 R(U) 上的候选键。

白话:对于关系 R(U) 中的属性(组)K,如果 U 完全函数依赖于 K,即 K 中的所有属性一起才能决定 U,则称 K 为 R(U) 的候选键。

(2). 主键

如果有多个候选键,则可以选择任一候选键作为主键

(3). 主属性

包含在任一候选键中的属性称为主属性,其他属性称为非主属性

(4). 外来键

若 R(U) 中的属性(组)X 不是 R 的候选键,却是另一关系 S(U) 的候选键,则称 X 为 R(U) 的外来键,简称外键

白话:一个关系的外键是另一关系的候选键。

(5). 逻辑蕴含

定义:设 F 是关系 R(U) 中的一个函数依赖集合,X、Y 是 R 的属性子集,如果能从 F 这个函数依赖集合中推导出 X → Y X \rightarrow Y XY,则称 F 逻辑蕴含 X → Y X \rightarrow Y XY,或者说 X → Y X \rightarrow Y XY 是 F 的逻辑蕴含。记作 F ⊨ X → Y F \models X \rightarrow Y FXY

(6). 闭包

定义 :被 F 逻辑蕴含的所有函数依赖集合称为 F 的闭包,记作 F + F ^ + F+

白话:也就是说,能从 函数依赖集 F 中推导出的所有函数依赖组成的集合,称为 F 的闭包。(学过泛函的话应该能感觉到有种完备的概念)。

如果 F + = F F ^ + = F F+=F,则称 F 是一个 全 函数依赖族。(函数依赖完备集)。

二、函数依赖的 Armstrong 公理及其引理

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

1. 函数依赖的 Armstrong 公理

(1). 自反律

Y ⊆ X ⊆ U Y \subseteq X \subseteq U YXU,则 X → Y X \rightarrow Y XY 被 F 逻辑蕴含。

白话:若 属性集 Y 包含于 X,X 包含于 U,则 X → Y X \rightarrow Y XY ,则 X → Y X \rightarrow Y XY 。也就是说 如果属性集 Y 属于 X,则 X 可以决定 Y,又可以说 属性集 X 可以决定 他的属性 子集。(平凡函数依赖)

(2). 增广律

X → Y ∈ F X\rightarrow Y \in F XYF,且 Z ⊆ U Z \subseteq U ZU,则 X Z → Y Z XZ \rightarrow YZ XZYZ 被 F 逻辑蕴含。

白话:如果 $ X\rightarrow Y $ 在 F 这个函数依赖集合中,另一属性(组) Z 是属性集 U 中的元素,那么从 F 中可以推导出 XZ 函数决定 YZ。

(3). 传递律

X → Y ∈ F X \rightarrow Y \in F XYF,且 Y → Z Y \rightarrow Z YZ,则 X → Z X \rightarrow Z XZ 被 F 逻辑蕴含。

2. 函数依赖的 Armstrong 的引理

2.1 引理1

(1). 合并律

X → Y X\rightarrow Y XY X → Z X \rightarrow Z XZ,则 X → Y Z X \rightarrow YZ XYZ
证明:根据增广律可以得到 X → X Y X \rightarrow XY XXY X Y → Y Z XY \rightarrow YZ XYYZ,再根据传递律得到, X → Y Z X \rightarrow YZ XYZ

(2). 伪传递律

X → Y X\rightarrow Y XY W Y → Z WY \rightarrow Z WYZ,则 X W → Z XW \rightarrow Z XWZ
证明:证明方法依然是 增广律 和 传递律。

(3). 分解律

X → Y X \rightarrow Y XY Z ⊆ Y Z \subseteq Y ZY,则 X → Z X \rightarrow Z XZ
证明:根据自反律可以得到 Y → Z Y \rightarrow Z YZ,再根据传递律,得证 X → Z X \rightarrow Z XZ

2.2 引理2

如果 A1,A2,… ,An是属性,则 X → A 1.... A n X \rightarrow A1....An XA1....An 当且仅当对每个 Ai 有 X → A i ( 1 < = i < = n ) X \rightarrow Ai ( 1 <= i <= n ) XAi(1<=i<=n)

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

(1). 属性(集)闭包定义

对 R(U, F) , X ⊆ U , U = A 1 , A 2 , . . . . , A n X \subseteq U, U = {A1, A2, .... , An} XU,U=A1,A2,....,An,令:
X F + X_{F}^{+} XF+ = {Ai | 用 armstrong 三个公理 可从 F 导出 X → A i X \rightarrow Ai XAi },称 X F + X_{F}^{+} XF+ 为 X 关于 F 的属性(集)闭包。

区分 闭包和属性(集)闭包:
闭包指的是 F的闭包,该集合包含的元素是函数依赖
属性集闭包是 X属性(集) 关于 F 的属性(集)闭包,该集合包含的元素是属性

(2). 引理3

若 从 F 这个函数依赖集合中可以用 Armstrong 公理 导出 X → Y X \rightarrow Y XY,当且仅当 Y ⊆ X F + Y \subseteq X_{F}^{+} YXF+

解释:如果 Y 这个属性 在 X 关于 F 的属性(集)闭包中,那么 X → Y X \rightarrow Y XY 就在 F 中,若 F 中存在 X 决定 Y,那 Y 一定在 X 关于 F 的属性(集)闭包中。

2.4 覆盖 和 引理4、5

(1) 覆盖

定义:对 R(U) 上的两个函数依赖集合 F、G,如果 F + = G + F^{+} = G^{+} F+=G+,则称 F 和 G 也是等价的,也称作 F 覆盖 G 或者 G 覆盖 F。

(2) 引理4

F + = G + ⇔ F ⊆ G + ∧ G ⊆ F + F^{+} = G^{+} \Leftrightarrow F \subseteq G^{+} \wedge G \subseteq F^{+} F+=G+FG+GF+

(3) 引理5

每个函数依赖集 F 可被一个 其右端至多有一个属性的函数依赖集 G 覆盖。

2.5 最小覆盖

(1). 最小覆盖

F 满足:

  1. F 中每个函数依赖的右边部分都是单个属性;
  2. 对任何 X → A ∈ F X \rightarrow A \in F XAF,有 F - X → A { X \rightarrow A } XA 不等价于 F;
  3. 对任何 X → A ∈ F , Z ⊂ X X \rightarrow A \in F,Z \subset X XAFZX,( F- X → A ) ∪ Z → A {X \rightarrow A } ) \cup { Z \rightarrow A} XA)ZA 不等价于F。

则 F 为 最小覆盖 或者 最小依赖集

解释:
对于第 2 点,如果去掉 X → A { X \rightarrow A } XA 这个函数依赖,那么从 F 中不能推导出 X → A X \rightarrow A XA ,也就是说 F 中的每一个函数依赖都是必需的,一个不能少。
对于第 3 点,Z 是 函数依赖的 左边部分 的一个子集,如果去掉 X → A X \rightarrow A XA 这个函数依赖,加上 X 子集 Z → A Z \rightarrow A ZA 的依赖依然不等价于F,即 X → A X \rightarrow A XA 是不能由 Z → A Z\rightarrow A ZA 代替的。

(2). 定理

每个函数依赖集 F 都有等价的最小覆盖 F‘。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐