知识卡片
超键与函数依赖恒成立
内容
超键(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中必定成立……我们总是令函数依赖箭头"远离超键"(因此也远离键)。