在本文中,函数依赖是针对用户需要处理的数据集说的。
1.函数依赖:
设数据为
A
A
A,共有
n
n
n个属性(即维度),记为
A
=
A
1
,
⋯
,
A
n
A={A_1,⋯,A_n}
A=A1,⋯,An,设存在单射函数
f
:
x
→
y
f:x→y
f:x→y,其中
∀
x
∈
A
i
,
∀
y
∈
A
j
,
1
≤
i
,
j
≤
n
,
i
≠
j
∀x∈A_i,∀y∈A_j,1≤i,j≤n, i≠j
∀x∈Ai,∀y∈Aj,1≤i,j≤n,i=j。则
f
f
f是
A
A
A上的函数依赖,称
A
j
A_j
Aj函数依赖于
A
i
A_i
Ai,记为
A
i
→
f
A
j
A_{i}\overset{f}{\rightarrow}A_{j}
Ai→fAj,简写为
A
i
→
A
j
A_i→A_j
Ai→Aj。其中
A
i
A_i
Ai称为函数依赖
f
f
f的左部,
A
j
A_j
Aj称为函数依赖
f
f
f的右部。
例:苹果手机用户数据:({UDID},{IP地址},{当前emoji记录},{当前访问web域},{设备名称},{用户所在地区}),其中有函数依赖
f
1
f_1
f1为:
{
U
D
I
D
}
→
f
1
{
设
备
名
称
}
\left\{ UDID \right\}\overset{f_{1}}{\rightarrow}\left\{ 设备名称 \right\}
{UDID}→f1{设备名称};函数依赖
f
2
f_2
f2为:
{
I
P
地
址
}
→
f
2
{
用
户
所
在
地
区
}
\left\{ {IP地址} \right\}\overset{f_{2}}{\rightarrow}\left\{ 用户所在地区 \right\}
{IP地址}→f2{用户所在地区}。
设
A
1
,
⋯
,
A
n
{A_1,⋯,A_n}
A1,⋯,An的幂集为
A
n
A^n
An,则函数依赖可泛化(generalize)为如下定义:
∃
B
,
C
∈
A
n
∃B,C∈A^n
∃B,C∈An, 且
B
,
C
≠
ϕ
B,C≠ϕ
B,C=ϕ,
B
=
{
A
i
1
,
⋯
,
A
i
s
}
B = \left\{ A_{i_{1}},\cdots,A_{i_{s}} \right\}
B={Ai1,⋯,Ais},
C
=
{
A
j
1
,
⋯
,
A
j
t
}
C = \left\{ A_{j_{1}},\cdots,A_{j_{t}} \right\}
C={Aj1,⋯,Ajt},使得对于
∀
(
x
i
1
,
⋯
,
x
i
s
)
∈
B
\forall\left( x_{i_{1}},\cdots,x_{i_{s}} \right) \in B
∀(xi1,⋯,xis)∈B,
∀
(
x
j
1
,
⋯
,
x
j
t
)
∈
C
\forall\left( x_{j_{1}},\cdots,x_{j_{t}} \right) \in C
∀(xj1,⋯,xjt)∈C,单射函数
f
:
(
x
i
1
,
⋯
,
x
i
s
)
→
(
x
j
1
,
⋯
,
x
j
t
)
f:\left( x_{i_{1}},\cdots,x_{i_{s}} \right)\rightarrow\left( x_{j_{1}},\cdots,x_{j_{t}} \right)
f:(xi1,⋯,xis)→(xj1,⋯,xjt)成立,则
f
f
f是
A
A
A上的函数依赖,称
C
C
C函数依赖于
B
B
B。为区别起见,我们将上面的
A
i
→
A
j
A_i→A_j
Ai→Aj叫做单属性函数依赖。单属性函数依赖的特征是函数依赖的左部和右部都只有一个属性(即单属性)。
请注意,本文不考虑空集 ϕ ϕ ϕ的函数依赖,即不存在 A i → ϕ A_i→ϕ Ai→ϕ、 ϕ → A i \left. \phi\rightarrow A \right._{i} ϕ→Ai或 ϕ → ϕ ϕ→ϕ ϕ→ϕ,因此如无特殊说明,下面提及的幂集 A n A^n An均不包括空集。
2.函数依赖的性质:
(1)
A
i
A_i
Ai一定依赖于自身,即
A
i
→
A
i
A_i→A_i
Ai→Ai(自反性);
(2)设
A
1
,
⋯
,
A
n
{A_1,⋯,A_n}
A1,⋯,An的幂集为
A
n
A^n
An,若
B
,
C
∈
A
n
B,C∈A^n
B,C∈An且
B
⊂
C
B⊂C
B⊂C,则必有
C
→
B
C→B
C→B,此类函数依赖称为平凡函数依赖;如果
C
→
B
C→B
C→B且
B
⊄
C
B⊄C
B⊄C,则称此类函数依赖为非平凡函数依赖;
(3)若
B
,
C
,
D
∈
A
n
,
C
→
B
B,C,D∈A^n,C→B
B,C,D∈An,C→B且
C
→
D
C→D
C→D,则必有
C
→
B
D
C→BD
C→BD;
(4)若
B
,
C
,
D
∈
A
n
,
C
→
B
D
B,C,D∈A^n,C→BD
B,C,D∈An,C→BD,则必有
C
→
B
C→B
C→B且
C
→
D
C→D
C→D;
(5)若
B
,
C
∈
A
n
,
C
→
B
B,C∈A^n,C→B
B,C∈An,C→B,且对于任意
C
′
⊂
C
C'⊂C
C′⊂C,都有
C
′
↛
B
C'↛B
C′↛B,则称此类函数依赖为完全函数依赖;反之若存在
C
′
⊂
C
C'⊂C
C′⊂C使得
C
′
→
B
C'→B
C′→B,则称此类函数依赖为部分函数依赖;
(6)如果
A
i
→
A
j
A_i→A_j
Ai→Aj,则必有
A
j
→
A
i
(
1
≤
i
,
j
≤
n
,
i
≠
j
)
A_j→A_i(1≤i,j≤n,i≠j)
Aj→Ai(1≤i,j≤n,i=j)(对称性);
(7)若
A
i
→
A
j
,
A
j
→
A
k
A_i→A_j,A_j→A_k
Ai→Aj,Aj→Ak,则必有
A
i
→
A
k
(
1
≤
i
,
j
,
k
≤
n
,
i
,
j
,
k
A_i→A_k(1≤i,j,k≤n,i,j,k
Ai→Ak(1≤i,j,k≤n,i,j,k各不相同
)
)
)(传递性);
(8)传递性的推广:
B
,
C
,
D
∈
A
n
B,C,D∈A^n
B,C,D∈An,且
B
,
C
,
D
B,C,D
B,C,D各不相同,则
(
B
→
C
∧
C
→
D
)
⟹
B
→
D
(B→C∧C→D)⟹B→D
(B→C∧C→D)⟹B→D。
3.闭包:
数据A上的一组函数依赖的集合为 F = f 1 , ⋯ , f m F={f_1,⋯,f_m} F=f1,⋯,fm, A A A的一个属性 A i ( 1 ≤ i ≤ n ) A_i (1≤i≤n) Ai(1≤i≤n)在 F F F上利用函数依赖的性质(1)~(8)直接或间接推导出的所有 A i → A j ( A j ∈ A , 1 ≤ j ≤ n ) A_i→A_j (A_j∈A,1≤j≤n) Ai→Aj(Aj∈A,1≤j≤n)中,所有 A j A_j Aj属性的集合 { A j } \left\{ A_{j} \right\} {Aj}称为 A i A_i Ai在 F F F上的闭包,记为 A i + ( F ) A_i^+ (F) Ai+(F),其中 A i + ( F ) ∈ A n A_i^+ (F)∈A^n Ai+(F)∈An。
将闭包的定义推广一下,则可得到:对于 ∀ B ∈ A n ∀B∈A^n ∀B∈An, B B B在 F F F上利用函数依赖的性质(1)~(8)直接或间接推导出的所有 B → C ( C ∈ A n ) B→C(C∈A^n) B→C(C∈An)中,所有子集 C C C的集合 { C } \left\{ C \right\} {C}称为子集 B B B在 F F F上的闭包,记为 B + ( F ) B^+ (F) B+(F)。当 B = A B=A B=A时,该闭包可直接称为 F F F的闭包 A + ( F ) A^+ (F) A+(F)。
例:设
A
=
{
A
1
,
⋯
,
A
5
}
A = \left\{ A_{1},\cdots,A_{5} \right\}
A={A1,⋯,A5}上的一个函数依赖集合为
F
=
{
A
1
A
3
→
A
1
,
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
3
→
A
4
,
A
3
→
A
1
,
A
2
→
A
1
,
A
2
A
3
→
A
2
A
5
}
F = \left\{ A_{1}A_{3}\rightarrow A_{1},A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{1},A_{2}\rightarrow A_{1},A_{2}A_{3}\rightarrow A_{2}A_{5} \right\}
F={A1A3→A1,A3→A2,A1A3→A4,A3→A4,A3→A1,A2→A1,A2A3→A2A5},则
A
3
A_3
A3的函数依赖
F
F
F闭包为
A
3
+
(
F
)
=
{
A
1
,
A
2
,
A
3
,
A
4
,
A
5
}
A_{3}^{+}\left( F \right) = \left\{ {A_{1},A_{2},A_{3},A_{4},A_{5}} \right\}
A3+(F)={A1,A2,A3,A4,A5}。
证:由性质(1)的自反性:
A
3
→
A
3
A_3→A_3
A3→A3;由
F
F
F中的元素有
A
3
→
A
2
,
A
3
→
A
4
,
A
3
→
A
1
A_3→A_2,A_3→A_4,A_3→A_1
A3→A2,A3→A4,A3→A1;由性质(4),
A
2
A
3
→
A
2
A
5
A_2 A_3→A_2 A_5
A2A3→A2A5可推出
A
2
A
3
⟶
A
5
A_2 A_3⟶A_5
A2A3⟶A5;由性质(3),
A
3
→
A
3
,
A
3
→
A
2
A_3→A_3,A_3→A_2
A3→A3,A3→A2可推出
A
3
→
A
2
A
3
A_3→A_2 A_3
A3→A2A3;由传递性(7)得
A
3
→
A
5
A_3→A_5
A3→A5。综上所述,
A
3
A_3
A3闭包为
A
3
+
(
F
)
=
{
A
1
,
A
2
,
A
3
,
A
4
,
A
5
}
A_{3}^{+}\left( F \right) = \left\{ {A_{1},A_{2},A_{3},A_{4},A_{5}} \right\}
A3+(F)={A1,A2,A3,A4,A5}。
4.关系模式:
由数据 A = A 1 , ⋯ , A n A={A_1,⋯,A_n} A=A1,⋯,An和 A A A上一个函数依赖集合 F = f 1 , ⋯ , f m F={f_1,⋯,f_m} F=f1,⋯,fm构成的对(pair)结构称为关系模式,记为 R 〈 A , F 〉 R〈A,F〉 R〈A,F〉。
5.函数依赖的逻辑蕴含:
设数据 A = { A 1 , ⋯ , A n } A = \left\{ A_{1},\cdots,A_{n} \right\} A={A1,⋯,An}和 A A A上一个函数依赖集合 F F F,并且 B → C B→C B→C为 A A A上的一个函数依赖,其中 B , C ∈ A n B,C∈A^n B,C∈An,若 A A A在 F F F上利用函数依赖的性质(1)~(8)直接或间接推导出 B → C B→C B→C,则称 F F F逻辑蕴含 B → C B→C B→C,也称为 B → C B→C B→C能由 F F F推导,记为 F ↦ ( B → C ) F↦(B→C) F↦(B→C)。
请注意“逻辑蕴含”并不是说
B
→
C
B→C
B→C是
F
F
F的子集。
例如:
F
=
{
A
1
→
A
2
,
A
2
→
A
3
}
F = \left\{ A_{1}\rightarrow A_{2},A_{2}\rightarrow A_{3} \right\}
F={A1→A2,A2→A3}是
A
=
{
A
1
,
A
2
,
A
3
}
A = \left\{ A_{1},A_{2},A_{3} \right\}
A={A1,A2,A3}上的一个函数依赖集合,易知
(
A
1
→
A
3
)
∉
F
(A_1→A_3)∉F
(A1→A3)∈/F,但根据传递性,
F
↦
(
A
1
→
A
3
)
F↦(A_1→A_3)
F↦(A1→A3)。
又有在A上由F推导出的全部单属性函数依赖记为
A
1
→
A
2
,
A
1
→
A
3
,
A
2
→
A
3
,
A
1
→
A
1
,
A
2
→
A
2
,
A
3
→
A
3
,
A
2
→
A
1
,
A
3
→
A
1
,
A
3
→
A
2
{A_1→A_2,A_1→A_3,A_2→A_3,A_1→A_1,A_2→A_2,A_3→A_3,A_2→A_1,A_3→A_1,A_3→A_2}
A1→A2,A1→A3,A2→A3,A1→A1,A2→A2,A3→A3,A2→A1,A3→A1,A3→A2,共
n
×
n
=
3
×
3
n×n=3×3
n×n=3×3个元素如下图。同理,去掉空集后,
A
n
A^n
An包含
2
n
−
1
2^n-1
2n−1个元素,全部的函数依赖是
(
2
3
−
1
)
×
(
2
3
−
1
)
(2^3-1)×(2^3-1)
(23−1)×(23−1)个。
(参见集合论中的二元关系和闭包)
6.函数依赖的等价与覆盖:
(1)等价:数据A上的两个函数依赖集分别记为
F
F
F和
G
G
G,若
A
+
(
F
)
=
A
+
(
G
)
A^+ (F)=A^+ (G)
A+(F)=A+(G),则称
F
F
F和
G
G
G等价。记为
F
≡
G
F≡G
F≡G,请注意等价不代表
F
F
F和
G
G
G的元素相同。
(2)覆盖:数据
A
A
A上的两个函数依赖集分别记为
F
和
F和
F和G,若对于
G
G
G中的每一个函数依赖
B
→
C
(
B
,
C
∈
A
n
)
B→C(B,C∈A^n)
B→C(B,C∈An),都有
F
↦
(
B
→
C
)
F↦(B→C)
F↦(B→C),则称
F
F
F是
G
G
G的一个覆盖,记为
F
↦
G
F↦G
F↦G。如果
F
↦
G
F↦G
F↦G且
G
↦
F
G↦F
G↦F,则
F
≡
G
F≡G
F≡G。
7.最小覆盖(最小依赖集):
若数据
A
A
A上的一个函数依赖集合
F
F
F满足如下条件:
(1)
F
F
F中的每个函数依赖的右部只有唯一的属性
A
i
(
1
≤
i
≤
n
)
A_i (1≤i≤n)
Ai(1≤i≤n),即右部都是幂集
A
n
A^n
An中的单元素集合;
(2)
F
F
F中没有冗余的函数依赖,即不存在函数依赖
B
→
C
∈
F
(
B
,
C
∈
A
n
)
B→C∈F(B,C∈A^n)
B→C∈F(B,C∈An),使得
F
≡
F
−
{
B
→
C
}
F \equiv F - \left\{ B\rightarrow C \right\}
F≡F−{B→C}(其中
F
−
{
B
→
C
}
F - \left\{ B\rightarrow C \right\}
F−{B→C}为集合减法运算);
(3)
F
F
F中的每个函数依赖的左部都不存在多余属性,即
B
→
C
∈
F
B→C∈F
B→C∈F,
D
⊂
B
D⊂B
D⊂B,使得
F
≡
(
F
−
{
B
→
C
}
)
∪
{
D
→
C
}
F \equiv \left( {F - \left\{ B\rightarrow C \right\}} \right) \cup \left\{ D\rightarrow C \right\}
F≡(F−{B→C})∪{D→C};
则称
F
F
F为最小覆盖或最小依赖集。
最小覆盖性质:若 F F F为最小覆盖,则 F F F与任何一个与之等价的一个函数依赖集合 G G G相比,具有最小的函数依赖数。
8.无冗余覆盖:
如果函数依赖集合 F F F存在真子集 F ′ ⊂ F F'⊂F F′⊂F,使得 F ′ ⊂ F F'⊂F F′⊂F,则称 F F F是无冗余的。如果 F F F是函数依赖集合 G G G的一个覆盖且 F F F无冗余,则称 F F F是 G G G的一个无冗余覆盖。
9.外部属性:
设若数据A上的一个函数依赖集合 F F F,且函数依赖 B → C ∈ F ( B , C ∈ A n ) B→C∈F(B,C∈A^n) B→C∈F(B,C∈An),若 B = A i A j ( 0 ≤ i , j ≤ n , i ≠ j ) B=A_i A_j (0≤i,j≤n,i≠j) B=AiAj(0≤i,j≤n,i=j)且 ( F − { B → C } ) ∪ { A j → C } ≡ F \left( {F - \left\{ B\rightarrow C \right\}} \right) \cup \left\{ A_{j}\rightarrow C \right\} \equiv F (F−{B→C})∪{Aj→C}≡F,则称 A i A_i Ai在 B → C B→C B→C是左外部属性;若 C = A i A j ( 0 ≤ i , j ≤ n , i ≠ j ) C=A_i A_j (0≤i,j≤n,i≠j) C=AiAj(0≤i,j≤n,i=j)且 ( F − { B → C } ) ∪ { B → A j } ≡ F \left( {F - \left\{ B\rightarrow C \right\}} \right) \cup \left\{ B\rightarrow A_{j} \right\} \equiv F (F−{B→C})∪{B→Aj}≡F, 则称 A i A_i Ai在 B → C B→C B→C是右外部属性;
10.规范覆盖:
将最小覆盖所有的左部相同的函数依赖合并后得到的函数依赖集合称为规范覆盖。
规范覆盖的性质:
(1)右部都为单属性;
(2)左部不包含外部属性;
(3)为无冗余覆盖;
(4)对于给定的函数依赖集合,规范覆盖不是唯一的。
11.计算最小覆盖和规范覆盖的步骤:
(1)将
F
F
F中的每个函数依赖的右部分解为单属性;对于每个
B
→
C
∈
F
B→C∈F
B→C∈F且
C
=
C
1
⋯
C
k
(
k
>
1
)
C=C_1⋯C_k (k>1)
C=C1⋯Ck(k>1),且对于每个
C
i
(
1
≤
i
≤
k
)
C_i (1≤i≤k)
Ci(1≤i≤k),从
F
F
F去除
B
→
C
B→C
B→C,加上
B
→
C
i
B→C_i
B→Ci。
(2)删除
F
F
F中多余的函数依赖:对于每个
B
→
C
∈
F
B→C∈F
B→C∈F,令
G
=
F
−
(
B
→
C
)
G=F-(B→C)
G=F−(B→C),若
C
∈
B
+
(
G
)
C∈B^+ (G)
C∈B+(G),则从
F
F
F去除
B
→
C
B→C
B→C;
(3)删除
F
F
F中的每个函数依赖的左部多余的属性:对于每个
B
→
C
∈
F
B→C∈F
B→C∈F且
B
=
B
1
⋯
B
k
(
k
>
1
)
B=B_1⋯B_k (k>1)
B=B1⋯Bk(k>1),考察每个
B
i
(
1
≤
i
≤
k
)
B_i (1≤i≤k)
Bi(1≤i≤k),如果
C
∈
(
B
−
B
i
)
+
(
F
)
C∈(B-B_i )^+ (F)
C∈(B−Bi)+(F),则从
F
F
F去除
B
→
C
B→C
B→C,加上
(
B
−
B
i
)
→
C
(B-B_i)→C
(B−Bi)→C;
(4)经由(1)~(3)步后即生成最小覆盖,再将最小覆盖左部相同的项合并即得到规范覆盖。
例:设
A
=
{
A
1
,
⋯
,
A
5
}
A = \left\{ A_{1},\cdots,A_{5} \right\}
A={A1,⋯,A5}上的一个函数依赖集合为
F
=
{
A
1
A
3
→
A
1
,
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
3
→
A
4
,
A
3
→
A
1
,
A
2
→
A
1
,
A
2
A
3
→
A
2
A
5
}
F = \left\{ A_{1}A_{3}\rightarrow A_{1},A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{1},A_{2}\rightarrow A_{1},A_{2}A_{3}\rightarrow A_{2}A_{5} \right\}
F={A1A3→A1,A3→A2,A1A3→A4,A3→A4,A3→A1,A2→A1,A2A3→A2A5},求
F
F
F的最小覆盖和规范覆盖。
解:(1)将
F
F
F右部分解为单属性:
A
2
A
3
→
A
2
A
5
A_2 A_3→A_2 A_5
A2A3→A2A5分解为
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
A_2 A_3→A_2,A_2 A_3→A_5
A2A3→A2,A2A3→A5,得到函数依赖集合
F
(
1
)
=
{
A
1
A
3
→
A
1
,
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
3
→
A
4
,
A
3
→
A
1
,
A
2
→
A
1
,
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
}
F^{(1)} = \left\{ A_{1}A_{3}\rightarrow A_{1},A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{1},A_{2}\rightarrow A_{1},~A_{2}A_{3}\rightarrow A_{2},A_{2}A_{3}\rightarrow A_{5} \right\}
F(1)={A1A3→A1,A3→A2,A1A3→A4,A3→A4,A3→A1,A2→A1, A2A3→A2,A2A3→A5},将
F
(
1
)
F^{(1)}
F(1)赋值给
F
F
F;
(2)删除
F
F
F中多余的函数依赖:
1)考察
A
1
A
3
→
A
1
A_1 A_3→A_1
A1A3→A1,设
F
(
2
)
=
F
(
1
)
−
{
A
1
A
3
→
A
1
}
=
{
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
3
→
A
4
,
A
3
→
A
1
,
A
2
→
A
1
,
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
}
F^{(2)} = F^{(1)} - \left\{ A_{1}A_{3}\rightarrow A_{1} \right\} = \left\{ A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{1},A_{2}\rightarrow A_{1},~A_{2}A_{3}\rightarrow A_{2},A_{2}A_{3}\rightarrow A_{5} \right\}
F(2)=F(1)−{A1A3→A1}={A3→A2,A1A3→A4,A3→A4,A3→A1,A2→A1, A2A3→A2,A2A3→A5},由函数依赖8条性质,有
(
A
1
A
3
)
+
(
F
(
2
)
)
=
{
A
4
,
A
1
,
A
3
,
A
2
}
\left. \left( A \right._{1}A_{3} \right)^{+}\left( F^{(2)} \right) = \left\{ A_{4},A_{1},A_{3},A_{2} \right\}
(A1A3)+(F(2))={A4,A1,A3,A2},
A
1
∈
(
A
1
A
3
)
+
(
F
(
1
)
)
A_{1} \in \left. \left( A \right._{1}A_{3} \right)^{+}\left( F^{(1)} \right)
A1∈(A1A3)+(F(1)),于是将
F
(
2
)
F^{(2)}
F(2)赋值给
F
F
F;
2)考察
A
3
→
A
2
A_3→A_2
A3→A2,设
F
(
3
)
=
F
(
2
)
−
{
A
3
→
A
2
}
=
{
A
1
A
3
→
A
4
,
A
3
→
A
4
,
A
3
→
A
1
,
A
2
→
A
1
,
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
}
F^{(3)} = F^{(2)} - \left\{ A_{3}\rightarrow A_{2} \right\} = \left\{ A_{1}A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{1},A_{2}\rightarrow A_{1},~A_{2}A_{3}\rightarrow A_{2},A_{2}A_{3}\rightarrow A_{5} \right\}
F(3)=F(2)−{A3→A2}={A1A3→A4,A3→A4,A3→A1,A2→A1, A2A3→A2,A2A3→A5},由函数依赖8条性质,有
A
3
+
(
F
(
3
)
)
=
{
A
3
,
A
4
,
A
1
}
{A_{3}}^{+}\left( F^{(3)} \right) = \left\{ A_{3},A_{4},A_{1} \right\}
A3+(F(3))={A3,A4,A1},
A
2
∉
A
3
+
(
F
(
3
)
)
A_{2} \notin {A_{3}}^{+}\left( F^{(3)} \right)
A2∈/A3+(F(3)),于是
F
F
F保持
F
(
2
)
F^{(2)}
F(2)不变;
3)考察
A
1
A
3
→
A
4
A_1 A_3→A_4
A1A3→A4,设
F
(
4
)
=
F
(
2
)
−
{
A
1
A
3
→
A
4
}
=
{
A
3
→
A
2
,
A
3
→
A
4
,
A
3
→
A
1
,
A
2
→
A
1
,
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
}
F^{(4)} = F^{(2)} - \left\{ A_{1}A_{3}\rightarrow A_{4} \right\} = \left\{ A_{3}\rightarrow A_{2},A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{1},A_{2}\rightarrow A_{1},~A_{2}A_{3}\rightarrow A_{2},A_{2}A_{3}\rightarrow A_{5} \right\}
F(4)=F(2)−{A1A3→A4}={A3→A2,A3→A4,A3→A1,A2→A1, A2A3→A2,A2A3→A5},由函数依赖8条性质,有
(
A
1
A
3
)
+
(
F
(
4
)
)
=
{
A
1
,
A
3
,
A
2
,
A
5
}
\left. \left( A \right._{1}A_{3} \right)^{+}\left( F^{(4)} \right) = \left\{ A_{1},A_{3},A_{2},A_{5} \right\}
(A1A3)+(F(4))={A1,A3,A2,A5},
A
4
∉
(
A
1
A
3
)
+
(
F
(
4
)
)
A_{4} \notin \left. \left( A \right._{1}A_{3} \right)^{+}\left( F^{(4)} \right)
A4∈/(A1A3)+(F(4)), 于是
F
F
F保持
F
(
2
)
F^{(2)}
F(2)不变;
4)考察
A
3
→
A
4
A_3→A_4
A3→A4,设
F
(
5
)
=
F
(
2
)
−
{
A
3
→
A
4
}
=
{
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
3
→
A
1
,
A
2
→
A
1
,
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
}
F^{(5)} = F^{(2)} - \left\{ A_{3}\rightarrow A_{4} \right\} = \left\{ A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{3}\rightarrow A_{1},A_{2}\rightarrow A_{1},~A_{2}A_{3}\rightarrow A_{2},A_{2}A_{3}\rightarrow A_{5} \right\}
F(5)=F(2)−{A3→A4}={A3→A2,A1A3→A4,A3→A1,A2→A1, A2A3→A2,A2A3→A5},由函数依赖8条性质,有
A
3
+
(
F
(
5
)
)
=
{
A
1
,
A
3
,
A
2
,
A
4
,
A
5
}
{A_{3}}^{+}\left( F^{(5)} \right) = \left\{ A_{1},A_{3},A_{2},A_{4},A_{5} \right\}
A3+(F(5))={A1,A3,A2,A4,A5},
A
4
∈
A
3
+
(
F
(
5
)
)
A_{4} \in {A_{3}}^{+}\left( F^{(5)} \right)
A4∈A3+(F(5)),于是将
F
(
5
)
F^{(5)}
F(5)赋值给
F
F
F;
5)考察
A
3
→
A
1
A_3→A_1
A3→A1,设
F
(
6
)
=
F
(
5
)
−
{
A
3
→
A
1
}
=
{
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
2
→
A
1
,
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
}
F^{(6)} = F^{(5)} - \left\{ A_{3}\rightarrow A_{1} \right\} = \left\{ A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{2}\rightarrow A_{1},~A_{2}A_{3}\rightarrow A_{2},A_{2}A_{3}\rightarrow A_{5} \right\}
F(6)=F(5)−{A3→A1}={A3→A2,A1A3→A4,A2→A1, A2A3→A2,A2A3→A5},由函数依赖8条性质,有
A
3
+
(
F
(
6
)
)
=
{
A
1
,
A
3
,
A
2
,
A
4
,
A
5
}
{A_{3}}^{+}\left( F^{(6)} \right) = \left\{ A_{1},A_{3},A_{2},A_{4},A_{5} \right\}
A3+(F(6))={A1,A3,A2,A4,A5},
A
1
∈
A
3
+
(
F
(
6
)
)
A_{1}{{\in A}_{3}}^{+}\left( F^{(6)} \right)
A1∈A3+(F(6)),于是将
F
(
6
)
F^{(6)}
F(6)赋值给
F
F
F;
6)考察
A
2
→
A
1
A_2→A_1
A2→A1,设
F
(
7
)
=
F
(
6
)
−
{
A
2
→
A
1
}
=
{
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
2
A
3
→
A
2
,
A
2
A
3
→
A
5
}
F^{(7)} = F^{(6)} - \left\{ A_{2}\rightarrow A_{1} \right\} = \left\{ A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},~A_{2}A_{3}\rightarrow A_{2},A_{2}A_{3}\rightarrow A_{5} \right\}
F(7)=F(6)−{A2→A1}={A3→A2,A1A3→A4, A2A3→A2,A2A3→A5},由函数依赖8条性质,有
A
2
+
(
F
(
7
)
)
=
{
A
2
}
{A_{2}}^{+}\left( F^{(7)} \right) = \left\{ A_{2} \right\}
A2+(F(7))={A2},
A
1
∉
A
2
+
(
F
(
7
)
)
A_{1} \notin {A_{2}}^{+}\left( F^{(7)} \right)
A1∈/A2+(F(7)),于是
F
F
F保持
F
(
6
)
F^{(6)}
F(6)不变;
7)考察
A
2
A
3
→
A
2
A_2 A_3→A_2
A2A3→A2,设
F
(
8
)
=
F
(
6
)
−
{
A
2
A
3
→
A
2
}
=
{
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
2
→
A
1
,
A
2
A
3
→
A
5
}
F^{(8)} = F^{(6)} - \left\{ A_{2}A_{3}\rightarrow A_{2} \right\} = \left\{ A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{2}\rightarrow A_{1},A_{2}A_{3}\rightarrow A_{5} \right\}
F(8)=F(6)−{A2A3→A2}={A3→A2,A1A3→A4,A2→A1,A2A3→A5},由函数依赖8条性质,有
(
A
2
A
3
)
+
(
F
(
8
)
)
=
{
A
2
,
A
3
,
A
5
}
\left( A_{2}A_{3} \right)^{+}\left( F^{(8)} \right) = \left\{ A_{2},A_{3},A_{5} \right\}
(A2A3)+(F(8))={A2,A3,A5},
A
2
∈
(
A
2
A
3
)
+
(
F
(
8
)
)
A_{2} \in \left( A_{2}A_{3} \right)^{+}\left( F^{(8)} \right)
A2∈(A2A3)+(F(8)),于是将
F
(
8
)
F^{(8)}
F(8)赋值给
F
F
F;
8)考察
A
2
A
3
→
A
5
A_2 A_3→A_5
A2A3→A5,设
F
(
9
)
=
F
(
8
)
−
{
A
2
A
3
→
A
5
}
=
{
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
2
→
A
1
}
F^{(9)} = F^{(8)} - \left\{ A_{2}A_{3}\rightarrow A_{5} \right\} = \left\{ A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{2}\rightarrow A_{1} \right\}
F(9)=F(8)−{A2A3→A5}={A3→A2,A1A3→A4,A2→A1},由函数依赖8条性质,有
(
A
2
A
3
)
+
(
F
(
9
)
)
=
{
A
2
,
A
3
,
A
1
,
A
4
}
\left( A_{2}A_{3} \right)^{+}\left( F^{(9)} \right) = \left\{ A_{2},A_{3},A_{1},A_{4} \right\}
(A2A3)+(F(9))={A2,A3,A1,A4},
A
5
∉
(
A
2
A
3
)
+
(
F
(
9
)
)
A_{5} \notin \left( A_{2}A_{3} \right)^{+}\left( F^{(9)} \right)
A5∈/(A2A3)+(F(9)),于是
F
F
F保持
F
(
8
)
F^{(8)}
F(8)不变,最后
F
=
{
A
3
→
A
2
,
A
1
A
3
→
A
4
,
A
2
→
A
1
,
A
2
A
3
→
A
5
}
F = \left\{ A_{3}\rightarrow A_{2},A_{1}A_{3}\rightarrow A_{4},A_{2}\rightarrow A_{1},A_{2}A_{3}\rightarrow A_{5} \right\}
F={A3→A2,A1A3→A4,A2→A1,A2A3→A5};
(3)删除
F
F
F中的每个函数依赖的左部多余的属性:
1)考察
A
1
A
3
→
A
4
A_1 A_3→A_4
A1A3→A4,考察
(
A
1
A
3
−
A
1
)
+
(
F
)
=
A
3
+
(
F
)
=
{
A
2
,
A
3
,
A
1
,
A
4
,
A
5
}
\left( {A_{1}A_{3} - A_{1}} \right)^{+}\left( F \right) = {A_{3}}^{+}\left( F \right) = \left\{ A_{2},A_{3},A_{1},A_{4},A_{5} \right\}
(A1A3−A1)+(F)=A3+(F)={A2,A3,A1,A4,A5},
A
4
∈
A
3
+
(
F
)
A_{4} \in {A_{3}}^{+}\left( F \right)
A4∈A3+(F), 于是删除
A
1
A
3
→
A
4
A_1 A_3→A_4
A1A3→A4,添加
A
3
→
A
4
A_3→A_4
A3→A4,得
F
=
{
A
3
→
A
2
,
A
3
→
A
4
,
A
2
→
A
1
,
A
2
A
3
→
A
5
}
F = \left\{ A_{3}\rightarrow A_{2},A_{3}\rightarrow A_{4},A_{2}\rightarrow A_{1},A_{2}A_{3}\rightarrow A_{5} \right\}
F={A3→A2,A3→A4,A2→A1,A2A3→A5};
2)考察
A
2
A
3
→
A
5
A_2 A_3→A_5
A2A3→A5,
考
察
(
A
2
A
3
−
A
2
)
+
(
F
)
=
A
3
+
(
F
)
=
{
A
2
,
A
3
,
A
1
,
A
4
,
A
5
}
考察\left( {A_{2}A_{3} - A_{2}} \right)^{+}\left( F \right) = {A_{3}}^{+}\left( F \right) = \left\{ A_{2},A_{3},A_{1},A_{4},A_{5} \right\}
考察(A2A3−A2)+(F)=A3+(F)={A2,A3,A1,A4,A5},
A
5
∈
A
3
+
(
F
)
A_5∈A_3^+ (F)
A5∈A3+(F),
于是删除
A
2
A
3
→
A
4
A_2 A_3→A_4
A2A3→A4,添加
A
3
→
A
5
A_3→A_5
A3→A5,得
F
=
{
A
3
→
A
2
,
A
3
→
A
4
,
A
2
→
A
1
,
A
3
→
A
5
}
F = \left\{ A_{3}\rightarrow A_{2},A_{3}\rightarrow A_{4},A_{2}\rightarrow A_{1},A_{3}\rightarrow A_{5} \right\}
F={A3→A2,A3→A4,A2→A1,A3→A5}。
于是F的最小覆盖为
{
A
3
→
A
2
,
A
3
→
A
4
,
A
2
→
A
1
,
A
3
→
A
5
}
\left\{ A_{3}\rightarrow A_{2},A_{3}\rightarrow A_{4},A_{2}\rightarrow A_{1},A_{3}\rightarrow A_{5} \right\}
{A3→A2,A3→A4,A2→A1,A3→A5}。
(4)将最小覆盖左部相同的项合并即得到规范覆盖:
{
A
3
→
A
2
A
4
A
5
,
A
2
→
A
1
}
\left\{ A_{3}\rightarrow A_{2}A_{4}A_{5},A_{2}\rightarrow A_{1} \right\}
{A3→A2A4A5,A2→A1}。
llk注:1.上述定义和定理按实际应用场景进行了适度修正和引申,2.函数依赖的概念不仅仅局限于数据库方面