了解候选键

Understanding candidate key

考虑R(A,B,C,D,E) F = {BC->AE, A->D, D->C, ABD->E}。 我需要找到架构的所有候选键。 我知道 BABCBD 是键,但我想知道如何发现它们。

我在 candidate keys from functional dependencies = 中看到了一些答案,但我没有完全理解它们。 根据他们的建议,我得到了 L={B}M={A,C,D}R={E} 现在我需要从 M 一次添加一个到 L。 我从 A 开始,得到 BA。所以 BA->ABA->B(微不足道)并且因为 A->D 所以 BA->D 并且因为 D->C 我们得到 BA->C。 但是,我们如何得到 E

调整来自

的答案

因为我们有函数依赖:BC->AE, A->D, D->C, ABD->E,我们有以下超级键:

  • ABCDE(所有属性永远是超级键)
  • ABCD(我们可以通过ABD -> E得到属性E
  • ABC(只需添加 DA -> D
  • ABD(只需添加 CD -> C
  • AB(我们可以通过A -> D得到D,然后通过D -> C得到C
  • BC(我们可以通过BC -> E得到E,然后通过D -> C得到C
  • BD(我们可以通过D -> C得到C,然后通过BC -> AE得到AE

(这里要实现的一个技巧是,由于 B 从未出现在函数依赖项的右侧 ,因此每个键都必须包含 B ,即键B独立的,不能从其他键派生)

Now that we have all our super keys, we can see that only the last three are candidate keys. Since the first four can all be trimmed down. But we cannot take any attributes away from the last three superkeys and still have them remain a superkey.

所以最小键是 ABBCBD

更新

这是一种缩减方法,即通过使用函数依赖性连续减少琐碎的超级键,但也可以采取相反的方式并使用扩充方法,即从单个简单的键开始,然后用其他键增加它们 wrt 依赖关系,直到键变得多余