database - 了解候选键

标签 database key candidate-key

考虑 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 呢?

最佳答案

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

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

  • ABCDE (所有属性始终是 super 键)
  • 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 ,即键 B独立且不能从其他 key 派生)

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.

所以最小键是AB , BC , BD

更新

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

关于database - 了解候选键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252455/

相关文章:

python - 从数据库中获取此信息的最有效方法是什么?

mysql - 查找候选键/ super 键

java - 如何在属性文件中将空字符串设置为 MYSQL 数据库的密码。

mysql - 无法使用 phpmyadmin 向导将 csv 导入 mysql 数据库

java - 在 JLabel 中显示 OSX 命令符号键

google-app-engine - 获取 Objectify 实体的 key

relational-database - 什么是部分依赖

database - 质数属性可以有空值吗?

php - 最喜欢的帖子脚本

python - 获取嵌套字典中所有二阶键的列表