database - 计算给定函数依赖性的候选键

标签 database functional-dependencies

给定关系 R(A B C D E F G) 上的以下函数依赖

AB → CF
BG → C
AEF → C
ABG → ED
CF → AE
A → CG
AD → FE
AC → B

我已经通过使用将属性放入左列、中列、右列的方法来计算出候选键,具体取决于它是否出现在依赖项的左侧、右侧或两者上。左边表示该属性是必需的,中间是未知的,右边表示不是键的一部分。

我得到了这个:

L | M       | R
--|---------|----
- | ABCDEFG | - 

从这里我计算出每个属性的闭包和排列:BC、BD、BE、BF、BG、CD、CF...

我发现只有 A 和 CF 的闭包包含所有属性,因此是候选键,但问题的解决方案也有 BFG。

有人可以解释我在计算候选键时做错了什么吗? 谢谢

最佳答案

This algorithm尝试找到快捷方式(第 3 页),但在您的情况下它找不到任何快捷方式。要确定任何特定的属性组合是否是关键,您需要尝试弄清楚该组合是否决定所有其他属性。就您而言,您已经完成了所有工作;你只是错过了一些关于 BFG 的事情。

Logic                                    Attributes
--
BFG -> BFG, ∴ ...                       { B   FG}
BG -> C, ∴ BFG -> CF                    { BC  FG}
BFG -> CF and CF -> AE, ∴ BFG -> AE     {ABC EFG}
BFG -> AE,  ∴  BFG -> A
BFG -> A and ABG -> ED, ∴ BFG -> ED     {ABCDEFG}

所以 BFG 是一个候选键。

关于database - 计算给定函数依赖性的候选键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10182238/

相关文章:

haskell - 为什么这个 Haskell 代码使用fundeps 进行类型检查,但对类型族产生不可触碰的错误?

mysql - 数据库 : Lossless decomposition and natural join

database - 部分依赖(数据库)

python - Django-如何映射用户之间发送的消息

database - 使用 Liferay 向多对多表添加列

java - 使用 Mapstruct 作为 JOOQ 的 RecordMapper

php - 如何实现搜索算法

database - 用户消息关系的功能依赖

haskell - 类型族卡在使用函数依赖的等效类型可以简化的地方

java - 无法从 Hibernate 项目将行插入 H2 数据库