考虑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->A
,BA->B
(琐碎),因为A->D
所以BA->D
因为D->C
我们得到BA->C
。
但是,我们如何获得E
?
答案 0 :(得分:1)
调整https://stackoverflow.com/a/14595217/3591273
的答案由于我们有函数依赖:BC->AE, A->D, D->C, ABD->E
,我们有以下超级密钥:
ABCDE
(所有属性始终是超级密钥)ABCD
(我们可以通过E
获取属性ABD -> E
)ABC
(只需添加D
至A -> D
)ABD
(只需添加C
至D -> C
)AB
(我们可以通过D
获得A -> D
,然后我们可以通过C
获取D -> C
)BC
(我们可以通过E
获得BC -> E
,然后我们可以通过C
获取D -> C
)BD
(我们可以通过C
获得D -> C
,然后我们可以通过AE
获取BC -> AE
)(这里要弄清楚的一点是,由于B
永远不会出现在功能依赖项的右侧,因此每个键必须包含B
,即键{{ 1}} 独立且无法从其他键派生)
现在我们拥有了所有的超级密钥,我们只能看到最后一个 三个是候选键。因为前四个都可以修剪 下。但我们不能从过去的三个方面拿走任何属性 超级钥匙仍然让他们仍然是超级钥匙。
所以最小键是B
,AB
,BC
更新
这是一个减少方法,即通过使用函数依赖来连续减少普通的超级密钥,但是可以采取相反的方式并使用增强方法,即启动使用单个平凡键并使用其他键增加它们依赖关系,直到键变得超级