功能依赖 - 左侧有三个属性

时间:2012-10-27 01:32:02

标签: database functional-dependencies

假设我们有以下功能依赖:

AB -> C 
DEG -> H
A -> B
DG -> H

我们可以看到,由于B +的闭合,B可以被去除,这是(G-(AB - > C)U(A - > C)= ACB

为了找到最小的覆盖,我如何处理关于DEG的其他左手冗余 - > H,DG - > H - 可以减少这些,如果是这样,你可以解释使用闭包!

非常感谢,马修

1 个答案:

答案 0 :(得分:2)

这样做有一小组规则。这真的很容易。 函数依赖集是最小的;

  1. 如果只有单身 依赖性右侧的属性。而且......
  2. 没有可以删除的功能依赖,这是保留原始封面的一种方式。而且......
  3. 您无法从依赖项的左侧删除属性并保留原始封面
  4. 因此,如果您要找到最小的封面,您必须确保这些。当然,你必须保持封闭等效。

    如果你看看:

    AB -> C 
    DEG -> H
    A -> B
    DG -> H
    

    您可以轻松找到冗余。没有必要包括DEG→H和DG→H,因为DG→H已经涵盖了所有DEG→H覆盖。所以你可以删除它。

    仍然等同于:

    AB -> C 
    A -> B
    DG -> H
    

    你仍然可以从第一行看到你可以删除B,因为它取决于A的功能。

    仍然等同于:

    A -> C 
    A -> B
    DG -> H
    

    我们找到了最小的封面。不能删除任何依赖关系以保持闭包,并且右侧只有单个属性,而DG是左侧唯一的双重属性,必须保留。我们既不能删除D或G也不能保留原封闭。

    我们可以使用阿姆斯特朗公理来证明这一点。如果我们可以得到原始集合,那么这实际上是一个等价的最小集合。 (我稍后会发布 - 我希望它是正确的。)