Sql 查找关系具有的最大候选键数?

Sql 查找关系具有的最大候选键数?,sql,functional-dependencies,candidate-key,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,但我不知道它是如何做到的,也不知道在计算答案时这个词是如何同时起作用的。不是其他集合子集的集合。 例如{A-B}和{A,B,C}不能同时作为候选键,因为{A,B

我试图解决这个问题,它与关系中的候选键有关。 问题是:

    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}
{A,B,C,D},{A,B,C,E},{A,B,D,E},{B,C,D,E}
任何包含1个以上元素的集合都将包含上述元素之一,因此将不合格

如果我选择4个属性集,我只有4个选项

{A},{B},{C},{D}
{A,B,C,D},{A,B,C,E},{A,B,D,E},{B,C,D,E}
任何超过4个元素的集合都将包含上述元素之一,因此将不合格。 任何少于4个元素的集合将包含在上述其中一个元素中,因此不合格


等等。

不是其他集合子集的集合。
例如{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}
{A,B,C,D},{A,B,C,E},{A,B,D,E},{B,C,D,E}
任何包含1个以上元素的集合都将包含上述元素之一,因此将不合格

如果我选择4个属性集,我只有4个选项

{A},{B},{C},{D}
{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, 2, 3、4和5个密钥的子集,就可以了。当你计算出来时,你会发现最大的数字是:

5 10 10 5 1
您可以在开头添加一个“1”,这样您就可以识别出该模式。这是一排从。这个观察结果(以及相关的证明)实际上使确定任意给定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

对于5个键,可能最好使用蛮力。理解这些想法比计算更重要(DuDu/David给出了一个10个候选关键点的好例子,表明一组10个关键点是可能的,因此最大值至少有这么大)

这个主意是什么?候选关键字是唯一属性的组合。因此,如果A是唯一的,那么A和任何其他列也是唯一的。一组候选密钥是:

  • A
  • B
  • C
  • D
  • E
如果这些属性中的每一个都是唯一的,那么任何键的组合都将至少包含其中一个属性,并且该组合也将是唯一的。因此,这五个组合的唯一性意味着任何其他组合的唯一性

5不是具有此属性的最大候选密钥数

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

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

这样,您只需要考虑1, 2, 3、4和5个密钥的子集,就可以了。当你计算出来时,你会发现最大的数字是:

5 10 10 5 1
您可以在开头添加一个“1”,这样您就可以识别出该模式。这是一排从。这个观察结果(以及相关的证明)实际上使确定任意给定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

为什么只选择双向配对?为什么不同时使用3路、4路或5路?@GordonLinoff——R可以同时拥有的最大数量的候选密钥。请参阅更新的答案。为什么只选择双向配对?为什么不同时使用3路、4路或5路?@GordonLinoff——R可以同时拥有的最大数量的候选密钥