将功能依赖性投射到另一个关系上

时间:2016-11-02 00:08:36

标签: functional-dependencies

考虑R(ABCDE)与以下FD&#39>的关系:

  • AB - > ç
  • BC - > d
  • CD - > ë
  • DE - > A
  • AE - >乙

将这些FD投射到S(ABCD)的关系上。以下哪个FD在预测的关系中成立?

  1. A - >乙
  2. A - > d
  3. BC - > A
  4. AC - >乙
  5. 上述问题中的措辞直接从作业中复制

    正确的答案是3。

    因为最后3个FD包含E,所以我认为它们不会在R(ABCD)的投影中保持。所以这让我失望了 AB -> CBC -> D我无法弄清楚如何从我当前的流程中确定正确的答案。

2 个答案:

答案 0 :(得分:2)

你的问题不明确。我假设您在询问关系R(ABCD)中最后四个依赖项中的哪一个:答案是第三个。这可以通过计算原始依赖集中BC的闭包来简单地证明:

BC+ = BC
BC+ = BCD    (using BC → D)
BC+ = BCDE   (using CD → E)
BC+ = BCDEA  (using DE → A)

因此,BC是候选键并确定A,因此BC → A也在R(ABCD)中。如果您尝试计算四个依赖项的所有其他左侧的闭包,您将永远找不到右侧,因此它们不会保留在R(ABCD)中。

为什么通过计算行列式的闭包可以得到答案?

让我们调用FS原始依赖关系F对关系S(ABCD)的投射。因此,对于一组依赖项的投影定义,我们有:

FS = {X→Y∈F + | X,Y⊆ABCD}

并且问题是否某些依赖属于FS。但由于FS的计算需要计算F + ,这是一个指数任务,而不是计算它,我们检查四个依赖关系X→Y中的每一个,如果它属于F < SUP> + 。这相当于计算X的闭包并查找Y是否属于它的多项式任务(我们已经知道依赖关系具有集合ABCD中的所有属性)。

所以答案是计算依赖关系的所有左手部分的闭包,看看是否包含正确的部分。这只适用于第三种依赖。

答案 1 :(得分:1)

“将这些FD投射到关系S(A,B,C,D)上”是草率的写作。 (虽然你评论说你引用了你的作业。)据推测,这是试图说,如果这些FD在R(ABCDE)中保留,那么下面的哪些FD在其对ABCD的预测中成立。

当某些FD持有时,其他FD也必须持有,因为那些FD会持有。因此,R中存在的FD多于您给出的FD。此外,一些FD持有但未被保留,因为一些使用E的FD保持 - 即使它们本身不包含E.所以首先你需要在R中找到更多的FD,直到找到一个将在投影后保留,因为它们不涉及E。

一种方法是找到F +(关闭一组FD)。但它可能非常大。我们可以做的是使用属性集闭包的概念。这是由属性集确定的所有属性的集合。 (根据确定的属性,我们知道所有具有该决定因素的FD。)有一种算法可以找到它。如果答案FD决定因素是F中的决定因素,那么我们可以计算其在R中的闭包,以查看它的答案FD是否也存在于R中。

如果FD的决定因素中没有一个作为F中的决定因素出现,那么我们将不得不开始在F +中生成FD,直到我们得到一个具有决定因素的FD,这也是答案中的决定因素。然后我们可以应用上一步。