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