找到关系拥有的最多的候选密钥



我正在尝试解决这个问题与候选密钥有关的问题。这是一个问题:

    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,但我不知道它的完成方式,也不知道该单词在计算答案时如何同时发挥作用。

不是其他集合子集的集合。
例如{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个元素的集合都将包含在上述一个,因此将不合格。

等。

对于5个键,最好是通过蛮力来执行此操作。了解这些想法比计算更重要(Dudu/David给出了10个候选密钥的一个很好的例子,这表明一组10个键是可能的,因此最大值至少是如此之大)。

有什么想法?候选密钥是唯一属性的组合。因此,如果A是唯一的,那么与任何其他列的A也是唯一的。一组候选密钥简称:

  • A
  • b
  • c
  • D
  • e

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

5不是此属性的最多候选密钥。

它变得更加复杂。如果{a,b,c,d,e}是唯一的(并且没有子集是候选密钥),则完全有1个候选密钥。重新安排列不会更改集合(集合是无序的)。

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

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

5 10 10 5 1

您可以在开始时添加" 1",您可以识别模式。这是帕斯卡(Pascal)三角形的一排。该观察结果(嗯,和相关的证据)实际上使确定任何给定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

最新更新