我与这些依赖关系存在这种关系:
R(A,B,C,D,E,F,G,H)
Fd1: A → B,C,D
Fd2: A,D → E
Fd3: E,F,G → H
Fd4: F → G,H
我的问题是:此集合中存在冗余依赖关系,我想知道如何识别此冗余的过程。根据解决方案的答案是FD3但是我不知道这是如何实现的:有人可以解释一下吗?
答案 0 :(得分:1)
删除任何冗余依赖项的方法之一是找到 最小化 。要找到最小封面 -
例如:在您的关系中R -
首先确保单身RHS。所以现在我们有 -
A->乙
A-&以及c
A-> d
A-&GT,E
EFG-> H
F-&GT克
F-> H
第二次我们删除任何无关的LHS属性。只有一个FD具有多个LHS属性( EFG - > H )。如果 E + ( E-closure ) F ,我们可以删除 F FD,反之亦然。这里F + 有 G 所以我们删除 G 。
第三次现在我们可以检查多余的依赖项了!要检查每个FD( X-> Y ),我们会删除该依赖项,看看我们是否仍然可以从 X 获取 Y 。例如,在我们隐藏FD EF - > H 的情况下,我们仍然可以看到 H 来自 F 使用最后一个FD( F-> H )。因此,我们可以删除FD EF - > H 。所以现在我们有 -
A->乙
A-&以及c
A-> d
A-&GT,E
F-&GT克
F-> H
这是 minimal cover 。
最后,我们可以将FD与相同的LHS结合起来,这样我们终于有了 -
A-> BCDE
F-> GH
这应该是您的最终答案,没有多余的依赖关系。在你的情况下,因为你必须选择一个给定的FD作为冗余,然后 FD3 将是我们将其减少的答案。