31

给定具有属性 ABCDE 的关系 R。您将获得以下依赖项:A -> B、BC -> E 和 ED -> A。我已经有了 CDE、ACD 和 BCD 的答案。我只需要知道该怎么做。谢谢。

4

4 回答 4

85

候选键是最小的超键。换句话说,键中没有多余的属性。找到候选键的第一步是找到所有的超级键。对于那些不熟悉的人,超级键是一组属性,其闭包是所有属性的集合。换句话说,超级键是您可以开始的一组属性,并且遵循功能依赖关系,将引导您找到包含每个属性的集合。

由于我们有函数依赖关系:A -> B、BC -> E 和 ED -> A,我们有以下超键:

  • ABCDE(所有属性始终是超级键)
  • BCED(我们可以通过 ED -> A 得到属性 A)
  • ACDE(只需通过 A -> B 添加 B)
  • ABCD(只需添加 E 到 BC -> E)
  • ACD(我们可以通过 A -> B 得到 B,然后我们可以通过 BC -> E 得到 E)
  • BCD(我们可以通过 BC -> E 得到 E,然后从 ED -> A 得到 A)
  • CDE(我们可以通过 ED -> A 获得 A,然后从 A -> B 获得 B)

(这里要实现的一个技巧是,由于 C 和 D 永远不会出现在函数依赖的右侧,因此每个键都必须包含 C 和 D)

现在我们有了所有的超级键,我们可以看到只有最后三个是候选键。由于前四个都可以修剪下来。但是我们不能从最后三个超级键中删除任何属性,并且仍然让它们仍然是超级键。

因此候选键是:ACD、BCD 和 CDE。

希望有帮助,

于 2013-01-30T01:30:52.643 回答
11

要找到候选键,您需要将 FD 拆分为左、中、右的属性 - 左包括仅显示在左侧 (CD) 的属性 - 中包括显示在左右两侧的属性 ( ABE) - 右侧包括仅显示在右侧的属性(无)

现在从左边找到属性的闭包: * CD+ -> CD 由于我们没有得到关系的所有属性,我们需要一次添加一个中间属性(ABE)并尝试再次找到闭包。

所以: * CDA+ -> CDABE(CDA 是候选键) * CDB+ -> CDBEA(CDB 是候选键) * CDE+ -> CDEAB(CDE 是候选键)

于 2014-05-01T17:18:03.610 回答
1

使用算法;

1.获取任何属性或属性集

例如:ACD

2.取第一个提到的函数依赖

例如:A -> B

3. 依赖项的 LHS 是您在步骤 1 中选择的属性的子集吗?

如果是,则将功能依赖的 RHS 添加到属性中。如果否,则忽略此功能依赖。

例如:A 是 ACD 的一个子集。所以将 B 添加到 ACD。ACD 现在是 ABCD

4.现在转到下一个函数依赖。重复步骤3。

例如:BC -> E BC 是 ABCD 的子集。所以 ABCD 现在是 ABCDE

5.如果你现在拥有所有属性,你可以停止。

如果你没有所有属性,继续下一个函数依赖并重复步骤 3。如果你到达最后一个函数依赖并且没有所有属性,返回第一个函数依赖并重复步骤 3 和 4 . 继续在这个循环中循环,直到无论您重复步骤 3 的功能依赖关系如何,您所拥有的属性集都不会改变。

例如:因为我有属性集 ACD 的 ABCDE,所以我可以停下来。

如果您拥有所有属性,则您有一个超级键。例如: ACD 是超级键,因为我有 ABCDE。

于 2018-03-28T14:24:55.220 回答
-6

CD是候选键,所以ACD、BCD、CDE都可以是候选键。C,D 不会出现在任何函数依赖项的右侧,这就是 CD 是候选键的原因。

将帮助您理解。

于 2010-12-24T12:15:41.207 回答