述:函数依赖(functional dependency),闭包(closure),最小覆盖(minimal cover)和规范覆盖(canonical cover)

在本文中,函数依赖是针对用户需要处理的数据集说的。

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:xy,其中 ∀ x ∈ A i , ∀ y ∈ A j , 1 ≤ i , j ≤ n , i ≠ j ∀x∈A_i,∀y∈A_j,1≤i,j≤n, i≠j xAi,yAj1i,jni=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} AifAj,简写为 A i → A j A_i→A_j AiAj。其中 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,CAn, 且 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 AiAj叫做单属性函数依赖。单属性函数依赖的特征是函数依赖的左部和右部都只有一个属性(即单属性)。

请注意,本文不考虑空集 ϕ ϕ ϕ的函数依赖,即不存在 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 AiAi(自反性);
(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,CAn B ⊂ C B⊂C BC,则必有 C → B C→B CB,此类函数依赖称为平凡函数依赖;如果 C → B C→B CB B ⊄ C B⊄C BC,则称此类函数依赖为非平凡函数依赖;
(3)若 B , C , D ∈ A n , C → B B,C,D∈A^n,C→B B,C,DAnCB C → D C→D CD,则必有 C → B D C→BD CBD
(4)若 B , C , D ∈ A n , C → B D B,C,D∈A^n,C→BD B,C,DAnCBD,则必有 C → B C→B CB C → D C→D CD
(5)若 B , C ∈ A n , C → B B,C∈A^n,C→B B,CAn,CB,且对于任意 C ′ ⊂ C C'⊂C CC,都有 C ′ ↛ B C'↛B CB,则称此类函数依赖为完全函数依赖;反之若存在 C ′ ⊂ C C'⊂C CC使得 C ′ → B C'→B CB,则称此类函数依赖为部分函数依赖;
(6)如果 A i → A j A_i→A_j AiAj,则必有 A j → A i ( 1 ≤ i , j ≤ n , i ≠ j ) A_j→A_i(1≤i,j≤n,i≠j) AjAi1i,jni=j(对称性);
(7)若 A i → A j , A j → A k A_i→A_j,A_j→A_k AiAjAjAk,则必有 A i → A k ( 1 ≤ i , j , k ≤ n , i , j , k A_i→A_k(1≤i,j,k≤n,i,j,k AiAk1i,j,kni,j,k各不相同 ) ) (传递性);
(8)传递性的推广: B , C , D ∈ A n B,C,D∈A^n B,C,DAn,且 B , C , D B,C,D B,C,D各不相同,则 ( B → C ∧ C → D ) ⟹ B → D (B→C∧C→D)⟹B→D (BCCD)BD

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(1in) 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) AiAj(AjA,1jn)中,所有 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 BAn B B B F F F上利用函数依赖的性质(1)~(8)直接或间接推导出的所有 B → C ( C ∈ A n ) B→C(C∈A^n) BC(CAn)中,所有子集 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={A1A3A1,A3A2,A1A3A4,A3A4,A3A1,A2A1,A2A3A2A5},则 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 A3A3;由 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 A3A2A3A4A3A1;由性质(4), A 2 A 3 → A 2 A 5 A_2 A_3→A_2 A_5 A2A3A2A5可推出 A 2 A 3 ⟶ A 5 A_2 A_3⟶A_5 A2A3A5;由性质(3), A 3 → A 3 , A 3 → A 2 A_3→A_3,A_3→A_2 A3A3A3A2可推出 A 3 → A 2 A 3 A_3→A_2 A_3 A3A2A3;由传递性(7)得 A 3 → A 5 A_3→A_5 A3A5。综上所述, 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〉 RA,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 BC A A A上的一个函数依赖,其中 B , C ∈ A n B,C∈A^n B,CAn,若 A A A F F F上利用函数依赖的性质(1)~(8)直接或间接推导出 B → C B→C BC,则称 F F F逻辑蕴含 B → C B→C BC,也称为 B → C B→C BC能由 F F F推导,记为 F ↦ ( B → C ) F↦(B→C) F(BC)

请注意“逻辑蕴含”并不是说 B → C B→C BC 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={A1A2,A2A3} 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 (A1A3)/F,但根据传递性, F ↦ ( A 1 → A 3 ) F↦(A_1→A_3) F(A1A3)

