给出具有ABCDE属性的Relation R.您将获得以下依赖项:A - > B,BC - > E和ED - >答:我已经有了CDE,ACD和BCD的答案。我只需要知道如何做到这一点。谢谢。
答案 0 :(得分:67)
候选键是最小的超级键。换句话说,密钥中没有超级属性。找到候选键的第一步是找到所有超级键。对于那些不熟悉的人,超级键是一组属性,其闭包是所有属性的集合。换句话说,超级键是一组可以从中开始的属性,并且遵循功能依赖性,将引导您到包含每个属性的集合。
由于我们具有功能依赖性:A - > B,BC - > E和ED - > A,我们有以下超级密钥:
(这里要弄清楚的一点是,因为C和D永远不会出现在函数依赖的右侧,所以每个键都必须同时包含C和D)
现在我们拥有了所有的超级密钥,我们可以看到只有最后三个是候选密钥。因为前四个都可以减少。但是我们不能从最后三个超级密钥中取出任何属性,仍然让它们仍然是超级密钥。
因此候选键是:ACD,BCD和CDE。
希望有所帮助,
答案 1 :(得分:10)
要查找候选键,您需要将FD分为左,中,右三个属性 - 左侧包含仅显示在左侧(CD)的属性 - 中间包括左右两侧显示的属性(ABE) - 权利包括只出现在右侧(无)的属性
现在从左边找到属性的闭包: * CD + - >光盘 由于我们没有得到关系的所有属性,我们需要一次添加一个Middle属性(ABE)并尝试再次找到闭包。
所以: * CDA + - > CDABE(CDA是候选键) * CDB + - > CDBEA(CDB是候选键) * CDE + - > CDEAB(CDE是候选键)
答案 2 :(得分:0)
使用算法;
1.取任何属性或属性集
例如:ACD
2.采取第一个提到的功能依赖
例如:A - >乙
3.依赖关系的L.H.S是您在步骤1中选择的属性的子集吗?
如果是,则将函数依赖项的R.H.S添加到属性中。 如果不是,请忽略此功能依赖。
例如:A是ACD的子集。所以将B添加到ACD。 ACD现在是ABCD
4.现在转到下一个功能依赖。重复步骤3.
例如:BC - > Ë BC是ABCD的子集。所以ABCD现在是ABCDE
5.如果您现在拥有所有属性,则可以停止。
如果您没有所有属性,请继续执行下一个功能依赖项并重复步骤3.如果您已达到最后一个功能依赖项并且没有所有属性,请返回第一个功能依赖项,重复步骤3和4.在这个循环中继续循环,直到您不再使用重复步骤3的功能依赖性来改变属性集。
例如:由于我有属性集ACD的ABCDE,我可以停止。
如果您拥有所有属性,则拥有超级密钥。 例如:ACD是超级密钥,因为我有ABCDE。
答案 3 :(得分:-4)
CD是候选键,因此ACD,BCD,CDE都可以作为候选键。 C,D不出现在任何功能依赖的右侧,这就是CD为候选键的原因。
This会帮助您理解。