FD 的集合 F 的闭包是可以从 F 推断出的所有 FD 的集合 F + 。它也称为功能依赖的完整集合。用 F +表示。
算法:属性闭包集
Algorithm to compute a+, the closure of a under F
Result:= a;
while (changes to Result) do
for each B → Y in F do
Begin
if B ⊆ Result then Result := Result ∪ Y
End
属性闭包的利用——
- 测试给定的属性是否是超级键/候选键。
- 我们可以检查 FD X → Y 是否成立。
- 找出 F +的另一种方法。
- 测试属性是否为超键。
例子 :
令 R = (A, B, C, G, H, I) 和 FD 的集合是 F = { A → B, A → C, CG → H, CG → I, B → H}找出 (AG) + .
结果 = {A, G}
第一个循环:
A → B includes B in the Result as A⊆ Result (which is AG), so Result := Result ∪ B. Hence Result = {A, G, B} A → C causes Result to become ABCG. CG → H causes the Result to become ABCGH. CG → I causes the Result to become ABCGHI. B → H causes Result to become ABCGHI.
第二个循环:
A → B causes the Result to be unchanged i.e. ABCGHI (B is already part of the Result). A → C causes Result to be unchanged. CG → H causes the Result to be unchanged. CG → I causes the Result to be unchanged. B → H causes Result to be unchanged.
在第二个循环结束时,结果不会改变,因此退出循环。
(AG) + = {A, B, C, G, H, I}
结论: AG 是一个超级键,因为它可以确定所有其他属性。
- 检查 Fd 是否存在:
例子 :
令 R = (A, B, C, G, H, I) 和 FD 的集合是 F = { A →B, A → C, CG → H, CG → I, B → H}检查 HB → 我持有与否
结果 = {H, B}
第一个循环:
In A → B as A ⊆ Result (which is HB) so nothing will be added. In A → C nothing added. CG → H (CG ⊆ Result (which is HB) so nothing added) CG → I nothing added. B → H nothing added.
在第一个循环结束时,结果不会改变,因此退出循环。
结论: HB→我不持有。
- 找到 FD 闭包的另一种方法 (F + )。
例子 :
给定一个关系 R (A, B, C, D, E, F) 和一组 FDs F: {A → BC, E → CF, B → E, CD → EF}找出 {A, B} + 的闭包
步骤 1:结果 = AB
步骤 2:第一个循环
Result = ABC for A → BC, A ⊆ Result so Result = Result ∪ BC. Result = ABC for E→ CF, E ∉ Result so Result = Result. Result = ABCE for B → E, B ⊆Result so Result = Result ∪ E. Result = ABCE for CD → EF, CD ∉ Result so Result = Result.
步骤2之前的结果是AB,步骤2之后的结果是不同的ABCE,所以重复步骤2。
第 3 步:第二个循环
Result = ABCE for A → BC, A ⊆ Result so Result = Result ∪ BC. Result = ABCEF for E → CF, E ⊆ Result so Result = Result ∪ CF. Result = ABCEF for B → E, B ⊆ Result so Result = Result ∪ E. Result = ABCEF for CD → EF, CD ∉ Result so Result = Result.
第3步之前的结果是ABCE,第3步之后的结果是ABCEF,不同,重复第3步。
第 4 步:第三个循环
Result = ABCEF for A → BC, A ⊆ Result so Result = Result ∪ BC. Result = ABCEF for E → CF, E ⊆ Result so Result = Result ∪ CF. Result = ABCEF for B → E, B ⊆ Result so Result = Result ∪ E. Result = ABCEF for CD → EF, CD ∉ Result so Result = Result.
步骤 4 之前的结果是 ABCEF,步骤 3 之后的结果是 ABCEF,这是相同的,所以停止。
所以 {A, B} + 的闭包是 {A, B, C, E, F}。
结论:对于每个属性/属性集,我们都可以找到闭包。这导致 F + 。