让我们尝试详细说明解决问题的步骤。
有 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 不同的候选键,了解您提到的事实。
- 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}
- 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}
- ABE 和 ACE 不是超级键。
由于 ABE 和 ACE 不是超级键,它们也不是候选键,当然它们的子集都不是候选键。因此,这也排除了 E、AE、BE、CE、ABE、ACE。
所以我们现在有以下可能的候选键:
{ABC, BCE}
我们已经知道 ABC 是候选键,所以唯一剩下的可能性是 BCE 是候选键。
但我们知道:
- R 正好有 5 个超级键。2. ABC 是候选键。
从这两个事实可以得出,ABC、ABCE、ABCD、ABCDE 是四个超键。只剩下一个了。
因此,如果 BCE 是候选键,正如您已经指出的,这意味着 BCE 和 BCDE 也是超级键。我们有六个不同的超级键,这与假设相矛盾。
另一方面,如果 BCE 不是候选密钥,那么我们只有四个超级密钥,这也与假设相矛盾。
所以,我们可以说不可能给出这个问题的答案。最后请注意,如果我们假设“超级键”具有不寻常的含义,我们也无法解决它,因为它有时会被使用:即严格的超级键,一组严格包含键的属性。在这种情况下,如果 BCE 是候选键,我们又有四个超键:ABCE、ABCD、ABCDE 和 BCDE。另一方面,如果 BCE 不是候选键,我们只有三个超级键:ABCE、ABCD 和 ABCDE。