确定具有功能依赖关系的候选密钥很简单



设R(A,B,C,D,E)为关系模式,F={A→C、 B→D、 C→E、 E→A} ,查找所有候选密钥。

我相信,由于无法映射,这一集中不存在CK。B或D与B->D之外的任何其他关系。这是否意味着没有候选钥匙?尽管我能够将A映射到除B和D之外的所有其他实体。

规范化的第一步是找到关系的所有键。以下是一些有助于找到密钥的事实:

  1. 如果属性不在任何FD中,则它在每个键中。

  2. 如果一个属性出现在FD的右侧,但从未出现在左侧,则它永远不会出现在键中。

  3. 如果一个属性出现在FD的左侧,但从未出现在右侧,则它在每个键中。

  4. 如果一个属性同时出现在FD的右侧和左侧,则不能对该属性说任何话

要查找关键帧,请确定以上每种情况下的属性。第一种和第三种情况下的那些必须在每一个键中。将这组属性称为核心。计算由核心决定的属性。这被称为核心的闭合。如果所有属性都在核心的闭包中,那么核心不仅仅是一个键,它也是唯一的键。如果核心的闭包不是整个属性集,那么就会缺少一些属性。写下这组属性,并删除上面第二组中的任何属性(即,它出现在FD的右侧,但从未出现在左侧)。这些是外部属性。若要获得关键帧,必须向核心添加一个或多个外部属性。相应地,将它们添加到核心中,首先一次添加一个,然后一次添加两个,以此类推,直到找到每个密钥。

有三个候选键。

B不会出现在任何函数依赖项的右侧。这意味着B必须是每个候选密钥的一部分。我认为单独并不能保证至少有一个候选密钥,但从检查中可以清楚地看出,AB是这里的三个候选密钥之一。

你的课本应该至少包括一个算法来确定所有候选密钥的集合。如果你幸运的话,它包括一种适合纸和铅笔的算法,另一种适合编程自动化。

因为B不在右边,所以B应该是候选密钥的一部分,而A和C出现在两边,所以它们可以与B形成一个超级密钥。在映射上,AB和BC是超级密钥,因为候选密钥是最小超级密钥,所以AB和BC就是候选密钥。

在所有函数依赖项中严格位于左侧的每个属性都是必须构成每个候选键的一部分的属性。

下一步是了解这样的属性是否可以单独生成或确定模式内的所有属性。如果是,则该属性是原始独立形式的候选键。如果不是,则将该属性与其他每个属性分组,一次一个,一次两个,依此类推。所有遍历整个属性集的最小集都可以称为候选键

最新更新