0

Q. 已知对于 R(A,B,C,D,E):

  1. R 正好有 5 个超级键。
  2. ABC 是候选键。
  3. D 是非主属性。
  4. ABE 和 ACE 不是超级键。

是否有另一个候选键?如果是这样,它是什么?

编辑:问题的问题是确定 R(A,B,C,D,E) 除了 ABC 中是否还有另一个候选键,考虑到 1,2,3,4 条件成立。

我的方法是,根据第二个条件 ABC 是候选键,那么超级键是:ABC、ABCD、ABCE、ABCDE。

但是第一个条件说正好有 5 个超级键,这意味着第 5 个超级键可能是另一个候选键。根据第 3 和第 4 条条件,唯一的其他 SK/CK 可能是 BCE,因为 ACE 和 ABE 不能是 SK。

但是如果 BCE 是一个候选密钥 BCDE 应该是一个超级密钥,这样总共有 6 个超级密钥并且违反了第一个条件。

我不确定我哪里出错了。请帮我分析一下。

4

1 回答 1

1

让我们尝试详细说明解决问题的步骤。

有 2 5 (= 32) 个可能的属性子集:

{{}, A, B, C, D, E, AB, AC, AD, AE, BC, BD, BE, CD, CE, DE, ABC, ABD, ABE,
 ACD, ACE, ADE, BCD, BCE, BDE, CDE, ABCD, ABCE, ABDE, ACDE, BCDE, ABCDE}

我们正在寻找与 ABC 不同的候选键,了解您提到的事实。

  1. ABC 是候选键。

如果 ABC 是候选键,那么它的任何子集都不能是候选键。这排除了将 {}、A、B、C、AB、AC、BC 作为候选键的可能性。类似地,它的每个超集都不能是候选键。这不包括 ABCD、ABCE、ABCDE。

所以我们现在有以下可能的候选键:

{D, E, AD, AE, BD, BE, CD, CE, DE, ABC, ABD, ABE,
 ACD, ACE, ADE, BCD, BCE, BDE, CDE, ABDE, ACDE, BCDE}
  1. D 是非主属性。

D 不是主要属性,因此它可以包含在超级键中,但不能包含在候选键或其中的一部分中。这意味着如果 D 存在于一组属性中,则该集合不能是候选键。因此,这将 D、AD、BD、CD、DE、ABD、ACD、ADE、BCD、BDE、CDE、ABCD、ABDE、ACDE、BCDE 排除在候选键之外。

我们现在有以下可能的候选键:

{E, AE, BE, CE, ABC, ABE, ACE, BCE}
  1. ABE 和 ACE 不是超级键。

由于 ABE 和 ACE 不是超级键,它们也不是候选键,当然它们的子集都不是候选键。因此,这也排除了 E、AE、BE、CE、ABE、ACE。

所以我们现在有以下可能的候选键:

{ABC, BCE}

我们已经知道 ABC 是候选键,所以唯一剩下的可能性是 BCE 是候选键。

但我们知道:

  1. R 正好有 5 个超级键。2. ABC 是候选键。

从这两个事实可以得出,ABC、ABCE、ABCD、ABCDE 是四个超键。只剩下一个了。

因此,如果 BCE 是候选键,正如您已经指出的,这意味着 BCE 和 BCDE 也是超级键。我们有六个不同的超级键,这与假设相矛盾。

另一方面,如果 BCE 不是候选密钥,那么我们只有四个超级密钥,这也与假设相矛盾。

所以,我们可以说不可能给出这个问题的答案。最后请注意,如果我们假设“超级键”具有不寻常的含义,我们也无法解决它,因为它有时会被使用:即严格的超级键,一组严格包含键的属性。在这种情况下,如果 BCE 是候选键,我们又有四个超键:ABCE、ABCD、ABCDE 和 BCDE。另一方面,如果 BCE 不是候选键,我们只有三个超级键:ABCE、ABCD 和 ABCDE。

于 2018-12-09T15:32:26.450 回答