了解候选人密钥

时间:2015-12-13 15:01:46

标签: database key 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

1 个答案:

答案 0 :(得分:1)

调整https://stackoverflow.com/a/14595217/3591273

的答案

由于我们有函数依赖:BC->AE, A->D, D->C, ABD->E,我们有以下超级密钥:

  • ABCDE(所有属性始终是超级密钥)
  • ABCD(我们可以通过E获取属性ABD -> E
  • ABC(只需添加DA -> D
  • 即可
  • ABD(只需添加CD -> C
  • 即可
  • AB(我们可以通过D获得A -> D,然后我们可以通过C获取D -> C
  • BC(我们可以通过E获得BC -> E,然后我们可以通过C获取D -> C
  • BD(我们可以通过C获得D -> C,然后我们可以通过AE获取BC -> AE

(这里要弄清楚的一点是,由于B 永远不会出现在功能依赖项的右侧,因此每个键必须包含B,即键{{ 1}} 独立且无法从其他键派生

  

现在我们拥有了所有的超级密钥,我们只能看到最后一个   三个是候选键。因为前四个都可以修剪   下。但我们不能从过去的三个方面拿走任何属性   超级钥匙仍然让他们仍然是超级钥匙。

所以最小键是BABBC

更新

这是一个减少方法,即通过使用函数依赖来连续减少普通的超级密钥,但是可以采取相反的方式并使用增强方法,即启动使用单个平凡键并使用其他键增加它们依赖关系,直到键变得超级