确定功能依赖关系中的键

Dav*_*vid 45 database functional-dependencies

我正在学习数据库理论课程,在阅读之后我不清楚如何在给定一组函数依赖项的情况下推断出键.

我有一个示例问题:

查找具有功能依赖关系的关系R(ABCDEFG)的所有键

AB ? C
CD ? E
EF ? G
FG ? E
DE ? C
BC ? A
Run Code Online (Sandbox Code Playgroud)

通过确定以下哪一项是关键来证明您的知识.

a. BCDEF             
b. ADFG           
c. BDFG           
d. BCDE 
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何分解功能依赖关系以得出某些属性组合是关键的结论吗?我希望我会遇到很多这类问题,我需要了解如何处理它.

Erw*_*out 31

拿FD,例如AB→C

增加直到提到所有属性,例如ABDEFG→CDEFG(请注意,这相当于ABDEFG→ABCDEFG,因为A-> A和B-> B非常简单).

这告诉你ABDEFG是一个超级键.

检查LHS是超级密钥子集的其他FD,其RHS上包含超级密钥的其他一些属性.

那里有两个.EF→G和FG→E.从超级密钥中删除这些RHS的属性.这样做会给你两把钥匙,肯定是超级钥匙,但不一定是不可减少的钥匙:ABDEF和ABDFG.

但是,从AB→C和CD→E我们也可以推导出ABD→E.因此我们也可以从ABDEF键中删除E. 这里令人讨厌的是,当我说"检查其他FD"时,这显然意味着你还应该检查出现在你的FD集合中的任何FD(即可以从你给定的FD集合中导出的任何FD) ......手工做有点不切实际......

一个有用的网站,用于验证您的结果是否正确:

http://www.koffeinhaltig.com/fds/ueberdeckung.php

您现在应该能够确定选项c是一个键.

UPDATE

链接现在已经破了,不知道该网站已经去了哪里.也许你仍然可以在跟踪互联网历史的网站上找到有用的东西.

  • 有趣的是,你在同一天,四年后更新了你的答案:)除此之外,很好的解释. (2认同)