该章主要学习了如何判断一个数据库模式的优劣程度,或者说为设计关系模式做一些理论参考
1、范式涉及的概念
1.1 关系模式复习
一个关系模式应当是一个五元组,即R(U,D,DOM,F)
- R是关系名
- U为属性组
- D为属性的域
- DOM为属性到域的映射
- F为属性组U上的一组数据依赖
1.2 数据依赖
最重要的是函数依赖和多值依赖
1.2.1 函数依赖
函数依赖描述了一个关系模式(二维表)中属性间的决定关系,例如学生表中,学号决定了姓名,记为
学 号 → 姓 名 学号 \rightarrow 姓名 学号→姓名
X → Y X \rightarrow Y X→Y,X函数确定Y,Y函数依赖于X,X称为这个函数依赖的决定因素
若Y不函数依赖于X,则记作 X ↛ Y X \nrightarrow Y X↛Y
X→Y,但Y⊈X 则称X→Y是非平凡的函数依赖
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖
平凡的函数依赖必然存在,意义不大,我们只讨论非平凡的函数依赖
如果X→Y,并且对于X的任何一个真子集X’ , 都有
X
′
↛
Y
X' \nrightarrow Y
X′↛Y, 则称Y对X完全函数依赖,记作
X
⟶
F
Y
X \overset F \longrightarrow Y
X⟶FY
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作
X
⟶
P
Y
X \overset P \longrightarrow Y
X⟶PY
在R(U)中,如果X→Y(Y⊈X), Y ↛ X Y \nrightarrow X Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖
1.2.2 多值依赖
设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,而Z=Ф,则称X→→Y为平凡的多值依赖,否则称X→→Y为非平凡的多值依赖
通俗说,就是二维表中一个属性的某个值对应了另一个属性的一组值
1.3 码
设K为R<U,F>中的属性或属性组合。
若
K
⟶
F
U
K \overset F \longrightarrow U
K⟶FU,则K称为R的一个候选码(Candidate Key)
若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)
如果U部分函数依赖于K,即
K
⟶
P
U
K \overset P \longrightarrow U
K⟶PU,则K称为超码
候选码是最小的超码,即K的任意真子集都不是候选码
包含在任何一个候选码中的属性 ,称为主属性
不包含在任何码中的属性称为非主属性
整个属性组是码,称为全码
主 码 ⊆ 候 选 码 主码 \subseteq 候选码 主码⊆候选码 ⊆ 码 \subseteq 码 ⊆码
2、范式
各种范式之间存在联系:
1
N
F
⊃
2
N
F
1NF \supset 2NF
1NF⊃2NF
⊃
3
N
F
\supset 3NF
⊃3NF
⊃
B
C
N
F
\supset BCNF
⊃BCNF
⊃
4
N
F
\supset 4NF
⊃4NF
⊃
5
N
F
\supset 5NF
⊃5NF
某一关系模式R为第n范式,可简记为R∈nNF
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
2.1 第一范式 (1NF)
关系模式是一张标准的二维表,则属于1NF
2.2 第二范式 (2NF)
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
例: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
一个关系模式不属于2NF,就会出现以下问题(以上表为例)
- 插入异常 ,如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败
- 删除异常,如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了
- 修改复杂,一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化
2.3 第三范式 (3NF)
设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z (Y⊇ Z), 使得X→Y,Y→Z成立,且 Y ↛ X Y \nrightarrow X Y↛X不成立,
关系模式R中没有传递依赖,则R∈3NF
2.4 BC范式 (BCNF)
设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF
2.5 第四范式 (4NF)
关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF
3、候选码的求解
3.1 闭包
闭包(记作X+ )就是由一个属性直接或间接推导出的所有属性的集合
例如:
f={a->b,b->c,a->d,e->f};
由a可直接得到b和d,间接得到c,
则a的闭包就是{a,b,c,d}
3.2 函数依赖分类
对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类:
- L类,仅出现在函数依赖左部的属性
- R 类,仅出现在函数依赖右部的属性
- N 类,在函数依赖左右两边均未出现的属性
- LR类,在函数依赖左右两边均出现的属性
3.3 相关定理
定理:
对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的成员
推论:
对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属性。则X必为R的唯一候选码
定理:
对于给定的关系模式R及其函数依赖集F,若X(X∈R)是R类属性,则X不在任何候选码中
定理:
对于给定的关系模式R及其函数依赖集F,若X(X∈R)是N类属性,则X必包含在R的任一候选码中
推论:
对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类和N类组成的属性集,且X+包含了R的全部属性;则X是R的唯一候选码