可能的最低保额数目是多少?

问题描述 投票:0回答:1

考虑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,我无法找到更多的最小覆盖范围

database database-design relational-database database-schema functional-dependencies
1个回答
1
投票

产生最小覆盖率的通用算法包括三个步骤:

  1. 分割右侧部分,在右侧部分仅生成一个属性的FD。

  2. 对于具有多个属性的每个左侧部分,请尝试依次删除每个属性,以查看其余部分是否仍可以确定右侧部分。在这种情况下,请从左侧删除属性。

  3. 对于每个剩余的依赖项,请尝试看看是否可以消除它。

根据您的情况,第一步将产生:

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中可以消除AD。因此,我们现在有了两组不同的依赖项:

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,我们可以查看AX的闭包是否包含所有其他依赖项。在这种情况下,我们可以消除这种依赖性。

结果通常取决于我们应用这些检查的顺序。

这里有四个不同的规范封面:

X+

注意:尚不清楚是否还有其他规范封面。

© www.soinside.com 2019 - 2024. All rights reserved.