功能依赖的最小覆盖

时间:2013-11-10 09:50:42

标签: database normalization functional-dependencies

我有以下问题:

AB -> CD
H->B
G ->DA
CD-> EF
A -> HJ
J>G

我理解第一步(分解右侧)并获得以下结果:

AB -> C
AB -> D
H -> B
G -> D
G -> A
CD -> E
CD -> F
A -> H
A -> J
J -> G

我明白A - > h和h - > b,因此我可以从AB中删除B - > c和ab - > D,得到:

A -> C
A -> D
H -> B
G -> D
G -> A
CD -> E
CD -> F
A -> H
A -> J
J -> G

接下来的步骤是我无法计算的(减少左侧)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您已经缩小了封面中每个FD的左侧。下一步 是将该覆盖范围内的FD数量减少到最少。

通过忽略一个FD来做到这一点 时间,然后看看 你仍然可以使用另一个来提出相同的依赖属性集(闭包) 封面上的FD使用忽略的FD的LHS作为起点。如果你 可以,然后你忽略的FD是多余的,可能会从封面上掉下来。做这个 对于每个剩余的FD。剩下的是最小的封面。

首先,使用起始封面中的所有FD,派生属性集 由FD的LHS决定你会忽略。对于A,闭包是:

A, B, C, D, E, F, G, H, J

尝试重新启动A -> D并重新计算闭包......

initial   closure: A
use A -> C    closure: A, C
use A -> H    closure: A, C, H
use A -> J    closure: A, C, H, J
use J -> D    closure: A, C, D, H, J
use J -> G    closure: A, C, D, G, H, J
use H -> B    closure: A, B, C, D, G, H, J
use CD -> E   closure: A, B, C, D, E, G, H, J
use CD -> F   closure: A, B, C, D, E, F, G, H, J

可以在不引用的情况下派生同一组属性 FD A -> D所以这个FD是多余的,可以从封面上删除。实际上我们可以 一旦D出现在派生的属性集中,就会停止进程 - 但是对于完整性 该过程继续证明无论是否可以实现完全相同的属性集 A -> D

请注意,给定FD组的最小覆盖率不必是唯一的。但是,任何给定的最小覆盖 必须包含与原始封面相同的依赖集,以便从最小封面中删除任何一个依赖都不会产生相同的封闭。