数据库第六章总结
一、提出问题
一个关系模式因该是一个五元组:
R(U,D,DOM,F)
这里:
关系名R是符号化的元组含义。
U为一组属性
D为属性组U中的属性所来自的域。
DOM为属性到域的映射。
F为属性组U上的一组数据依赖。
数据依赖是一个关系内部属性与属性之间的一种约束关系。人们已经提出了许多种类型的数据依赖,其中最重要的是函数依赖和多值依赖。
但是一个模式的数据依赖会有不好的性值,所以需要规范化。
二、规范化
1.函数依赖
定义:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组以上的属性值相等,而在Y的属性值不等,则称X函数确定Y或者Y函数依赖于X,记作
X
→
Y
X \rightarrow Y
X→Y;
X → Y X \rightarrow Y X→Y但是 Y ⊄ X Y \not\subset X Y⊂X,则称 X → Y X \rightarrow Y X→Y是非平凡的函数依赖。
X → Y X \rightarrow Y X→Y但是 Y ⊂ X Y \subset X Y⊂X,则称 X → Y X \rightarrow Y X→Y是平凡的函数依赖。
在R(U)中,如果
X
→
Y
X \rightarrow Y
X→Y,并且对于X的任意一个真子集X’,都有
X
′
↛
Y
X'\not \rightarrow Y
X′→Y,则称Y对X完全函数依赖,记作
X
→
F
Y
X \overset F\rightarrow Y
X→FY。
如果
X
→
Y
X \rightarrow Y
X→Y,但是Y不完全依赖于X,则称Y对X部分函数依赖,记作
X
→
P
Y
X \overset P\rightarrow Y
X→PY。
在R(U)中,如果 X → Y X \rightarrow Y X→Y( Y ⊄ X Y \not\subset X Y⊂X), Y ↛ X Y\not \rightarrow X Y→X, Y → Z Y\rightarrow Z Y→Z, Z ⊄ Y Z \not\subset Y Z⊂Y则称Z对X传递函数依赖。记作 Y → 传 递 X Y \overset {传递}\rightarrow X Y→传递X。
码
定义:设K为R(U,F)中的属性或属性集合,若 K → F U K\overset F\rightarrow U K→FU,则K为R的候选码。若候选码多余一个,则选定 其中一个作为主码。包含在任意一个候选码中的属性叫做主属性,不包含在任意候选码中的属性叫做非主属性或者非码属性。
范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。
一个低一级范式通过模式分解可以转换为若干个高一级范式的关系模式,这种过程就叫做规范化。
第一范式(1NF)
二维表每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于1NF。
第二范式(2NF)
关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码
[例] S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc为学生的住处,并且每个系的学生住在同一个地方。S-L-C的码为(Sno,Cno)。
函数依赖有:
(Sno,Cno)→Grade
Sno→Sdept, (Sno,Cno)→Sdept
Sno→Sloc, (Sno,Cno)→Sloc
Sdept→Sloc
图中用虚线部分表示部分函数依赖。
可以看出非主属性Sdept、Sloc并不完全依赖于码,所以S-l
-C不符合2NF定义。
分析上面的例子可以发现问题在于有两类非主属,一类如Grade,它对码完全函数依赖,另一类如Sdept、Sloc,它们对码不是完全函数依赖。解决方法是用投影分解把关系模式S-L-C分解成两个关系模式:
此时SC的码为(Sno,Cno),SL的码为Sno,就实现了完全函数依赖。
第三范式(3NF)
设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非属性组Z(Z ⊉ Y)使得X→Y,Y→Z成立,Y↛ X,则称R<U,F>∈3NF
以上个例子举例,SC没有传递依赖,因此SC ∈ 3NF
S-L中Sno →Sdept(
S
d
e
p
t
↛
S
n
o
Sdept\not \rightarrow Sno
Sdept→Sno), Sdept→Sloc,可得
S
n
o
→
传
递
S
l
o
c
Sno \overset {传递} \rightarrow Sloc
Sno→传递Sloc.
解决的办法是将S-L分解成: S-D(Sno,Sdept),D-L(Sdept,Sloc)
BCNF
通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。关系模式R<U,F>∈1NF,若X → Y且 Y ⊈ X 时X必含有码,则R<U,F>∈BCNF。即在R中,每一个决定因素都包含码。
一个满足BCNF的关系模式有:
所有非主属性对每一个码都是完全函数依赖
所有主属性对每一个不包含它的码也是完全函数依赖
没有任何属性完全函数依赖于非码的任何一组属性。
由于R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF,但若R属于3NF,R未必属于BCNF。
举例属于BCNF的:
考察关系模式C(Cno,Cname,Pcno)
C只有一个码Cno,非主属性:Canme,Pcno,这里没有非主属性对Cno部分依赖或传递依赖,所以C∈3NF。同时C中Cno是唯一的决定因素,所以C∈BCNF。
不属于BCNF的:
**关系模式STJ(S,T,J)**中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。
由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J
候选码:(S,J),(S,T);没有非主属性
因为没有非主属性对码传递依赖或部分依赖,STJ ∈ 3NF。
因为T是决定因素,而T不包含码,所以STJ不是 BCNF范式。
多值依赖
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
【例】 Teaching(C, T, B)(C代表课程,如物理;T代表教师;B代表参考书,如普通物理)
Teaching具有唯一候选码(C,T,B), 即全码。Teaching∈BCNF
对于C的每一个值,T有一组值与之对应,而不论B取何值。
因此T多值依赖于C,即C→→T
平凡多值依赖和非平凡的多值依赖
若X→→Y,而Z=Ф,则称X→→Y为平凡的多值依赖。
否则称X→→Y为非平凡的多值依赖。
4NF
关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。如果一个关系模式是4NF, 则必为BCNF,因为每个决定因素都包含码。
不是4NF的,同样可以通过模式分解的方式将其化为4NF。
规范化小结:
规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的个关系模式达到某种程度的“分离”,即“一事一地”的模式设计原则。
人们认识这个原则是经历了一个过程的:
规范化三个例题
一
Y(X1,X2,X3,X4)
(
X
1
,
X
2
)
⟶
X
3
(X1,X2) \longrightarrow X3
(X1,X2)⟶X3
X
2
⟶
X
4
X2 \longrightarrow X4
X2⟶X4
候选码是?
(X1,X2)
最高属于第几范式?
第一范式
非主属性:X3,X4
(
X
1
,
X
2
)
→
X
3
(X1,X2) \rightarrow X3
(X1,X2)→X3
X
2
→
X
4
X2 \rightarrow X4
X2→X4
对于非主属性X4,有
X
2
→
X
4
X2 \rightarrow X4
X2→X4 和
(
X
1
,
X
2
)
→
X
4
(X1,X2)\rightarrow X4
(X1,X2)→X4,存在非主属性X4对候选码(X1,X2)的部分函数依赖,所以不属于第二范式。
二
R(A,B,C,D)
F={
A
B
→
D
AB \rightarrow D
AB→D,
A
C
→
B
D
AC \rightarrow BD
AC→BD,
B
→
C
B \rightarrow C
B→C}
候选码:
(A,B),(A,C)
属于第几范式
非主属性 D
不存在D的部分函数依赖,属于第二范式。
不存在属性对码的传递依赖,属于第三范式。
对于
B
→
C
B \rightarrow C
B→C,B不含码,所以不属于BCNF。
三
R(X,Y,Z,W)
F={Y←→W,XY→Z}
侯选码?
(x,y),(x,w)
非主属性为 z
最高属于第几范式?
对于z,不存在z的部分函数依赖,属于第二范式。
不存在传递依赖,属于第三范式。
对于Y←→W,两者都是码,所以不属于第三范式。