考虑R(ABCDE)
与以下FD&#39>的关系:
将这些FD投射到S(ABCD)
的关系上。以下哪个FD在预测的关系中成立?
上述问题中的措辞直接从作业中复制
正确的答案是3。
因为最后3个FD包含E,所以我认为它们不会在R(ABCD)的投影中保持。所以这让我失望了
AB -> C
和BC -> D
我无法弄清楚如何从我当前的流程中确定正确的答案。
答案 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,这也是答案中的决定因素。然后我们可以应用上一步。