【问题标题】:Candidate Key Identification with Functional Dependencies具有功能依赖关系的候选密钥识别
【发布时间】:2011-12-08 13:57:59
【问题描述】:

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

给定一个关系 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。为什么这是真的,任何人都可以阐明在找到解决这些问题的关键时采取的步骤吗?

谢谢。

【问题讨论】:

    标签: relational-database relation functional-dependencies candidate-key


    【解决方案1】:

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

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

    【讨论】:

    • 等等,这是否意味着在给定 FD 右侧找不到的关系中的任何属性都将成为键,因为您无法从任何 FD 推断它们?你怎么能确定呢?
    • @user924199:不,这意味着在任何 FD 右侧找不到的任何属性都必须是每个键的一部分。
    • 抱歉,您能解释一下为什么会这样吗?另外,作为另一个示例,如果给定 AB -> C 和 C -> D,则在这种情况下唯一的键是 AB,对,因为通过传递属性 AB -> D,因此 C 不是键?假设这是真的,为什么键不能分别是 A、B?
    • 对不起,不,你没有完全正确。让我们让它不那么抽象一点。假设您有一个包含字段 A、B、C 和 D 的数据库表,其中 C = abs(A - B) 和 D = floor(C)。例如,如果 A = 2.1 且 B = -3.4,则 C = 1.3,因此 D = 1。则 AB → C 和 C → D:如果两条记录具有相同的 A 和 B,则它们具有相同的 C,并且如果它们有相同的C,那么它们有相同的D。因此:如果它们有相同的A和B,那么它们是完全相同的,所以AB是一个超键。 (续)
    • (续) 但是两条记录可以有相同的A,也可以有相同的B,也可以有相同的C,而在其他领域不同;所以 A、B 和 C 都不是超键。如果你玩了一会儿,你应该能够明白为什么唯一的超级键是 AB、ABC、ABD 和 ABCD。其中,唯一的 候选键 是 AB,因为其他超级键都包含 AB(因此,它们包含的字段比它们需要的多)。这有意义吗?
    【解决方案2】:

    一个更正式一点的程序。

    拿一个 FD,例如(示例 2),AB -> CD。

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

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

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

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

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

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

    【讨论】:

    • 这个答案,如果可行的话,会好得多,因为它是关于算法而不仅仅是具体案例。
    【解决方案3】:

    参考 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

    【讨论】:

    • 请不要回答重复的问题,将它们标记/投票为重复。
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 2018-04-24
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2016-03-24
    相关资源
    最近更新 更多