一、函数依赖
设R(U)是属性集U上的关系模式,X和Y是U的子集。
(1)若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称X函数确定Y或Y函数依赖于X,记作X→Y。
(比如一个学号可以确定一个学生姓名,则记作Sno→Sname)
X→Y,但Y⊈X,则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X, 则称X→Y是平凡的函数依赖。
若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素。
若X→Y,并且Y→X, 则记为X←→Y。
若Y不函数依赖于X, 则记为
X
↛
Y
X \nrightarrow Y
X↛Y。
(2)在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有
X
′
↛
Y
X' \nrightarrow Y
X′↛Y 则称Y对X完全函数依赖,记作
X
→
F
Y
X \overset F \rightarrow Y
X→FY;
若X→Y,但Y并不完全依赖于X,则称Y对X的部分函数依赖,记作
X
→
P
Y
X \overset P \rightarrow Y
X→PY。
( 比如
(
S
n
o
,
C
n
o
)
→
F
G
r
a
d
e
(Sno,Cno) \overset F \rightarrow Grade
(Sno,Cno)→FGrade是完全函数依赖;
(
S
n
o
,
C
n
o
)
→
P
S
d
e
p
t
(Sno,Cno) \overset P \rightarrow Sdept
(Sno,Cno)→PSdept是部分函数依赖,因为Sno→Sdept成立,而Sno是(Sno,Cno)的真子集。)
(3)在R(U)中,如果X→Y(Y⊈X),
Y
↛
X
Y \nrightarrow X
Y↛X,Y→Z,Z⊈Y 则称Z对X传递函数依赖。记为:
X
→
传
递
Z
X \overset {传递} \rightarrow Z
X→传递Z。
(比如Sno→Sdept,Sdept→Mname成立,所以
S
n
o
→
传
递
M
n
a
m
e
Sno \overset {传递} \rightarrow Mname
Sno→传递Mname)
注意!! 如果没有条件
Y
↛
X
Y \nrightarrow X
Y↛X,则是Y→X, 即X←→Y,实际上是
X
→
直
接
Z
X \overset {直接} \rightarrow Z
X→直接Z,是直接函数依赖,而不是传递函数依赖。
二、码
①设K为R<U,F>中的属性或属性组合,若
K
→
F
U
K \overset F \rightarrow U
K→FU,则K为R的候选码;若
K
→
P
U
K \overset P \rightarrow U
K→PU,则K称为超码 。(候选码是最小的超码,即K的任意真子集都不是候选码。)
②若候选码多于一个,则选定其中的一个做为主码。
③包含在任何一个候选码中的属性称为主属性;不包含在任何候选码中的属性称为非主属性。
④如果整个属性组是码,称为全码。
⑤关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码也称外码。
三、范式
满足不同程度要求的为不同范式,满足最低要求的为第一范式,简称1NF;在第一范式中满足进一步要求的为第二范式,以此类推。
各种范式之间的关系:
5
N
F
⊂
4
N
F
5NF \subset 4NF
5NF⊂4NF
⊂
B
C
N
F
\subset BCNF
⊂BCNF
⊂
3
N
F
\subset 3NF
⊂3NF
⊂
2
N
F
\subset 2NF
⊂2NF
⊂
1
N
F
\subset 1NF
⊂1NF
一个低一级范式的关系模式通过模式分解,可以转化为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
四、2NF、3NF、BCNF、4NF
(1)若R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。
举个反例:比如有关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade),其中Sloc为学生的住处,并且每个系的学生住在同一个地方。S-L-C的码为(Sno,Cno)。
其中非主属性Sloc,Sdept并不是完全依赖于码。因此这个关系模式不符合2NF定义,即S-L-C
⊄
\not\subset
⊂ 2NF。
(2)设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z(
Z
⊉
Y
Z \nsupseteq Y
Z⊉Y), 使得X→Y,Y→Z成立,
Y
↛
X
Y \nrightarrow X
Y↛X,则称R<U,F> ∈ 3NF。
如果R属于3NF,则必有R属于2NF。
(3)关系模式R<U,F>∈1NF,若X →Y且
Y
⊈
X
Y \nsubseteq X
Y⊈X时X必含有码,则R<U,F>∈BCNF。
一个满足BCNF的关系模式有:
①所有非主属性对每一个码都是完全函数依赖;
②所有主属性对每一个不包含它的码也是完全函数依赖;
③没有任何属性完全函数依赖于非码的任何一组属性。
比如关系模式C(Cno,Cname,Pcno),它只有一个码Cno,这里没有任何属性对Cno部分依赖或者是传递依赖,所以C∈3NF。同时C中Cno是唯一的决定因素,所以C∈BCNF。
(4)关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
如果一个关系模式是4NF, 则必为BCNF。
五、多值依赖
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
多值依赖的性质:
①多值依赖具有对称性,即若X→→Y,则X→→Z,其中Z=U-X-Y;
②多值依赖具有传递性。即X→→Y,Y→→Z,则X→→Z-Y;
③函数依赖可以看成是多值依赖的特殊情况,即若X→Y,则X→→Y;
④若X→→Y,X→→Z,则X→→YZ;
⑤若X→→Y,X→→Z,则X→→Y-Z,X→→Y⋂Z;
⑥若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y。
多值依赖与函数依赖相比,具有两个基本的区别:
(1)多值依赖的有效性与属性集的范围有关。
(2)若函数依赖X→Y在R(U)上成立,则对于任何Y’⊂Y均有X→Y’ 成立。而多值依赖X→→Y若在R(U)上成立,却不能断言对于任何Y’⊂Y有X→→Y’成立。
附加题: