知识卡片

超键与函数依赖恒成立

普通读书笔记卡

内容

超键(superkey)是[[候选键的精确定义唯一性与不可约性]]的宽松版本:只要求具有 唯一性,不要求不可约性——{SNO}和{SNO,CITY}对供应商关系变量S而言都是超键, 其中{SNO,CITY}因为不满足不可约性、不是键,所以特别称为”正规超键”(proper superkey);根据定义,任何关系变量的整个标题永远是它自身的超键。超键概念的 价值在于它精确刻画了函数依赖(functional dependency,FD)成立的一个必然 场景:设SK是关系变量R的超键,X是R标题的任意子集,那么函数依赖SK→X在R中 必定恒成立。道理很直接:函数依赖SK→X的含义是”R中任意两个SK取值相同的元组, 它们在X上的取值也必然相同”;而如果SK本身是超键(具有唯一性),两个元组在SK上 取值相同就意味着它们按[[元组相等性的精确定义及其重要性]]根本是同一个元组, 同一个元组在任何属性X上的取值当然和自己相等——所以这个函数依赖是自动满足的, 不需要额外验证。这个结论给出一条通用的记忆法则:函数依赖箭头总是”从超键(及 键)出发指向关系变量的其余部分”,理解这条规则有助于在后续判断哪些函数依赖是 “平凡的”(自动成立、无需设计者操心)、哪些才是需要真正关注和验证的业务约束。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第5章"基关系变量和 基表"5.3节"关于候选键的更多内容"(源文件:OEBPS/text00054.html) - 结论依据:原文明确"设SK为关系变量R的标题的子集,且SK具有唯一性但不必具有 不可约性,则SK为R的超键(superkey)……设SK为关系变量R的超键(可能为键), X为R的标题的任意子集,则函数依赖(FD)SK→X在R中必定成立……如果两个元组 具有相同的SK取值且SK为超键的话,那么根据定义它们必为相同元组!因此它们 必须具有相同的X取值"。 - 原始内容:设SK为关系变量R的标题的子集,且SK具有唯一性但不必具有不可约性, 则SK为R的超键……设SK为关系变量R的超键,X为R的标题的任意子集,则函数依赖 SK→X在R中必定成立……我们总是令函数依赖箭头"远离超键"(因此也远离键)。