代码之家  ›  专栏  ›  技术社区  ›  user3676224

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

  •  1
  • user3676224  · 技术社区  · 9 年前

    问题是:

        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 回复  |  直到 9 年前
        1
  •  2
  •   David דודו Markovitz    9 年前

    不是其他集合子集的集合。
    例如,{A-B}和{A,B,C}不能同时作为候选键,因为{A,B}是{。
    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}
    

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

        2
  •  2
  •   Gordon Linoff    9 年前

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

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

    • A.
    • B
    • C
    • D
    • E

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

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

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

    因此,您只需要考虑1、2、3、4和5键的子集。当你计算出来时,你会发现最大的数字是:

    5 10 10 5 1
    

    您可以在开头添加一个“1”,您可以识别模式。这是从 Pascal's Triangle

    顺便提及,长度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
    
    推荐文章