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