函数依赖
- 函数依赖:设
R(U)是属性集
U上的关系模式,
X、Y 是
U的子集。若对
R(U)的任何一个可能的关系
r,
r中不可能存在两个元组在
X上的属性值相等,而在
Y上的属性值不等,则称
X函数决定
Y或
Y函数依赖于
X,记作
X→Y。
- 非平凡的函数依赖:如果
X→Y,但
Y⊈X,则称
X→Y是非平凡的函数依赖。
- 完全函数依赖:在
R(U)中,如果
X→Y,并且对于
X的任何一个真子集
X′都有
X′不能决定
Y,则称
Y对
X完全函数依赖,记作
Xf
Y。
- 部分函数依赖:如果
X→Y,但
Y不完全函数依赖于
X,则称
Y对
X部分函数依赖,记作
XP
Y。
- 传递依赖:在
R(U)中,如果
X→Y,
Y⊈X,
Y→Z,则称
Z对
X传递依赖。
- 码:设
K为
R(U)中属性的组合,若
K→U,且对于
K的任何一个真子集
K′不能决定
U,则
K为
R的候选码。若有多个候选码,则选一个座位主码。候选码通常也称为候选关键字。
- 主属性和非主属性:包含在任一个候选码中的属性称为主属性,否则则是非主属性。
- 外码:若
R(U)中的属性或者属性组
X非
R到的码,但
X是另一个关系的码。,则称
X为外码。
规范化
关系数据库设计的方法之一就是设计满足适当范式的模式,通常可以通过判断分解后的模式达到几范式来评价模式规范化的程度。
-
1NF(第一范式)
定义:若关系模式
R的每一个分量是不可再分的数据项,则关系模式
R属于第一范式。
例如,供应者和它所提供的零件信息,关系模式FIRST和函数依赖集
F如下:
FIRST(Sno,Sname,Status,City,Pno,Qty)
F=Sno→Sname,Sno→Status,Status→City,(Sno,Pno)→Qty
Sno |
Sname |
Status |
City |
Pno |
Qty |
S1 |
精益 |
20 |
天津 |
P1 |
200 |
S1 |
精益 |
20 |
天津 |
P2 |
300 |
S1 |
精益 |
20 |
天津 |
P3 |
480 |
S2 |
盛锡 |
10 |
天津 |
P2 |
168 |
S2 |
盛锡 |
10 |
北京 |
P3 |
500 |
S3 |
东方红 |
30 |
北京 |
P1 |
300 |
S3 |
东方红 |
30 |
北京 |
P2 |
280 |
S4 |
泰达 |
40 |
上海 |
P2 |
460 |
从表中可看出1NF存在4个问题:
- 冗余度大。
- 引起修改操作的不一致性。
- 插入异常。
- 删除异常。
- 2NF(第二范式)
定义:若关系模式
R∈1NF,且每一个非主属性完全依赖于码,则关系模式
R∈2NF。
换句话说,当
1NF消除了非主属性对码的部分函数依赖,则称为
2NF。
例如,FIRST关系中的码是
Sno,Pno,而
Sno→Status,因此非主属性
Status部分函数依赖于码,故非2NF的。
若此时将FIRST关系分解为
FIRST1(Sno,Sname,Status,City)和
FIRST2(Sno,Pno,Qty)。其中
FIRST∈2NF,FIRST2∈2NF。
- 3NF(第三范式)
定义:若关系模式
R(U,F)中不存在这样的码
X,属性值
Y及非主属性
Z(Z⊈Y)使得
X→Y,
Y→Z成立,则关系模式
R∈3NF。
即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。