对于具有以下功能依赖关系的关系 {A,B,C,D} -
A -> BCD
B -> C
CD -> A
使用我在其中一个站点上找到的特定方法,我将候选键作为 ABCD。那正确吗 ?什么是正确的候选键?
对于具有以下功能依赖关系的关系 {A,B,C,D} -
A -> BCD
B -> C
CD -> A
使用我在其中一个站点上找到的特定方法,我将候选键作为 ABCD。那正确吗 ?什么是正确的候选键?
ABCD 是一个微不足道的超级密钥。每个算法都必须生成 ABCD。但是 ABCD 不是这种关系中的候选键。根据定义,候选键是最小超键。
您可以通过简单的检查来判断链接中的算法是不够的。它不会生成 A 作为候选键,但您会得到 A -> BCD,因此 A 显然是候选键。除了 A 之外,还有两个候选键。
@ErwinSmout 的这个 SO 回答描述了一种适用于铅笔和纸的算法。大多数教科书都包含适用于自动化的算法。
让我们简单点:这是Super,candidate键的定义
超级钥匙
超级密钥代表密钥的超集。
超级密钥是一组一个或多个属性,它们被集体采用,并且可以唯一地标识所有其他属性。
候选键
候选键是超级键,没有适当的子集是超级键。
换句话说,候选键是最小的超级键。
通过闭包属性,我们得到
A+=ABCD
自从
A->BCD给定
A-> 自反性规则
因此 A 是候选键。
希望这可以帮助!