-1

实施例:如何找到候选键?

设R =(A,B,C,d) 设F = {C - > AD,AB - “ç}

然后我怎样才能找到候选键?

答案是{AB,BC}

为什么?

+0

您使用的是什么参考?你在哪里坚持应用它?请谷歌'堆栈交换作业'。你只是要求一个教科书的章节/部分有一个特殊的例子。这太宽泛了。 – philipxy

回答

0

给定一个关系模式R与一组属性T的和非空集非平凡函数依赖F的描述某一组假定在该模式保持的约束:

  1. 每个属性不出现在FD的右侧部分F必须出现在任何候选键。

  2. 不会在FD的左部出现在F不能出现在任何候选键每属性。

要找到所有的候选键,所有其他属性,你应该尝试添加到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中的一部分不能出现在候选键中),因此您知道已找到所有候选键。

+0

每个属性都确定自己,所以你的1&2是空的,除非你假设关于FD的东西,就像它们不平凡一样。但唯一的CK本身可能是微不足道的(所有的属性),所以2是错误的,你不能忽略用于发现CK的普通FD的属性。“实践中”之前的部分对于找到CK是不清楚的。我建议进行修复,但我不清楚如何修改此演示文稿以保持其风格/方法/本质(可能是这样),但要使其准确无误。 – philipxy

+0

@philipxy,我试图纠正答案。如果您认为它仍然太多和/或混淆,我会删除它。 – Renzo

+0

项目符号用于您的算法。他们真的属于它作为子步骤。即该算法的最小覆盖范围实际上就是子弹明智的上下文。但是,您错过了将最终步骤添加到由FD部分生成的非覆盖属性的最后一步。所以我基本上建议你提供一个实际的算法,发布在某个地方...... *像提问者的教科书,他们忽略*。也许不那么简单,但可能比现在的答案更简洁。或者只是找到一个SO重复。 “我如何找到候选人钥匙?”给我休息一下。 – philipxy