首页 文章

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

提问于
浏览
0

问:众所周知,对于R(A,B,C,D,E):

  • R恰好有5个超级密钥 .

  • ABC是候选键 .

  • D是非素数属性 .

  • ABE和ACE不是超级密钥 .

Is there another candidate key? If so, what is it?

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

My approach 是,根据第二个条件ABC是候选键,那么超级键是:ABC,ABCD,ABCE,ABCDE .

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

但是如果BCE是一个候选键,BCDE应该是一个超级键,这使得总共有6个超级键并且违反了第一个条件 .

我不确定我哪里出错了 . 请帮我分析吧 .

1 回答

  • 0

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

    属性有25(= 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个超级密钥 . ABC是一个候选键 .

    从这两个事实可以看出,ABC,ABCE,ABCD,ABCDE是四个超级密钥 . 只有一个人失踪了 .

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

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

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

相关问题