最小的封面和功能依赖

时间:2012-04-23 15:58:40

标签: database functional-dependencies

鉴于以下功能依赖性,我将如何计算最小覆盖率:

A -> B, ABCD -> E, EF -> GH, ACDF -> EG

在讲义中,它给出了最小覆盖的推导,但我不明白。

例如,摆脱 ACDF - > ë

A -> B => AACD -> BACD -> E => ACD -> E => ACDF -> E

然后他们说,同样我们不保留 ACDF - > ģ

然后我理解 ABCD - > E 推断为 ACD - > E 因为 A - > B ,但我不明白如何达到这一目标的正式过程。

所以我的问题是,是否有人可以解释如何为集合功能依赖关系生成最小覆盖?

2 个答案:

答案 0 :(得分:70)

要获得最小限度,您必须完成两个步骤。为了演示,我将首先将依赖项拆分为多个(右侧只有一个属性)以使其更加干净:

A -> B
ABCD -> E
EF -> G
EF -> H
ACDF -> E
ACDF -> G

以下步骤必须按此顺序(#1然后#2)完成,否则您可能会得到错误的结果。

1)摆脱冗余属性(减少左侧):

取每个左侧并尝试一次删除一个属性,然后尝试推断右侧(现在只是所有依赖项的一个属性)。如果你成功,你可以从左侧删除该字母,然后继续。请注意,可能有多个正确的结果,这取决于您进行缩减的顺序。

您会发现,您可以从依赖项B中删除ABCD -> E,因为ACD -> ABCD(使用第一个dep。)和ABCD -> E。你可以使用完整的dep。你目前在减少,一开始有时会让人感到困惑,但如果你考虑一下,你就会明白这一点。

同样,您可以从F删除ACDF -> E,因为ACD -> ABCD -> ABCDE -> E(您显然可以从信件中推断出一个字母)。完成此步骤后,您将获得:

A -> B
ACD -> E
EF -> G
EF -> H
ACD -> E
ACDF -> G

这些规则仍然表示与原始规则相同的依赖关系。请注意,现在我们有一个重复的规则ACD -> E。如果你将整个事物视为一组(在数学意义上),那么当然你不能在一组中有两次相同的元素。现在,我只是在这里离开它两次,因为无论如何下一步都将摆脱它。

2)摆脱多余的依赖

现在,对于每个规则,尝试将其删除,并查看是否仅使用其他规则推断出相同的规则。在这一步中,你当然不能使用dep。您目前正在尝试删除(您可以在上一步中删除)。

如果您选择第一条规则A -> B的左侧,暂时隐藏它,您会发现无法单独从A推断出任何内容。因此,这条规则并不多余。为所有其他人做同样的事情。您会发现,您可以(显然)删除其中一个重复的规则ACD -> E,但严格来说,您也可以使用该算法。仅隐藏两个相同规则中的一个,然后取左侧(ACD),并使用另一个推断右侧。因此,您可以删除ACD -> E(当然只有一次)。

您还会看到可以删除ACDF -> G,因为ACDF -> ACDFE -> G。结果是:

A -> B
EF -> G
EF -> H
ACD -> E

原始集合的最小封面。

答案 1 :(得分:-3)

据我所知,在上述功能性最小依赖性ACDF中 - > G也应该被包括在内,因为当你关闭左边的每个字母和它们的组合时,没有一个产生G而不包括F

所以它如下:

(A - > B,EF - > G,EF - > H,ACD - > E,ACDF - > G)