找到关系中最大数量的候选键?

时间:2016-12-12 18:56:46

标签: sql functional-dependencies candidate-key

我正在尝试解决这个与关系中的候选键有关的问题。 这是个问题:

    Consider table R with attributes A, B, C, D, and E. What is the largest number of
candidate keys that R could simultaneously have?

答案是10,但我不知道它是如何完成的,在计算答案时该单词是如何同时生效的。

2 个答案:

答案 0 :(得分:2)

设置不是其他集的子集 例如{A-B}和{A,B,C}不能同时成为候选键,因为{A,B}是{A,B,C}的子集。
2个属性或3个属性的组合生成最大同时候选键数 了解3个属性集如何实际上是2个属性集的补充,例如{C,D,E}是{A,B}的补充。

         2               3    
     attributes      attributes
       sets            sets

   1.  {A,B}    -     {C,D,E}
   2.  {A,C}    -     {B,D,E}
   3.  {A,D}    -     {B,C,E}
   4.  {A,E}    -     {B,C,D}
                -     
   5.  {B,C}    -     {A,D,E}
   6.  {B,D}    -     {A,C,E}
   7.  {B,E}    -     {A,C,D}
                -     
   8.  {C,D}    -     {A,B,E}
   9.  {C,E}    -     {A,B,D}
                -     
   10. {D,E}    -     {A,B,C}

如果我将采用单个属性的集合,我将只有4个选项

{A},{B},{C},{D}

任何包含多于1个元素的集合都将包含上述元素之一,因此不会被限定。

如果我将采用4组属性,那么我只有4个选项

{A,B,C,D},{A,B,C,E},{A,B,D,E},{B,C,D,E}

任何超过4个元素的集合都将包含上述元素之一,因此不会被限定。 任何少于4个元素的集合将包含在上述之一中,因此不会被限定。

答案 1 :(得分:2)

对于5个键,最好通过蛮力来做到这一点。理解这些想法比计算更重要(DuDu / David给出了10个候选键的一个很好的例子,表明一组10个键是可能的,所以最大值至少是这么大)。

这是什么想法?候选键是唯一的属性组合。因此,如果A是唯一的,则A与任何其他列也是唯一的。一组候选键只是:

  • A
  • C
  • d
  • 电子

如果其中每个都是唯一的,那么任何键的组合将至少包含其中一个属性,并且该组合也将是唯一的。因此,这五者的独特性意味着任何其他组合的独特性。

5不是具有此属性的最大候选键数。

它变得有点复杂。如果{A,B,C,D,E}是唯一的(并且没有子集是候选键),则恰好有1个候选键。重新排列列不会更改集(集合是无序的)。

我们可能假设的一件事是,最大的候选键集具有全部相同长度的键。事实上这是事实。为什么?好吧,如果我们有一组长度不同的键,我们可以通过添加任意属性来延长较短的键,并且仍然具有最大值。

因此,您只需要准确地考虑1,2,3,4和5个键的子集。当你解决问题时,你会发现最大数字是:

5 10 10 5 1

您可以添加" 1"到了开始,你可能会认出这种模式。这是Pascal's Triangle的一行。这种观察(以及相关证据)实际上可以很容易地确定任何给定n的最大值。

顺便提一下,长度为3的集合是:

A B C
A B D
A B E
A C D
A C E
A D E
B C D
B C E
B D E
C D E