又有在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} A1A2,A1A3,A2A3,A1A1,A2A2,A3A3,A2A1,A3A1,A3A2,共 n × n = 3 × 3 n×n=3×3 n×n=3×3个元素如下图。同理,去掉空集后, A n A^n An包含 2 n − 1 2^n-1 2n1个元素,全部的函数依赖是 ( 2 3 − 1 ) × ( 2 3 − 1 ) (2^3-1)×(2^3-1) (231)×(231)个。
在这里插入图片描述(参见集合论中的二元关系和闭包)

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 FG,请注意等价不代表 F F F G G G的元素相同。
(2)覆盖:数据 A A A上的两个函数依赖集分别记为 F 和 F和 FG,若对于 G G G中的每一个函数依赖 B → C ( B , C ∈ A n ) B→C(B,C∈A^n) BCB,CAn,都有 F ↦ ( B → C ) F↦(B→C) F(BC),则称 F F F G G G的一个覆盖,记为 F ↦ G F↦G FG。如果 F ↦ G F↦G FG G ↦ F G↦F GF,则 F ≡ G F≡G FG

7.最小覆盖(最小依赖集):

若数据 A A A上的一个函数依赖集合 F F F满足如下条件:
(1) F F F中的每个函数依赖的右部只有唯一的属性 A i ( 1 ≤ i ≤ n ) A_i (1≤i≤n) Ai(1in),即右部都是幂集 A n A^n An中的单元素集合;
(2) F F F中没有冗余的函数依赖,即不存在函数依赖 B → C ∈ F ( B , C ∈ A n ) B→C∈F(B,C∈A^n) BCFB,CAn,使得 F ≡ F − { B → C } F \equiv F - \left\{ B\rightarrow C \right\} FF{BC}(其中 F − { B → C } F - \left\{ B\rightarrow C \right\} F{BC}为集合减法运算);
(3) F F F中的每个函数依赖的左部都不存在多余属性,即 B → C ∈ F B→C∈F BCF D ⊂ B D⊂B DB,使得 F ≡ ( F − { B → C } ) ∪ { D → C } F \equiv \left( {F - \left\{ B\rightarrow C \right\}} \right) \cup \left\{ D\rightarrow C \right\} F(F{BC}){DC}
则称 F F F为最小覆盖或最小依赖集。

最小覆盖性质:若 F F F为最小覆盖,则 F F F与任何一个与之等价的一个函数依赖集合 G G G相比,具有最小的函数依赖数。

8.无冗余覆盖:

如果函数依赖集合 F F F存在真子集 F ′ ⊂ F F'⊂F FF,使得 F ′ ⊂ F F'⊂F FF,则称 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) BCFB,CAn,若 B = A i A j ( 0 ≤ i , j ≤ n , i ≠ j ) B=A_i A_j (0≤i,j≤n,i≠j) B=AiAj(0i,jn,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{BC}){AjC}F,则称 A i A_i Ai B → C B→C BC是左外部属性;若 C = A i A j ( 0 ≤ i , j ≤ n , i ≠ j ) C=A_i A_j (0≤i,j≤n,i≠j) C=AiAj(0i,jn,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{BC}){BAj}F, 则称 A i A_i Ai B → C B→C BC是右外部属性;

10.规范覆盖:

将最小覆盖所有的左部相同的函数依赖合并后得到的函数依赖集合称为规范覆盖。

规范覆盖的性质:
(1)右部都为单属性;
(2)左部不包含外部属性;
(3)为无冗余覆盖;
(4)对于给定的函数依赖集合,规范覆盖不是唯一的。

11.计算最小覆盖和规范覆盖的步骤:

