示例:
设R =(A,B,C,D) 设F = {C - > AD,AB - > Ç}
然后我如何找到候选键?
答案是{AB,BC}
为什么?
答案 0 :(得分:0)
给定一个关系模式R
,其中包含一组属性T
和一组非空的函数依赖关系F
,用于描述假定持有的某组约束在该架构中:
F
中未显示在FD右侧的每个属性必须出现在任何候选人密钥。
F
中未显示在FD左侧的每个属性都 >候选人密钥。
要查找所有候选键,对于所有其他属性,您应该尝试在每个可能的组合上面添加1的属性,并查看闭包是否确定了关系的所有属性(并且这样你如果不丢失此属性,则无法从组合中删除任何属性。)
请注意,如果集合F
为空,则唯一的候选键由所有属性T构成。
在实践中,有些算法可以相对有效(因为找到所有键的问题在一般情况下是指数的。)
一种简单的方法是从功能依赖的规范封面开始,在本例中来自:
{ A B → C
C → A
C → D }
并且在找到任何候选键中必须存在的属性(在本例中为B
)之后,尝试向它们添加依赖项的左侧(在本例中为AB
,那是A
和C
)(以任何顺序,并可能组合它们)并计算闭包以查看它们是否确定了所有属性。当您发现某些属性集确定了所有关系属性时,您已找到候选键(并且不必向其添加其他属性)。在您的示例中:
(A B)+ = A B C D
(B C)+ = A B C D
所以A B
和B C
是候选键(因为你不能删除任何属性而不会失去确定所有其他属性的属性)。并且由于没有其他属性(来自D
的部分不能出现在候选键中),您知道已找到所有候选键。