函数依赖
概述
函数依赖
-
设R(U)是属性集合U={A1,A2,…,An}上的一个关系模式,X, Y是U上的两个子集,若对R(U)的任意一个可能的关系r, r中不可能有两个元组满足在X中的属性值相等而在Y中的属性值不等,则称“X函数决定Y”或“Y函数依赖于X”, 记作X → \rightarrow →Y。
-
示例:
-
U={学号,姓名,年龄,班号,班长,课号,成绩}
- 学号 → \rightarrow →{姓名,年龄}
- 班号 → \rightarrow →班长
- {学号,课号} → \rightarrow →成绩
-
通过表格来看
-
-
注:函数依赖的分析取决于对问题领域的限定和分析,取决于对业务规则的正确理解。
- 例如:问题领域中,学生是没有重名的,则有:“年龄”和“家庭住址”都函数依赖于 “姓名”。而在另一个问题领域中,学生是有重名的,则上述函数依赖是不成立的。
函数依赖的特性
- 对X → \rightarrow →Y,但Y ∉ \notin ∈/X, 则称X → \rightarrow →Y为非平凡的函数依赖;
- 若X → \rightarrow →Y,则任意两个元组,若X上值相等,则Y上值必然相等,则称X为决定因素;
- 若X → \rightarrow →Y ,Y → \rightarrow →X, 则记作X ↔ \leftrightarrow ↔Y;
- 若Y不函数依赖于X,则记作X ↛ \nrightarrow ↛ Y;
- X → \rightarrow →Y,有基于模式R的,则要求对任意的关系r成立;有基于具体关系r的,则要求对某一关系r成立;
- 如一关系r的某属性集X, r中根本没有X上相等的两个元组存在,则X → \rightarrow →Y恒成立;
完全与传递
部分或完全函数依赖
-
在R(U)中,若X → \rightarrow →Y并且对于X的任何真子集X’都有X不依赖:X ↛ \nrightarrow ↛ Y, 则称Y完全函数依赖于X, 记为:X完全依赖:X → f \rightarrow^f →f Y, 否则称Y部分函数依赖于X, 记为:X → p \rightarrow^p →p Y
-
示例:
-
U={学号,姓名,年龄,班号,班长,课号,成绩}
- {学号,课号} → f \rightarrow^f →f U
- {学号,课号} → p \rightarrow^p →p姓名
- {学号,课号} → f \rightarrow^f →f成绩
-
员工(员工码,姓名,出生日期,联系电话, 最后学历,毕业学校,培训日期,培训内容)
- {员工码,培训日期} → f \rightarrow^f →fU;
- {员工码,培训日期} → p \rightarrow^p →p {姓名,出生日期};
-
传递函数依赖
- 在R(U)中,若X → \rightarrow →Y,Y → \rightarrow →Z 且Y ∉ \notin ∈/X, Z ∉ \notin ∈/Y,Z ∉ \notin ∈/X, Y ↛ \nrightarrow ↛X, 则称Z传递函数依赖于X。
- 示例
- U={学号,姓名,年龄,班号,班长,课号,成绩}
- 学号 → \rightarrow →班号 ;班号 → \rightarrow →班长
- 即:学号 → \rightarrow →班长
- 注:“班长”是传递依赖于“学号”的。
- 学生(学号,姓名,系号,系主任)
- 学号 → \rightarrow →系号; 系号 → \rightarrow →系主任
- 即:学号 → \rightarrow →系主任
- 注:“系主任”是传递依赖于“学号”的。
- U={学号,姓名,年龄,班号,班长,课号,成绩}
其余概念
候选键
- 设K为R(U)中的属性或属性组合,若K → f \rightarrow^f →f U, 则称K为R(U)上的候选键(Candidate Key)。
- 说明:
- 可任选一候选键作为R的主键(Primary Key);
- 包含在任一候选键中的属性称主属性(Prime Attribute),其他属性称非主属性;
- 若K是R的一个候选键,K ∈ \in ∈S, 则称S为R的一个超键(Super Key)。
外来键
- 若R(U)中的属性或属性组合X并非R的候选键,但X却是另一关系的候选键,则称X为R的外来键(Foreign Key),简称外键。
- 示例:R={合同号,合同名,签订日期,
供应商名
}、S={供应商名
,地址,执照号,法人代表}- 合同号
→
f
\rightarrow^f
→f {合同号,合同名,签订日期,
供应商名
} - 供应商名
→
f
\rightarrow^f
→f {
供应商名
,地址,执照号,法人代表}
- 合同号
→
f
\rightarrow^f
→f {合同号,合同名,签订日期,
逻辑蕴涵
- 设F是关系模式R(U)中的一个函数依赖集合,X, Y是R的属性子集,如果从F中的函数依赖能够推导出X → \rightarrow →Y,则称F逻辑蕴涵X → \rightarrow →Y, 或称X → \rightarrow →Y是F的逻辑蕴涵。记作F ⊨ \vDash ⊨ X → \rightarrow →Y。
- 说明:
- 设F是关系模式R(U)的函数依赖集, X → \rightarrow →Y是一个函数依赖,若对R中的每个满足F的关系r, 能够用形式逻辑推理的方法推出r也满足X → \rightarrow →Y,则称F ⊨ \vDash ⊨ X → \rightarrow →Y。
- 若满足F的每个关系均满足X → \rightarrow →Y,则说F逻辑蕴涵X → \rightarrow →Y;
闭包
-
被F逻辑蕴涵的所有函数依赖集合称为F的闭包(Closure),记作 F + F^+ F+。
-
说明:
- 若 F + F^+ F+=F, 则说F是一个全函数依赖族(函数依赖完备集)。
-
示例:设R=ABC,F={AB,BC},则F+的组成如下(即还可推出如下依赖关系)
- (1) X包含A,而Y任意:如ABC → \rightarrow →AB,A → \rightarrow →C,AB → \rightarrow →BC,…
- (2) X包含B,但不含A, 且Y不含A:如BC → \rightarrow →B,B → \rightarrow →C,B → \rightarrow → ∅ \emptyset ∅ ,…
- (3)X → \rightarrow → Y是C → \rightarrow → C或C → \rightarrow → ∅ \emptyset ∅
公理和定理
[Armstrong公理] 设R(U)是属性集U={A1,A2,…,An}上的一个关系模式,F为R(U)的一组函数依赖,记为R(U, F), 则有如下规则成立:
- [A1]自反律(Reflexivity rule):若Y ⫅ \subseteqq ⫅X ⫅ \subseteqq ⫅U, 则X → \rightarrow →Y被F逻辑蕴涵。
- [A2]增广律(Augmentation rule):若X → \rightarrow →Y ∈ \in ∈F, 且Z ⫅ \subseteqq ⫅U, 则XZ → \rightarrow →YZ被F逻辑蕴涵。
- [A3]传递律(Transtivity rule):若X → \rightarrow →Y ∈ \in ∈F, 且Y → \rightarrow →Z, 则X → \rightarrow →Z被F逻辑蕴涵
[引理] 还可推出如下结论:
- (a) 合并律(Union Rule):若X → \rightarrow →Y且X → \rightarrow →Z, 则X → \rightarrow →YZ。
- (b) 伪传递律(Pseudo Transitivity):若X → \rightarrow →Y且WY → \rightarrow →Z, 则XW → \rightarrow →Z。
- © 分解律(Decomposition Rule):若X → \rightarrow →Y且Z ⫅ \subseteqq ⫅Y, 则X → \rightarrow →Z。
属性(集)闭包
- 对R(U, F), X ⫅ \subseteqq ⫅U, U = { A1,A2,…,An}, 令: X F + X^+_F XF+= { Ai | 用 A1,A2,A3可从F导出X → \rightarrow →Ai} 称 X F + X^+_F XF+为X关于F的属性(集)闭包。
- 注:显然X ⫅ \subseteqq ⫅ X F + X^+_F XF+。
计算一属性集关于一组函数依赖的属性闭包。
-
Input:有限属性集合U, U上的函数依赖集合F, 及U的子集X
-
Output:X关于F的属性闭包X+, 记为 X F + X^+_F XF+。
-
Method:按下列规则递归计算属性序列X(0), X(1),…
- 令X(0)=X, i=0
- B = {A | ( ∃ \exists ∃V)( ∃ \exists ∃W)(V → \rightarrow →W ∈ \in ∈F ∧ \wedge ∧ V ⫅ \subseteqq ⫅X(i) ∧ \wedge ∧ A ⫅ \subseteqq ⫅W)}
- X(i+1)=B ⋃ \bigcup ⋃X(i)
- If X(i+1) ≠ \neq =X(i) then i=i+1;goto 2.
- X F + X^+_F XF+= X(i), 算法终止。
-
示例:已知 R(U, F), U={A, B, C, D, E}, F={AB → \rightarrow →C, B → \rightarrow →D, C → \rightarrow →E, EC → \rightarrow →B, AC → \rightarrow →B}。 求: ( A B ) F + (AB)^+_F (AB)F+
- (1) X(0) ={A, B}
- (2) 由AB → \rightarrow →C, B → \rightarrow →D:X(1) = X(0) ⋃ \bigcup ⋃ {C, D} = {A, B, C, D}
- (3) 由C → \rightarrow →E, AC → \rightarrow →B:X(2) = X(1) ⋃ \bigcup ⋃ { E }= {A, B, C, D, E}
- (4) 由EC → \rightarrow →B:X(3) = X(2) ⋃ \bigcup ⋃ ∅ \emptyset ∅= {A, B, C, D, E}
- (5) 因为X(3) = X(2),所以 ( A B ) F + (AB)^+_F (AB)F+ = {A, B, C, D, E}。
最小覆盖
覆盖(Cover)
- 对R(U)上的两个函数依赖集合F、G, 如果 F + F^+ F+= G + G^+ G+,则称F和G是等价的,也称F覆盖G或者G覆盖F。
- [引理]: F + F^+ F+= G + G^+ G+ ↔ \leftrightarrow ↔ F ⫅ \subseteqq ⫅ G + G^+ G+ ∧ \wedge ∧ G ⫅ \subseteqq ⫅ F + F^+ F+
[定理]:每个函数依赖集F可被一个其右端至多有一个属性的函数依赖之集G覆盖。
[引理]:最小覆盖若F满足以下条件,则称F为最小覆盖(minimal Cover)或最小依赖集(minimal set of Functional Depandency):
-
- F中每个函数依赖的右部是单个属性;
-
- 对任何X → \rightarrow →A ∈ \in ∈F, 有F − - −{ X → \rightarrow →A }不等价于F;
-
- 对任何X → \rightarrow →A ∈ \in ∈F, Z ⊂ \subset ⊂X, ( F − - −{ X → \rightarrow →A }) ⋃ \bigcup ⋃ {Z → \rightarrow →A}不等价于F。
[定理]:每个函数依赖集F都有等价的最小覆盖F’。