@[TOC]
概念回顾
关系模式由五部分组成,即它是一个五元组:
$R(U, D, DOM, F)$
- $R:$ 关系名
- $U:$ 组成该关系的属性名集合
- $D:$ 属性组U中属性所来自的域
- $DOM:$ 属性向域的映象集合
- $F:$ 属性间数据的依赖关系集合
关系模式$R(U, D, DOM, F)$中,$D$和$DOM$与逻辑结构设计关系不大,因此,将关系模式简化为一个三元组:
- $R(U, F)$
当且仅当$U$上的一个关系$r$ 满足$F$时,$r$称为关系模式$R(U, F)$的一个关系
。
1、函数依赖的定义
设$R(U)$是一个属性集$U$上的关系模式,$X$和$Y$是$U$的子集。
若对于$R(U)$的任意一个可能的关系$r$,$r$中不可能存在两个元组在$X$上的属性值相等, 而在$Y$上的属性值不等, 则称 “$X$函数确定$Y$” 或 “$Y$函数依赖于$X$”,记作$X→Y$。
函数依赖说明:
- 所有关系实例均要满足
- 语义范畴的概念
- 数据库设计者可以对现实世界作强制的规定
1.1 平凡函数依赖和非平凡函数依赖
定义:
在关系模式$R(U)$中,对于$U$的子集$X$和$Y$。
- 如果X→Y,但$Y \not\subseteq X$则称X→Y是非平凡的函数依赖
- 若X→Y,但$Y \subseteq X$, 则称X→Y是平凡的函数依赖
举例说明:
在关系SC(Sno, Cno, Grade)中
非平凡函数依赖
- (Sno, Cno)——>Grade
平凡函数依赖
- (Sno,Cno)——>Sno
- (Sno,Cno)——>Cno
若$X→Y$,则$X$称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。
若$X→Y,Y→X,$则记作$X←→Y$。
若$Y$不函数依赖于$X$,则记作$X \not\rightarrow Y$。
1.2 完全函数依赖和部分函数依赖
定义:
在$R(U)$中,如果$X→Y$,并且对于$X$的任何一个真子集$X^{'}$,都有$X^{'} \not\rightarrow Y$,则称$Y对X$完全函数依赖
,记作$X \overset F \rightarrow Y$
若$X→Y$,但$Y$不完全函数依赖于$X$,则称$Y$对$X$部分函数依赖
,记作$X \overset P \rightarrow Y$。
举例说明一下:
$(Sno,Cno) \overset F \rightarrow Grade$是完全函数依赖;
$(Sno,Cno)→Sdept$是部分函数依赖
因为在完全函数依赖中,任何一个真子集(Sno或者Cno)都不能单独地决定Grade,也就是$Sno \not\rightarrow Grade$和$Cno \not\rightarrow Grade$。
而在部分函数依赖中,任何一个真子集(Sno或者Cno)都可以单独地决定Sdept,也就是$Sno \rightarrow Sdept$和$Cno \rightarrow Sdept$。
1.3 传递函数依赖
定义:
在R(U)中,如果$X→Y,(Y \not\subseteq X) ,Y \not\rightarrow X, Y→Z$, 则称$Z$对$X$传递函数依赖
。 记作:$X→Z$。
注:
如果Y→X,即X←→Y,则Z直接依赖
于X,非传递依赖。
例: 在关系Std(Sno, Sdept, Mname)中(属性组分别为学号、系别、系主任名字),有:
- Sno → Sdept,Sdept → Mname
- Mname
传递
函数依赖于Sno
记作: Sno → Mname
2、码
在讲解码的概念之前,首先阐明一点,码即是键,键即是码,意思就是我们平时学习数据库进行表操作的时候,遇见的主键和外键就是主码和外码的意思,两者是同一概念,不要弄混。先给一个图大致理解下:
2.1 主码和候选码
定义:
设$K$为$R<U,F>$中的属性或属性组合。若$K \overset F \rightarrow U$,则$K$称为$R$的侯选码(Candidate Key)。
若候选码多于一个,则选定其中的一个做为主码(Primary Key)。
2.1主属性与非主属性
包含
在任何一个候选码
中的属性 ,称为主属性
(Prime attribute)。不包含
在任何码中的属性称为非主属性
(Nonprime attribute)或非码属性(Non-key attribute)
2.2 全码
整个属性组$U$是码,称为全码(All-key)。
即当所有的
属性共同构成一个候选码
时,这时该候选码为全码
。举例在关系模式R(教师,课程,学生)中,假如一个教师可以讲授多门课程,某门课程可以有多个教师讲授,学生可以听不同教师讲授的不同课程,那么,要区分关系中的每一个元组,这个关系模式R的候选码应为全部属性构成 (教师、课程、学生),即主码。
举例说明一下:
关系模式$S(\underline{Sno},Sdept,Sage)$,
- 单个属性Sno是码,
$SC(\underline{Sno,Cno},Grade)$中,
- (Sno,Cno)是码
关系模式$R(P,W,A)$
$P:$演奏者 $W:$作品 $A:$听众
- 一个演奏者可以演奏多个作品
- 某一作品可被多个演奏者演奏
- 听众可以欣赏不同演奏者的不同作品
此关系模式的码为(P,W,A),即全码(All-Key)
2.3 外部码
定义:
关系模式$R$ 中属性或属性组$X$ 并非$R$的码,但 $X$ 是另一个关系模式$S$的码,则称 $X$ 是$R$ 的外部码(Foreign key),简称外码。
举例:
如在$SC(\underline{Sno,Cno},Grade)$中,$Sno$不是码,但$Sno$是关系模式$S(\underline{Sno},Sdept,Sage)$的码,则$Sno$是关系模式$SC$的外部码。
3、范式
范式是符合某一种级别的关系模式的集合
,在关系数据库中的关系必须满足
一定的要求,而满足不同程度
要求的关系为不同类型的范式
。
范式的种类:
- $第一范式(1NF)$
- $第二范式(2NF)$
- $第三范式(3NF)$
- $BC范式(BCNF)$
- $第四范式(4NF)$
- $第五范式(5NF)$
各种范式之间存在联系:
某一关系模式$R$为第$n$范式,可简记为$R∈nNF$。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化 。
3.1 第一范式(1NF)
定义:
如果一个关系模式$R$的所有属性都是不可分
的基本数据项
,则$R∈1NF$。
第一范式是对关系模式的最起码
的要求。不满足第一范式的数据库模式不能
称为关系数据库。
但是满足第一范式的关系模式并不一定是一个好的关系模式
举例:
[例] 关系模式 $S-L-C(Sno, Sdept, Sloc, Cno, Grade)$
- $Sloc$为学生住处,假设每个系的学生住在同一个地方
函数依赖包括
- $(Sno, Cno) \overset F \rightarrow Grade$
- $Sno → Sdept$
- $(Sno, Cno) \overset P \rightarrow Sdept$
- $Sno → Sloc$
- $(Sno, Cno) \overset P \rightarrow Sloc$
- $Sdept → Sloc$
$S-L-C$的码为$(Sno, Cno)$
$S-L-C$满足第一范式。
非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)
分解前的关系模式$S-L-C$
但是$S-L-C$不是一个好的关系模式,会产生以下问题:
- (1) 插入异常
- (2) 删除异常
- (3) 数据冗余度大
- (4) 修改复杂
原因:==Sdept、 Sloc部分函数依赖于码。==
解决方法:
$S-L-C$分解为两个关系模式,以消除这些部分函数依赖
- $SC(Sno, Cno, Grade)$
- $S-L(Sno, Sdept, Sloc)$
- 关系模式$SC$的码为$(Sno,Cno)$
- 关系模式$S-L$的码为$Sno$
- 这样非主属性对码都是完全函数依赖
3.2 第二范式(2NF)
定义:
若$R∈1NF$,且每一个非主属性都完全函数依赖于码,则$R∈2NF$。
例:
- $S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈1NF$
$S-L-C(Sno, Sdept, Sloc, Cno, Grade) 分解为2NF:$
- $SC(Sno, Cno, Grade) ∈ 2NF$
- $S-L(Sno, Sdept, Sloc) ∈ 2NF$
采用投影分解法将一个$1NF$的关系分解为多个$2NF$的关系,可以在一定程度上减轻原$1NF$关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
但将一个$1NF$关系分解为多个$2NF$的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
3.3 第三范式(3NF)
定义:
- 关系模式$R<U,F>$中若不存在这样的码$X$、属性组$Y$及非主属性$Z(Z \not\subseteq Y)$, 使得$X→Y,Y→Z$成立,$Y → X$,则称$R<U,F> ∈ 3NF$。
- 若$R∈3NF$,则每一个非主属性既不部分依赖于码也不传递依赖于码。
例:$2NF$关系模式$S-L(Sno, Sdept, Sloc)$中的函数依赖关系:
- $Sno→Sdept$
- $Sdept \not\rightarrow Sno$
- $Sdept→Sloc$
可得:
$Sno \overset {传递} \rightarrow Sloc$,即$S-L$中存在非主属性对码的传递函数依赖,$S-L \not\in 3NF$。
函数依赖图:
解决方法:
采用==投影分解法==,把$S-L$分解为两个关系模式,以消除传递函数依赖:
- $S-D(Sno, Sdept)$
- $D-L(Sdept,Sloc)$
- $S-D$的码为$Sno$,$D-L$的码为$Sdept$。
分解后的关系模式$S-D$与$D-L$中不再存在传递依赖。
采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。
3.4 BC范式(BCNF)
定义:
关系模式$R<U,F>∈1NF$,若$X \not\rightarrow Y$且$Y \subseteq X$时$X$必含有码,则$R<U,F> ∈BCNF$。
等价于:每一个决定属性因素都包含码
若R∈BCNF:
- 所有
非主属性
对每一个码都是完全函数依赖
- 所有的
主属性
对每一个不包含
它的码,也是完全函数依赖 - 没有
任何属性
完全函数依赖于非码
的任何一组属性
如果R∈3NF,且R只有一个候选码
注意:如果一个关系模式$R$属于$BCNF$,则一定是$3NF$,但是一个关系模式$R$如果属于$3NF$,则不一定是$BCNF$。
[例] 关系模式$S(Sno,Sname,Sdept,Sage)$
- 假定$S$有两个码$Sno,Sname$
- $S∈3NF$
- $S ∈ BCNF$
[例]在关系模式$STJ(S,T,J)$中,$S$表示学生,$T$表示教师,$J$表示课程。
函数依赖:
- $(S,J)→T,(S,T)→J,T→J$
-$(S,J)和(S,T)$都是候选码
$STJ∈3NF$
- 没有任何非主属性对码传递依赖或部分依赖
$STJ \not\in BCNF$
- $T$是决定因素,在$BCNF$中所有的
主属性
对每一个不包含
它的码,也是完全函数依赖,但$T$不包含码。$STJ$显然不满足。
- $T$是决定因素,在$BCNF$中所有的
解决方法:将$STJ$分解为二个关系模式:
$ST(S,T) ∈ BCNF, TJ(T,J)∈ BCNF$
没有任何属性对码的部分函数依赖和传递函数依赖。
其它数据库系统概论详细请看:
✨$\textcolor{blue}{原创不易,还希望各位大佬支持一下}$ <br/>
👍 $\textcolor{green}{点赞,你的认可是我创作的动力!}$ <br/>
⭐️ $\textcolor{green}{收藏,你的青睐是我努力的方向!}$ <br/>
✏️ $\textcolor{green}{评论,你的意见是我进步的财富!}$ <br/>