考虑R(A,B,C,D,E,F,G)是具有以下功能依赖性的关系模式:AC-> G,D-> EG,BC-> D,CG-> BD,ACD-> B,CE-> AG。可能的最低保额数目是___________?
实际上,在这个问题上,我们应该找到所有可能的最小掩体。我使用了this视频因此,使用该理论,我尝试做这个问题,但最终只得到2个最小的封面,然后在我的课本中给出的答案是4个。我得到的最小封面是:
1)D-> E,D-> G,BC-> D,CG-> D,AC-> B(#),CE-> A
2)AC-> G,D-> E,D-> G,BC-> D,CG-> D,CD-> B(#),CE-> A
实际上,视频仅提供了标准程序来查找最小的封面。但是问题有点棘手,因为它询问了我们能找到多少个最小的封面。我正确地应用了算法...唯一的问题是,对于给定的FD,我无法找到更多的最小覆盖范围
产生最小覆盖率的通用算法包括三个步骤:
分割右侧部分,在右侧部分仅生成一个属性的FD。
对于具有多个属性的每个左侧部分,请尝试依次删除每个属性,以查看其余部分是否仍可以确定右侧部分。在这种情况下,请从左侧删除属性。
对于每个剩余的依赖项,请尝试看看是否可以消除它。
根据您的情况,第一步将产生:
F = { A C → G
A C D → B
B C → D
C G → B
C G → D
C E → A
C E → G
D → E
D → G }
第二步,我们必须检查前七个依赖项。对于每个依赖项A1A2...An -> B
,我们尝试依次消除每个Ai
并查看如果B
包含在其余属性的闭包(相对于F的闭包)中。在这种情况下,我们有两种可能性:从ACD -> B
中可以消除A
或D
。因此,我们现在有了两组不同的依赖项:
F1 = { A C → G
C D → B
B C → D
C G → B
C G → D
C E → A
C E → G
D → E
D → G }
和
F2 = { A C → G
A C → B
B C → D
C G → B
C G → D
C E → A
C E → G
D → E
D → G }
现在我们可以应用最后一步:对于每个依赖项X -> A
,我们可以查看A
,X
的闭包是否包含所有其他依赖项。在这种情况下,我们可以消除这种依赖性。
结果通常取决于我们应用这些检查的顺序。
这里有四个不同的规范封面:
X+
注意:尚不清楚是否还有其他规范封面。