给定关系 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/