关系数据库理论(二)
范式
定义
- 范式是符合某一种级别的关系模式的集合。定义的是规范。
种类
- 第一范式 (1NF)
- 第二范式 (2NF)
- 第三范式 (3NF)
- BC范式 (BCNF)
- ……
联系
低级别的范式包含高级别的范式~
规范化
一个低级别范式的关系模式,通过模式分解转化为若干高一级范式的关系模式的集合 的过程。
第一范式 (1NF)
定义
如果一个关系模式R的所有属性都是不可分的 基本数据项,则R∈1NF。
意义
- 第一范式是对关系模式的最起码的要求。不满 足第一范式的数据库模式不能称为关系数据库。
- 但是满足第一范式的关系模式并不一定是一个 好的关系模式。我们需要更细致的规范。
第二范式 (2NF)
引例
关系模式 SLC(Sno, Sdept, Sloc, Cno, Grade) ,Sloc为学生住处,假设每个系的学生住在同一 个地方。
FD(函数依赖):
(Sno, Cno) f->Grade
Sno -> Sdept
(Sno, Cno) -> Sdept
Sno -> Sloc
(Sno, Cno) -> Sloc
Sdept -> Sloc
SLC:
Sno | Sdept | Sloc | Cno | Grade |
---|---|---|---|---|
分析
-
SLC的码为(Sno, Cno)。
-
非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)
-
插入异常
假设Sno=0121,Sdept=IS,Sloc=N 的学生还未选课,因课程号是主 属性,因此该学生的信息无法插入SLC。
-
删除异常
假定某个学生本来只选修了3号课程这一门课。现在因身体不适,他连3 号课程也不选修了。因课程号是主属性,此操作将导致该学生信息的 整个元组都要删除。
-
数据冗余度大
如果一个学生选修了10门课程,那么他的Sdept和Sloc值就要重复 存储了10次。
-
修改复杂
如学生转系,在修改此学生元组的Sdept值的同时,还可能需 要修改住处(Sloc)。如果这个学生选修了K门课,则必须无遗 漏地修改K个元组中全部Sdept、Sloc信息。
-
原因
Sdept、 Sloc部分函数依赖于码。
-
解决方法
SLC分解为两个关系模式,以消除这些部分函数依赖。( 关系模式分解将在(四)中详细写明 )
SC(Sno, Cno, Grade)
SL(Sno, Sdept, Sloc)
定义
- 若关系模式R∈1NF,并且每一个非主属性都 完全函数依赖于R的码,则R∈2NF。
作用及缺陷
- 采用投影分解法将一个1NF的关系分解为多个2NF的关 系,可以在一定程度上减轻原1NF关系中存在的插入 异常、删除异常、数据冗余度大、修改复杂等问题。
- 将一个1NF关系分解为多个2NF的关系,并不能完全消 除关系模式中的各种异常情况和数据冗余。
3NF
引例
-
2NF关系模式SL(Sno, Sdept, Sloc)中:
-
函数依赖:
Sno -> Sdept
Sdept -> Sloc
Sloc 传递函数依赖于 Sloc 。
-
-
解决方法:
-
采用投影分解法,把SL分解为两个关系模式,以消除传递函数 依赖:
SD(Sno, Sdept)
DL(Sdept, Sloc)
-
定义
-
关系模式R 中若不存在这样的码X、 属性组Y及非主属性Z(Z 不包含于 Y), 使得X-> Y,Y -> Z,成 立, Y -> X,则称R ∈ 3NF。
-
即:若R∈3NF,则R的每一个非主属性既不部分函数依赖于 候选码也不传递函数依赖于候选码。
作用及缺陷
将一个2NF关系分解为多个3NF的关系后,并不能完全消 除关系模式中的各种异常情况和数据冗余。
BCNF
定义
-
设关系模式R∈1NF,如果对于R的每个 函数依赖X -> Y,若Y不属于X,则X必含有候选码,那么 R∈BCNF。
-
即:若R∈BCNF
- 每一个决定属性集(因素)都包含(候选)码。
- R中的所有属性(主,非主属性)都完全函数依赖于码。
- R∈3NF.
性质
- 所有非主属性都完全函数依赖于每个候选码。
- 所有主属性都完全函数依赖于每个不包含它的 候选码。
- 没有任何属性完全函数依赖于非码的任何一组 属性
例子
在关系模式STJ(S,T,J)中,S表示学生,T表示教 师,J表示课程。
(S,J) -> T,(S,T) -> J,T -> J
STJ∈3NF (S,J)和(S,T)都可以作为候选码 S、T、J都是主属性
STJ不属于BCNF T -> J,T是决定属性集,T不是候选码
解决方法:将STJ分解为二个关系模式:
ST(S,T) ∈ BCNF, TJ(T,J)∈ BCNF
多值依赖
PS:多值依赖以及第四范式笔者正在寻找更恰当的描述方式,找到之后会第一时间更新。
第四范式
规范化基本步骤
- 1NF 消除非主属性对码的部分函数依赖。
消除决定属性集 非码 的非平凡函数依赖
- 2NF 消除非主属性对码的传递函数依赖。
- 3NF 消除主属性对码的部分和传递函数依赖。
- BCNF 消除非平凡且非函数依赖的多值依赖。
基本思想
- 消除不合适的数据依赖的各关系模式达到某种程度的“分 离”。
- 采用“一事一地”的模式设计原则。
- 所谓规范化实质上是概念的单一化。
- 规范化程度高不等于关系模式好,在实际应用中我们常常会在实际需求与规范化中做 trade off。笔者认为,这个妥协的过程广泛地存在于工程应用中。
- 在设计数据库模式结构时,必须对现实世界的实际情况和用 户应用需求作进一步分析,确定一个合适的、能够反映现实 世界的模式。
- 规范化过程可以在其中任何一步终止。