一文搞懂数据库函数依赖及其Armstrong公理和引理
文章目录一、函数依赖1. 函数依赖2. 完全函数依赖和部分函数依赖3. 传递函数依赖4. 与函数依赖相关的概念(1). 候选键(2). 主键(3). 主属性(4). 外来键(5). 逻辑蕴含(6). 闭包二、函数依赖的 Armstrong 公理及其引理1. 函数依赖的 Armstrong 公理(1). 自反律(2). 增广律(3). 传递律2. 函数依赖的 Armstrong 的引理2.1 引理1
一、函数依赖
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 X→Y 。
白话:在一个关系 R 中,属性(组) Y 的值是由属性(组) X 的值所决定的 。又可以说,在关系 R 中,若两个元组的 X 属性值相同,那么这两个元组的 Y 属性值也相同。
为什么叫做函数依赖?
函数的定义:对于定义域中任意 x ,有且只有一个 y 与之对应。
属性之间的依赖:对于相同的 X 属性值,有且只有一个 Y 属性值与之对应。
本质:函数依赖的本质就是反应了 一个关系中属性之间的约束关系,或者依赖关系。函数依赖是一种数据依赖。
举例:
- U = { 学号,姓名,年龄,专业 }
- {学号} → \rightarrow → { 姓名,年龄,专业 }
属性A 属性B 属性C 1 2 7 2 5 7 1 2 7 3 4 5
- { 属性 A, 属性B } → \rightarrow → { 属性C }
函数依赖 分为 非平凡函数依赖 和 平凡函数依赖。
非平凡函数依赖:对
X
→
Y
X \rightarrow Y
X→Y ,但
Y
⊄
X
Y \not\subset X
Y⊂X,则称
X
→
Y
X \rightarrow Y
X→Y 为非平凡的函数依赖。也就是说 X 决定 Y,但是 Y 不在 X 中,这种叫做非平凡函数依赖。否则就是平凡函数依赖。
2. 完全函数依赖和部分函数依赖
定义:在关系 R(U) 中, 若 X → Y X \rightarrow Y X→Y,且对于 X 的任何真子集 X‘ 都有 X’ ↛ \nrightarrow ↛ Y,则称 Y 完全函数依赖于 X,记为: X → f Y X \stackrel{f}{\rightarrow} Y X→fY 。否则称 Y函数部分依赖于 X,记为 X → p Y X \stackrel{p}{\rightarrow} Y X→pY 。
白话:完全函数依赖就是说 属性组 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 X→Y,Y→Z ,且 Y ⊄ X , Z ⊄ Y , Z ⊄ X , Y ↛ X Y \not\subset X,Z \not\subset Y,Z \not\subset X,Y \nrightarrow X Y⊂X,Z⊂Y,Z⊂X,Y↛X,则称 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
X→Y,Y→Z,可以得到
X
→
Z
X \rightarrow Z
X→Z,但 不能说 Z 传递函数依赖于 X。
Insight:传递函数依赖存在着非受控冗余。
举例:
学生( 学号,姓名,系号,系主任 )
- {学号} → \rightarrow → { 系号 }
- {系号} → \rightarrow → { 系主任 }
- {学号} → \rightarrow → { 系主任 }
“系主任” 是传递依赖于 “学号” 的。
图示:
注:以上图片来自哈工大战德臣老师的PPT
4. 与函数依赖相关的概念
(1). 候选键
定义:设 K 为 R(U) 中的属性或属性组合,若 K → f U K \stackrel{f}\rightarrow U K→fU,则称 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 X→Y,则称 F 逻辑蕴含 X → Y X \rightarrow Y X→Y,或者说 X → Y X \rightarrow Y X→Y 是 F 的逻辑蕴含。记作 F ⊨ X → Y F \models X \rightarrow Y F⊨X→Y。
(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 Y⊆X⊆U,则 X → Y X \rightarrow Y X→Y 被 F 逻辑蕴含。
白话:若 属性集 Y 包含于 X,X 包含于 U,则 X → Y X \rightarrow Y X→Y ,则 X → Y X \rightarrow Y X→Y 。也就是说 如果属性集 Y 属于 X,则 X 可以决定 Y,又可以说 属性集 X 可以决定 他的属性 子集。(平凡函数依赖)
(2). 增广律
若 X → Y ∈ F X\rightarrow Y \in F X→Y∈F,且 Z ⊆ U Z \subseteq U Z⊆U,则 X Z → Y Z XZ \rightarrow YZ XZ→YZ 被 F 逻辑蕴含。
白话:如果 $ X\rightarrow Y $ 在 F 这个函数依赖集合中,另一属性(组) Z 是属性集 U 中的元素,那么从 F 中可以推导出 XZ 函数决定 YZ。
(3). 传递律
若 X → Y ∈ F X \rightarrow Y \in F X→Y∈F,且 Y → Z Y \rightarrow Z Y→Z,则 X → Z X \rightarrow Z X→Z 被 F 逻辑蕴含。
2. 函数依赖的 Armstrong 的引理
2.1 引理1
(1). 合并律
若
X
→
Y
X\rightarrow Y
X→Y 且
X
→
Z
X \rightarrow Z
X→Z,则
X
→
Y
Z
X \rightarrow YZ
X→YZ。
证明:根据增广律可以得到
X
→
X
Y
X \rightarrow XY
X→XY,
X
Y
→
Y
Z
XY \rightarrow YZ
XY→YZ,再根据传递律得到,
X
→
Y
Z
X \rightarrow YZ
X→YZ。
(2). 伪传递律
若
X
→
Y
X\rightarrow Y
X→Y 且
W
Y
→
Z
WY \rightarrow Z
WY→Z,则
X
W
→
Z
XW \rightarrow Z
XW→Z。
证明:证明方法依然是 增广律 和 传递律。
(3). 分解律
若
X
→
Y
X \rightarrow Y
X→Y 且
Z
⊆
Y
Z \subseteq Y
Z⊆Y,则
X
→
Z
X \rightarrow Z
X→Z。
证明:根据自反律可以得到
Y
→
Z
Y \rightarrow Z
Y→Z,再根据传递律,得证
X
→
Z
X \rightarrow Z
X→Z。
2.2 引理2
如果 A1,A2,… ,An是属性,则 X → A 1.... A n X \rightarrow A1....An X→A1....An 当且仅当对每个 Ai 有 X → A i ( 1 < = i < = n ) X \rightarrow Ai ( 1 <= i <= n ) X→Ai(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}
X⊆U,U=A1,A2,....,An,令:
X
F
+
X_{F}^{+}
XF+ = {Ai | 用 armstrong 三个公理 可从 F 导出
X
→
A
i
X \rightarrow Ai
X→Ai },称
X
F
+
X_{F}^{+}
XF+ 为 X 关于 F 的属性(集)闭包。
区分 闭包和属性(集)闭包:
闭包指的是 F的闭包,该集合包含的元素是函数依赖。
属性集闭包是 X属性(集) 关于 F 的属性(集)闭包,该集合包含的元素是属性。
(2). 引理3
若 从 F 这个函数依赖集合中可以用 Armstrong 公理 导出 X → Y X \rightarrow Y X→Y,当且仅当 Y ⊆ X F + Y \subseteq X_{F}^{+} Y⊆XF+。
解释:如果 Y 这个属性 在 X 关于 F 的属性(集)闭包中,那么 X → Y X \rightarrow Y X→Y 就在 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+⇔F⊆G+∧G⊆F+
(3) 引理5
每个函数依赖集 F 可被一个 其右端至多有一个属性的函数依赖集 G 覆盖。
2.5 最小覆盖
(1). 最小覆盖
F 满足:
- F 中每个函数依赖的右边部分都是单个属性;
- 对任何 X → A ∈ F X \rightarrow A \in F X→A∈F,有 F - X → A { X \rightarrow A } X→A 不等价于 F;
- 对任何 X → A ∈ F , Z ⊂ X X \rightarrow A \in F,Z \subset X X→A∈F,Z⊂X,( F- X → A ) ∪ Z → A {X \rightarrow A } ) \cup { Z \rightarrow A} X→A)∪Z→A 不等价于F。
则 F 为 最小覆盖 或者 最小依赖集。
解释:
对于第 2 点,如果去掉
X
→
A
{ X \rightarrow A }
X→A 这个函数依赖,那么从 F 中不能推导出
X
→
A
X \rightarrow A
X→A ,也就是说 F 中的每一个函数依赖都是必需的,一个不能少。
对于第 3 点,Z 是 函数依赖的 左边部分 的一个子集,如果去掉
X
→
A
X \rightarrow A
X→A 这个函数依赖,加上 X 子集
Z
→
A
Z \rightarrow A
Z→A 的依赖依然不等价于F,即
X
→
A
X \rightarrow A
X→A 是不能由
Z
→
A
Z\rightarrow A
Z→A 代替的。
(2). 定理
每个函数依赖集 F 都有等价的最小覆盖 F‘。
更多推荐
所有评论(0)