还有另一个候选密钥吗?如果是,那是什么?

时间:2018-12-09 01:14:31

标签: database database-design relational-database candidate-key

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

  1. R恰好有5个超级键。
  2. ABC是候选密钥。
  3. D是非素数属性。
  4. ABE和ACE不是超级键。

还有另一个候选密钥吗?如果是,那是什么?

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

我的方法是,根据第二个条件,ABC是候选密钥,然后超级密钥是:ABC,ABCD,ABCE,ABCDE。

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

但是,如果BCE是候选密钥,则BCDE应该使用超级密钥,这将使总共6个超级密钥并违反第一条件。

我不确定自己哪里出了问题。 请帮助我正确分析。

1 个答案:

答案 0 :(得分: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是候选密钥。
  2.   

如果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是非素数属性。
  2.   

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不是超级键。
  2.   

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

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

{ABC, BCE}

我们已经知道ABC是候选密钥,因此唯一剩下的可能性是BCE是候选密钥。

但是我们知道:

  
      
  1. R具有5个超级键。 2. ABC是候选密钥。
  2.   

从这两个事实可以得出,ABC,ABCE,ABCD,ABCDE是四个超级键。只有一个失踪了。

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

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

因此,我们可以说不可能给出这个问题的答案。最后要注意的是,如果我们假设“超级键”具有非通常的含义(也有时无法使用),那么我们也无法解决它,即严格的超级键,即一组严格包含键的属性。在这种情况下,如果BCE是候选密钥,我们将再次拥有四个超级密钥:ABCE,ABCD,ABCDE和BCDE。另一方面,如果BCE不是候选密钥,则我们只有三个超级密钥:ABCE,ABCD和ABCDE。