我怎样才能找到候选键?

时间:2017-10-13 08:37:44

标签: database relational-database functional-dependencies candidate-key

示例:

设R =(A,B,C,D) 设F = {C - > AD,AB - > Ç}

然后我如何找到候选键?

答案是{AB,BC}

为什么?

1 个答案:

答案 0 :(得分:0)

给定一个关系模式R,其中包含一组属性T和一组非空的函数依赖关系F,用于描述假定持有的某组约束在该架构中:

  1. F 中未显示在FD右侧的每个属性必须出现在任何候选人密钥。

  2. F 中未显示在FD左侧的每个属性都 >候选人密钥。

  3. 要查找所有候选键,对于所有其他属性,您应该尝试在每个可能的组合上面添加1的属性,并查看闭包是否确定了关系的所有属性(并且这样你如果不丢失此属性,则无法从组合中删除任何属性。)

    请注意,如果集合F为空,则唯一的候选键由所有属性T构成。

    在实践中,有些算法可以相对有效(因为找到所有键的问题在一般情况下是指数的。)

    一种简单的方法是从功能依赖的规范封面开始,在本例中来自:

    { A B → C
      C → A
      C → D }
    

    并且在找到任何候选键中必须存在的属性(在本例中为B)之后,尝试向它们添加依赖项的左侧(在本例中为AB,那是AC)(以任何顺序,并可能组合它们)并计算闭包以查看它们是否确定了所有属性。当您发现某些属性集确定了所有关系属性时,您已找到候选键(并且不必向其添加其他属性)。在您的示例中:

     (A B)+ = A B C D
     (B C)+ = A B C D
    

    所以A BB C是候选键(因为你不能删除任何属性而不会失去确定所有其他属性的属性)。并且由于没有其他属性(来自D的部分不能出现在候选键中),您知道已找到所有候选键。