来自功能依赖的候选键

ran*_*nzy 26 database-theory functional-dependencies

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

lbr*_*anl 68

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

由于我们有函数依赖: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.

希望有所帮助,


小智 10

要找到候选键,您需要将FD分为左,中,右 - 左 - 包括仅显示在左侧(CD)的属性 - 中间包括左右两侧显示的属性( ABE) - 该权利包括仅出现在右侧(无)的属性

现在从左边找到属性的闭包:*CD + - > CD由于我们没有得到关系的所有属性,我们需要一次添加一个Middle属性(ABE)并尝试再次找到闭包.

所以:*CDA + - > CDABE(CDA是候选键)*CDB + - > CDBEA(CDB是候选键)*CDE + - > CDEAB(CDE是候选键)


小智 -6

CD是候选键,所以ACD、BCD、CDE都可以是候选键。C、D 不会出现在任何函数依赖关系的右侧,这就是为什么 CD 是候选键。

将帮助您理解。

  • CD 不是候选键。属性 C 和 D 不会出现在任何函数依赖的右侧。这并不意味着 CD 是候选键。这意味着每个候选键必须包含 {CD}。 (10认同)