一、函数依赖
1. 函数依赖
定义:设 R(U) 是属性集合 U={ A1, A2, ... , An } 上的一个关系模式,X, Y 是 U 上的两个子集,若对 R(U) 的任意一个可能的关系 r ,r 中不可能有两个元组满足在 X 中的属性值相等而在 Y 中的属性值不等,则称 “ X 函数决定 Y ” 或 “ Y函数依赖于X ” ,记作
。
白话:在一个关系 R 中,属性(组) Y 的值是由属性(组) X 的值所决定的 。又可以说,在关系 R 中,若两个元组的 X 属性值相同,那么这两个元组的 Y 属性值也相同。
为什么叫做函数依赖? 函数的定义:对于定义域中任意 x ,有且只有一个 y 与之对应。 属性之间的依赖:对于相同的 X 属性值,有且只有一个 Y 属性值与之对应。
本质:函数依赖的本质就是反应了 一个关系中属性之间的约束关系,或者依赖关系。函数依赖是一种数据依赖。
举例:1. U = { 学号,姓名,年龄,专业 }
{学号}
{ 姓名,年龄,专业 }
函数依赖 分为 非平凡函数依赖 和 平凡函数依赖。 非平凡函数依赖:对
,但
,则称
为非平凡的函数依赖。也就是说 X 决定 Y,但是 Y 不在 X 中,这种叫做非平凡函数依赖。否则就是平凡函数依赖。
2. 完全函数依赖和部分函数依赖
定义:在关系 R(U) 中, 若
,且对于 X 的任何真子集 X‘ 都有 X’
Y,则称 Y 完全函数依赖于 X,记为:
。否则称 Y函数部分依赖于 X,记为
。
白话:完全函数依赖就是说 属性组 X 的所有属性一起(即完全)才能决定属性 Y,去掉任何一个属性都不行。相反的,部分函数依赖就是说 属性组 X 中的 部分属性就可以决定 Y ,用不着全部。
Insight:如果 属性(组)Y 部分函数依赖于 属性组 X,则说明属性组 X 中存在着对属性(组) Y 的非受控冗余。在设计数据库时应避免这种情况。(对应着 2NF )。
举例:U = {学号,姓名,年龄,班号,班长,课号,成绩 }
{学号,课号}
U
{ 学号,课号 }
{ 姓名,年龄 }
{ 学号,课号 }
{ 成绩 }
解释:单个学号可以决定性别和年龄,单个学号就可以决定成绩。因此
和
对
是部分函数依赖。
3. 传递函数依赖
定义:在 R(U) 中,若
,且
,则称 Z 传递函数依赖于 X 。
白话:如果 X 函数决定 Y,Y 函数决定Z,且 Y、Z 都不包含于 X,Z 不包含于 Y ,Y 不能决定 X,则称 Z 传递函数依赖于 X。 注意!:若
,可以得到
,但 不能说 Z 传递函数依赖于 X。
Insight:传递函数依赖存在着非受控冗余。
举例:学生( 学号,姓名,系号,系主任 )
{学号}
{ 系号 }
{系号}
{ 系主任 }
{学号}
{ 系主任 }
“系主任” 是传递依赖于 “学号” 的。
图示:
注:以上图片来自哈工大战德臣老师的PPT
4. 与函数依赖相关的概念
(1). 候选键
定义:设 K 为 R(U) 中的属性或属性组合,若
,则称 K 为 R(U) 上的候选键。
白话:对于关系 R(U) 中的属性(组)K,如果 U 完全函数依赖于 K,即 K 中的所有属性一起才能决定 U,则称 K 为 R(U) 的候选键。
(2). 主键
如果有多个候选键,则可以选择任一候选键作为主键。
(3). 主属性
包含在任一候选键中的属性称为主属性,其他属性称为非主属性。
(4). 外来键
若 R(U) 中的属性(组)X 不是 R 的候选键,却是另一关系 S(U) 的候选键,则称 X 为 R(U) 的外来键,简称外键。
白话:一个关系的外键是另一关系的候选键。
(5). 逻辑蕴含
定义:设 F 是关系 R(U) 中的一个函数依赖集合,X、Y 是 R 的属性子集,如果能从 F 这个函数依赖集合中推导出
,则称 F 逻辑蕴含
,或者说
是 F 的逻辑蕴含。记作
。
(6). 闭包
定义 :被 F 逻辑蕴含的所有函数依赖集合称为 F 的闭包,记作
。
白话:也就是说,能从 函数依赖集 F 中推导出的所有函数依赖组成的集合,称为 F 的闭包。(学过泛函的话应该能感觉到有种完备的概念)。
如果
,则称 F 是一个 全 函数依赖族。(函数依赖完备集)。
二、函数依赖的 Armstrong 公理及其引理
设 F 为 R(U) 的一组函数依赖,记为 R(U, F) 。
1. 函数依赖的 Armstrong 公理
(1). 自反律
若
,则
被 F 逻辑蕴含。
白话:若 属性集 Y 包含于 X,X 包含于 U,则
,则
。也就是说 如果属性集 Y 属于 X,则 X 可以决定 Y,又可以说 属性集 X 可以决定 他的属性 子集。(平凡函数依赖)
(2). 增广律
若
,且
,则
被 F 逻辑蕴含。
白话:如果
在 F 这个函数依赖集合中,另一属性(组) Z 是属性集 U 中的元素,那么从 F 中可以推导出 XZ 函数决定 YZ。
(3). 传递律
若
,且
,则
被 F 逻辑蕴含。
2. 函数依赖的 Armstrong 的引理
2.1 引理1
(1). 合并律
若
且
,则
。 证明:根据增广律可以得到
,
,再根据传递律得到,
。
(2). 伪传递律
若
且
,则
。 证明:证明方法依然是 增广律 和 传递律。
(3). 分解律
若
且
,则
。 证明:根据自反律可以得到
,再根据传递律,得证
。
2.2 引理2
如果 A1,A2,... ,An是属性,则
当且仅当对每个 Ai 有
2.3 属性(集)闭包 和 引理3
(1). 属性(集)闭包定义
对 R(U, F) ,
,令:
= Ai 用 armstrong 三个公理 可从 F 导出
,称
为 X 关于 F 的属性(集)闭包。
区分 闭包和属性(集)闭包: 闭包指的是 F的闭包,该集合包含的元素是函数依赖。 属性集闭包是 X属性(集) 关于 F 的属性(集)闭包,该集合包含的元素是属性。
(2). 引理3
若 从 F 这个函数依赖集合中可以用 Armstrong 公理 导出
,当且仅当
。
解释:只有 Y 这个属性 在 X 关于 F 的属性(集)闭包中,才能推出
,只要能推出 X 决定 Y,那 Y 一定在 X 关于 F 的属性(集)闭包中。
2.4 覆盖 和 引理4、5
(1) 覆盖
定义:对 R(U) 上的两个函数依赖集合 F、G,如果
,则称 F 和 G 也是等价的,也称作 F 覆盖 G 或者 G 覆盖 F。
(2) 引理4
(3) 引理5
每个函数依赖集 F 可被一个 其右端至多有一个属性的函数依赖集 G 覆盖。
2.5 最小覆盖
(1). 最小覆盖
F 满足:F 中每个函数依赖的右边部分都是单个属性;
对任何
,有 F -
不等价于 F;
对任何
,( F-
不等价于F。
则 F 为 最小覆盖 或者 最小依赖集。
解释: 对于第 2 点,如果去掉
这个函数依赖,那么从 F 中不能推导出
,也就是说 F 中的每一个函数依赖都是必需的,一个不能少。 对于第 3 点,Z 是 函数依赖的 左边部分 的一个子集,如果去掉
这个函数依赖,加上 X 子集
的依赖依然不等价于F,即
是不能由
代替的。
(2). 定理
每个函数依赖集 F 都有等价的最小覆盖 F‘。