2.函数依赖的三种基本情形
函数依赖可以分为三种基本情形:
⑴ 平凡函数依赖与非平凡函数依赖
定义 4.2 在关系模式 R(U)中,对于 U 的子集 X 和 Y,如果 X→Y,但 Y 不是 X 的子
集,则称 X→Y 是非平凡函数依赖(Nontrivial Function Dependency)。若 Y 是 X 的
子集,则称 X→Y 是平凡函数依赖(Trivial Function Dependency)。
对于任一关系模式,平凡函数依赖都是必然成立的。它不反映新的语义,因此,若不
特别声明,本书总是讨论非平凡函数依赖。
⑵ 完全函数依赖与部分函数依赖
定义 4.3 在关系模式 R(U)中,如果 X→Y,并且对于 X 的任何一个真子集 X′,都有
X′\→ Y,则称 Y 完全函数依赖(Full Functional Dependency)于 X,记作 X —→
F
Y。若 X→Y,但 Y 不完全函数依赖于 X,则称 Y 部分函数依赖(Partial Functional
Dependency)于 X,记作 X —→
P
Y。
如果 Y 对 X 部分函数依赖,X 中的“部分”就可以确定对 Y 的关联,从数据依赖的观点
来看,X 中存在“冗余”属性。
⑶ 传递函数依赖
定义 4.4 在关系模式 R(U)中,如果 X→Y,Y→Z,且 Y\→X,则称 Z 传递函数依赖
(Transitive Functional Dependency)于 X,记作 Z—→
T
X。
传递函数依赖定义中之所以要加上条件 Y\→X,是因为如果 Y→X,则 X←→Y,这实
际上是 Z 直接依赖于 X,而不是传递函数了。
按照函数依赖的定义,可以知道,如果 Z 传递依赖于 X,则 Z 必然函数依赖于 X,如
果 Z 传递依赖于 X,说明 Z 是“间接”依赖于 X,从而表明 X 和 Z 之间的关联较弱,表现出
间接的弱数据依赖。因而亦是产生数据冗余的原因之一。
4.2.3 码的函数依赖表示
前面章节中给出了关系模式的码的非形式化定义,这里使用函数依赖的概念来严格定
义关系模式的码。
定义 4.5 设 K 为关系模式 R(U,F)中的属性或属性集合。若 K→U,则 K 称为 R 的
一个超码(Super Key)。
定义 4.6 设 K 为关系模式 R(U,F)中的属性或属性集合。若 K—→
F
U,则 K 称为
R 的一个候选码(Candidate Key)。候选码一定是超码,而且是“最小”的超码,即 K 的
任意一个真子集都不再是 R 的超码。候选码有时也称为“候选键”或“码”。
若关系模式 R 有多个候选码,则选定其中一个作为主码(Primary Key)。
组成候选码的属性称为主属性(Prime Attribute),不参加任何候选码的属性称为
非主属性(Non-key Attribute)。
在关系模式中,最简单的情况,单个属性是码,称为单码(Single Key);最极端的
情况,整个属性组都是码,称为全码(All Key)