假设我们有以下功能依赖:
AB -> C
DEG -> H
A -> B
DG -> H
我们可以看到,由于B +的闭合,B可以被去除,这是(G-(AB - > C)U(A - > C)= ACB
为了找到最小的覆盖,我如何处理关于DEG的其他左手冗余 - > H,DG - > H - 可以减少这些,如果是这样,你可以解释使用闭包!
非常感谢,马修
答案 0 :(得分:2)
这样做有一小组规则。这真的很容易。 函数依赖集是最小的;
因此,如果您要找到最小的封面,您必须确保这些。当然,你必须保持封闭等效。
如果你看看:
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也不能保留原封闭。
我们可以使用阿姆斯特朗公理来证明这一点。如果我们可以得到原始集合,那么这实际上是一个等价的最小集合。 (我稍后会发布 - 我希望它是正确的。)