1

我无法理解如何识别功能依赖项中的键。我一直在看例子,例如:

给定关系 ABCD,找出不包括

A -> BC, C -> D, CD -> AB.

这给出了键 C 和 A。我认为解决这个问题的方式是 BC 和 D 都依赖于 A 和 C,而 AB 依赖于 CD,这意味着它们三个都是键,但是由于 CD 是超级键(C 是一个子集也是一个键),CD 不被视为最小超键。

然而,在另一个例子中,

ABCDE
AB → CD
E → A
D → A

这里唯一的关键显然是 BE。为什么这是真的,任何人都可以澄清寻找解决这些问题的关键的步骤吗?

谢谢。

4

3 回答 3

6

一个更正式一点的程序。

以 FD 为例,例如(示例 2),AB -> CD。

使用普通的 FD 来增强它,直到您拥有 RHS 上的所有属性。

您在 RHS 上缺少 ABE,因此您必须使用琐碎的 FD ABE -> ABE 来增加 ABE -> ABCDE。

这告诉您 ABE 是一个超级键,因为知道 ABE 某一行中的值将足以确定该行中所有属性的值。

现在检查 OTHER FD,看看它们中的任何一个是否允许您在这种情况下降低 LHS (ABE)。E -> A 允许您从 ABE 中删除 A,因此只保留 BE -> ABCDE。减少的规则是:如果另一个 FD (E) 的 LHS 是您尝试减少的超级密钥 (ABE) 的适当子集,那么您可以从超级密钥中删除仅在 RHS 中提到的所有属性其他 FD(如果您正在查看“其他”FD,例如 E -> EA !!!),则无法删除 E。

此过程不适用于机械实施,因为您可能还需要查看其他 FD 的“组合”。然而,大多数用例甚至大多数编造的课堂练习通常都不够复杂,不会导致此过程失败(即,给您留下一个适当的超级密钥,而不是一个不可约的超级密钥)。

(PS 要查找所有密钥,您需要将其应用于所有给定的 FD)

于 2011-10-16T23:38:19.700 回答
5

第二个比较简单,所以先来。. . 您知道 B 必须在任何键中,因为它不在任何右侧。(也就是说,即使你有 ACDE 的值,你也无法推断出 B 的值。)对于 E 也是如此;因此,任何键都必须包含 BE。但是 BE 本身就是一个足够的键,因为 E 给了你 A(因此 BE → ABE)而 AB 给了你 CD(因此 BE → ABCDE)。

在第一个中,我们可以看到 A 是密钥,因为 A 给了你 B 和 C,C 给了你 D。同样,C 是密钥,因为 C 给了你 D,C 和 D 一起给了你 A 和B. 相反,我们看到 A 和/或 C 必须在任何键中,因为每个左侧都至少包含其中一个。

于 2011-10-16T03:18:29.677 回答
0

在此处输入图像描述

参考 http://www.ict.griffith.edu.au/~jw/normalization/assets/Functional%20Dependencies%20and%20Normalization.pdf

算法证明(简短明了,第 3 节)
H. Saiedian 和 T. Spencer,“计算关系数据库模式的候选键的有效算法” ,计算机杂志,卷。39,没有。2,1996 年 2 月 [在线]。可用:https ://pdfs.semanticscholar.org/ab3f/f65010b50d78d583b1c2b6ce514fa072d23d.pdf 。[访问时间:2019 年 7 月 31 日]

视频解说
https://www.youtube.com/watch?v=s1DNVWKeQ_w

于 2019-08-04T05:36:20.097 回答