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