问:众所周知,对于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 回答
让我们尝试详细说明解决问题的步骤 .
属性有25(= 32)个可能的子集:
我们正在寻找与ABC不同的候选键,知道您提到的事实 .
如果ABC是候选键,那么它的任何子集都不能是候选键 . 这排除了将{},A,B,C,AB,AC,BC作为候选键的可能性 . 类似地,它的每个超集都不能成为候选键 . 这排除了ABCD,ABCE,ABCDE .
所以我们现在有以下可能的候选键:
D不是主要属性,因此它可以包含在超级密钥中,但不能包含在候选密钥或部分密钥中 . 这意味着如果D存在于一组属性中,则该集合不能是候选键 . 因此,这不包括D,AD,BD,CD,DE,ABD,ACD,ADE,BCD,BDE,CDE,ABCD,ABDE,ACDE,BCDE作为候选键 .
我们现在有以下可能的候选键:
由于ABE和ACE不是超级密钥,因此它们也不是候选密钥,当然它们的子集都不是候选密钥 . 因此,这也排除了E,AE,BE,CE,ABE,ACE .
所以我们现在有以下可能的候选键:
我们已经知道ABC是候选键,所以唯一剩下的可能性是BCE是候选键 .
但我们知道:
从这两个事实可以看出,ABC,ABCE,ABCD,ABCDE是四个超级密钥 . 只有一个人失踪了 .
因此,如果BCE是候选键,正如您已经注意到的那样,这意味着BCE和BCDE也是超级键 . 我们有六个不同的超级密钥,这与假设相矛盾 .
另一方面,如果BCE不是候选密钥,那么我们只有四个超级密钥,这也与假设相矛盾 .
所以,我们可以说不可能回答这个问题 . 最后请注意,如果我们假设“超级密钥”的非常规含义,我们也无法解决它,因为它有时会被使用:即严格的超级密钥,一组严格包含密钥的属性 . 在这种情况下,如果BCE是候选键,我们又有四个超级键:ABCE,ABCD,ABCDE和BCDE . 另一方面,如果BCE不是候选键,我们只有三个超级键:ABCE,ABCD和ABCDE .