玩命加载中 . . .

数据库逻辑设计之函数依赖


以下均默认R为具有属性集合U的一个关系模式。

关系的码与键

这一部分概念很杂,稍有不慎容易混淆,特此记录。

  • 超码:$K\subseteq U, 若K \to U, 则称K是R的一个超码——超码可以唯一地识别关系的元组。$

  • 候选码:$已知K是R的一个超码, 且不存在K的真子集Z, 使得Z \to U, 我们称K是R的一个候选码。$

    如此看来,同一个关系模式下,候选码可能有多个。

  • 主码:在同一个关系模式下的诸多候选码中,指定其中的一个,它就是识别关系的元组的主码(取代表)。

  • 键属性:包含在任意候选码中的属性,称为键属性。

  • 非键属性:与键属性相对,不包含在任意候选码中的属性,称为非键属性。

    最简单的情况下,候选码只包含一个属性;

    最复杂的情况下,候选码包含全部属性。

举出一个小栗子:

下面是某一个政务系统管理数据表。

编号 姓名 年龄 性别 户籍号 部门
01 小明 32 011 内阁
02 小红 24 022 工部
03 小勇 33 021 吏部
04 小南 32 092 礼部
  • 对于超码,注意到超码是属性的集合,因此对超码的选取很任意:{学号,姓名},{学号,姓名,年龄}…它们都是。
  • 对于候选码,首先它的实质是属性的集合;其次它比较有“临界”意义,因为它可以说是唯一识别关系的元组的最小阶数的属性集合,比如上表中,“编号”“户籍号”都可以唯一地识别一个元组,它们都是候选码。
  • 包含在所有的候选码之中的属性,即“编号”“户籍号”,它们都是键属性,其他的都是非键属性。

函数依赖

一般来说,X是某种具有“唯一”语义性的属性(集),此时任何属性集都是函数依赖于X的。比如,X=“身份证号”(当然这里集合X仅有一个元素,就直接简化了),对于一个实体——公民的关系模式,几乎可以函数地确定其他所有属性了。

再比如,我们考虑“姓名”$\to$“年龄”这样一个待确定的函数依赖,发现对于同名的两个公民,他们的年龄很有可能不同(事实上这种情况很常见),因此这个函数依赖不成立。

很显然,非平凡函数依赖更值得我们研究:平凡函数依赖是很显然的,它是一种父集合到子集合的函数依赖。

还需要介绍几个概念:

  • 完全函数依赖

  • 传递地函数依赖

    要注意传递地函数依赖满足的条件。集合之差不空,也就是说集合之间没有父子包含关系(否则就成了平凡函数依赖)。

快速求候选码

我们给出如下有用的定理,在此之前,我们约定R为给定的关系模式,F是其函数依赖集。

  • 定理1 对于R、F,若X是L类属性,那么X必为R的任一候选键的成员。
  • 定理2 如果X是R类属性,那么X不在任何候选键中。
  • 定理3 如果X是R的N类属性,那么X必包含在R的任一候选键中。
  • 推论:如果X是R的N类和L类组成的属性集,且$X_F^+$包含了R的全部属性,那么X是R的唯一候选键。

文章作者: 鹿卿
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 鹿卿 !
评论
  目录