(1)将 F F F中的每个函数依赖的右部分解为单属性;对于每个 B → C ∈ F B→C∈F BCF C = C 1 ⋯ C k ( k > 1 ) C=C_1⋯C_k (k>1) C=C1Ck(k>1),且对于每个 C i ( 1 ≤ i ≤ k ) C_i (1≤i≤k) Ci(1ik),从 F F F去除 B → C B→C BC,加上 B → C i B→C_i BCi
(2)删除 F F F中多余的函数依赖:对于每个 B → C ∈ F B→C∈F BCF,令 G = F − ( B → C ) G=F-(B→C) G=F(BC),若 C ∈ B + ( G ) C∈B^+ (G) CB+(G),则从 F F F去除 B → C B→C BC
(3)删除 F F F中的每个函数依赖的左部多余的属性:对于每个 B → C ∈ F B→C∈F BCF B = B 1 ⋯ B k ( k > 1 ) B=B_1⋯B_k (k>1) B=B1Bk(k>1),考察每个 B i ( 1 ≤ i ≤ k ) B_i (1≤i≤k) Bi(1ik),如果 C ∈ ( B − B i ) + ( F ) C∈(B-B_i )^+ (F) C(BBi)+(F),则从 F F F去除 B → C B→C BC,加上 ( B − B i ) → C (B-B_i)→C (BBi)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={A1A3A1,A3A2,A1A3A4,A3A4,A3A1,A2A1,A2A3A2A5},求 F F F的最小覆盖和规范覆盖。
解:(1)将 F F F右部分解为单属性: A 2 A 3 → A 2 A 5 A_2 A_3→A_2 A_5 A2A3A2A5分解为 A 2 A 3 → A 2 , A 2 A 3 → A 5 A_2 A_3→A_2,A_2 A_3→A_5 A2A3A2A2A3A5,得到函数依赖集合 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)={A1A3A1,A3A2,A1A3A4,A3A4,A3A1,A2A1, A2A3A2,A2A3A5},将 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 A1A3A1,设 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){A1A3A1}={A3A2,A1A3A4,A3A4,A3A1,A2A1, A2A3A2,A2A3A5},由函数依赖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 A3A2,设 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){A3A2}={A1A3A4,A3A4,A3A1,A2A1, A2A3A2,A2A3A5},由函数依赖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 A1A3A4,设 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){A1A3A4}={A3A2,A3A4,A3A1,A2A1, A2A3A2,A2A3A5},由函数依赖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 A3A4,设 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){A3A4}={A3A2,A1A3A4,A3A1,A2A1, A2A3A2,A2A3A5},由函数依赖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) A4A3+(F(5)),于是将 F ( 5 ) F^{(5)} F(5)赋值给 F F F
5)考察 A 3 → A 1 A_3→A_1 A3A1,设 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){A3A1}={A3A2,A1A3A4,A2A1, A2A3A2,A2A3A5},由函数依赖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) A1A3+(F(6)),于是将 F ( 6 ) F^{(6)} F(6)赋值给 F F F
6)考察 A 2 → A 1 A_2→A_1 A2A1,设 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){A2A1}={A3A2,A1A3A4, A2A3A2,A2A3A5},由函数依赖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 A2A3A2,设 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){A2A3A2}={A3A2,A1A3A4,A2A1,A2A3A5},由函数依赖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 A2A3A5,设 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){A2A3A5}={A3A2,A1A3A4,A2A1},由函数依赖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={A3A2,A1A3A4,A2A1,A2A3A5}
(3)删除 F F F中的每个函数依赖的左部多余的属性:
1)考察 A 1 A 3 → A 4 A_1 A_3→A_4 A1A3A4,考察 ( 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\} (A1A3A1)+(F)=A3+(F)={A2,A3,A1,A4,A5} A 4 ∈ A 3 + ( F ) A_{4} \in {A_{3}}^{+}\left( F \right) A4A3+(F), 于是删除 A 1 A 3 → A 4 A_1 A_3→A_4 A1A3A4,添加 A 3 → A 4 A_3→A_4 A3A4,得 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={A3A2,A3A4,A2A1,A2A3A5}
2)考察 A 2 A 3 → A 5 A_2 A_3→A_5 A2A3A5 考 察 ( 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\} (A2A3A2)+(F)=A3+(F)={A2,A3,A1,A4,A5} A 5 ∈ A 3 + ( F ) A_5∈A_3^+ (F) A5A3+(F)
于是删除 A 2 A 3 → A 4 A_2 A_3→A_4 A2A3A4,添加 A 3 → A 5 A_3→A_5 A3A5,得 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={A3A2,A3A4,A2A1,A3A5}
于是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\} {A3A2,A3A4,A2A1,A3A5}
(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\} {A3A2A4A5,A2A1}

llk注:1.上述定义和定理按实际应用场景进行了适度修正和引申,2.函数依赖的概念不仅仅局限于数据库方面

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值