【问题标题】:Understanding candidate key了解候选键
【发布时间】:2015-12-13 15:01:45
【问题描述】:

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

我在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

【问题讨论】:

  • 该算法是一种计算最小覆盖集的算法,即覆盖所有依赖关系并且在具有相同属性的其他集中最小的集
  • "但是,我们如何得到 E?",你没有使用所有的依赖关系,如果你这样做了,你会到达E
  • @NikosM。你能指出我错过的关系吗?

标签: database key candidate-key


【解决方案1】:

改编来自https://stackoverflow.com/a/14595217/3591273的答案

由于我们有函数依赖: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独立且不能从其他键派生

现在我们有了所有的超级键,我们可以看到只有最后一个 三是候选键。由于前四个都可以修剪 向下。但是我们不能从最后三个中删除任何属性 超级键,并且仍然让它们保持超级键。

所以最小的键是ABBCBD

更新

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

【讨论】:

  • * AB (我们可以通过A -> D 得到D,然后我们可以通过D -> C 得到C)但是我们如何得到E?
  • @user3729959,见上面那条线,即通过ABD -> E 这是一种递归,你明白吗?
  • @user3729959,一旦我们有了ABD,我们就可以得到E,好的
猜你喜欢
  • 2015-02-05
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多