来自功能依赖的候选键

时间:2010-04-27 02:54:40

标签: functional-dependencies database-theory

给出具有ABCDE属性的Relation R.您将获得以下依赖项:A - > B,BC - > E和ED - >答:我已经有了CDE,ACD和BCD的答案。我只需要知道如何做到这一点。谢谢。

4 个答案:

答案 0 :(得分:67)

候选键是最小的超级键。换句话说,密钥中没有超级属性。找到候选键的第一步是找到所有超级键。对于那些不熟悉的人,超级键是一组属性,其闭包是所有属性的集合。换句话说,超级键是一组可以从中开始的属性,并且遵循功能依赖性,将引导您到包含每个属性的集合。

由于我们具有功能依赖性:A - > B,BC - > E和ED - > A,我们有以下超级密钥:

  • ABCDE(所有属性始终是超级密钥)
  • BCED(我们可以通过ED获得属性A - > A)
  • ACDE(只需添加B到A - > B)
  • ABCD(只需通过BC添加E - > E)
  • ACD(我们可以通过A - > B获得B,然后我们可以通过BC获得E - > E)
  • BCD(我们可以通过BC获得E - > E,然后从ED获得A - > A)
  • CDE(我们可以通过ED获得A - > A,然后从A获得B - > B>

(这里要弄清楚的一点是,因为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会帮助您理解。