数据库原理-第6章:规范化
Posted 可能自洽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库原理-第6章:规范化相关的知识,希望对你有一定的参考价值。
规范化
1.1 函数依赖及其分类
(1)定义-函数依赖
设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于X上的每一个具体值,Y有唯一的具体值与之对应,
也即:X上的属性值确定后, Y上的属性值必确定则称X函数确定Y或Y函数依赖于X, 记作X→Y
或说: r是R(U) 上的任意关系,如果成立,对
∀
r
\\forall r
∀r,
s
∈
r
s \\in r
s∈r ,若t[X] = s[X],则t[Y] = s[Y],X称为决定因素,Y称为依赖因素
(2)定义-非平凡的函数依赖和平凡的函数依赖
若有X→Y,但Y
∉
\\notin
∈/ X,则称X→Y是非平凡的函数依赖
若 X→Y,但Y
∈
\\in
∈ X,则称X→Y是平凡的函数依赖
(3)定义-完全函数依赖和部分函数依赖
在R(U)中,如果X→Y,并且对于X的任何一个真子集X ’ ,没有X’→Y,则称Y对X完全函数依赖,记作:
X
→
f
Y
X \\overset{f} \\to Y
X→fY 。由定义知,当X是单个属性时,由于X不存在任何真子集,
X
→
f
Y
X \\overset{f} \\to Y
X→fY
若X→ Y, 但Y不完全函数依赖于X,即存在X的真子集X ’ ,满足X ’ → Y ,则称Y对X部分函数依赖,记作
X
→
p
Y
X \\overset{p} \\to Y
X→pY
(4)定义-传递函数依赖
在R(U)中,如果X→Y(Y
∉
\\notin
∈/ X) ,不存在 Y→X ,Y→Z(Z
∉
\\notin
∈/ Y),则称Z传递函数依赖于X。
记为:
X
→
传
递
Z
X \\overset{传递} \\to Z
X→传递Z
1.2 码
(1)候选关键字(码)(Candidate key)
设 K 为R<U ,F>中的属性或属性组合,若
K
→
f
U
K \\overset{f} \\to U
K→fU , 则K为R的候选关键字(码)(Candidate key)
如:Student (Sno,Sname, Ssex,Sdept, Sage),Sno,Sname是其候选关键字
候选码的性质:
标志的唯一性:对R(U)中的每一个元组,K确定后,元组就相应确定了;
无冗余性:当K是属性组时,K的任一部分不能确定元组
例1 SC1(S#,C#,GRADE,CREDIT)
候选码:(S#,C#);
主属性:S#,C#;
非主属性:CRADE, CREDIT;
(2)定义-外部码(Foreign key)
关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称 X是R的外部码(Foreign key),也称外码。主码与外部码提供了一个表示关系间联系的手段。
1.3 范式(Normal Form)
(1)1NF(如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF)
第一范式是对关系模式的最起码的要求,不满足第一范式的数据库模式不能称为关系数据库。
(2)2NF(若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF)
(3)3NF(关系模式R<U,F> 中(码X、属性组Y及非主属性Z( Z ⊈ Y Z \\not\\subseteq Y Z⊆Y ))若X→Y成立,Y→X不成立,不存在Y→Z成立,则称R<U,F> ∈ 3NF)
若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。
如果R∈3NF,则R也是2NF。
采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。
例1 在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程
函数依赖:
假设每一教师只教一门课。每门课由若干教师教,但某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称。于是有:
(S,J)→T,(S,T)→J,T→J
其中:
(S,J)和(S,T)都可以作为候选码
STJ∈3NF
T→J,即T是决定属性集,可是T只是主属性,它既不是候选码,也不包含候选码
存在的问题:
插入异常
如果某个教师开设了某门课程,但尚未有学生选修,则有
关信息也无法存入数据库中。
删除异常
如果选修过某门课程的学生全部毕业了,在删除这些学生
元组的同时,相应教师开设该门课程的信息也同时丢掉了。
数据冗余度大
虽然一个教师只教一门课,但每个选修该教师该门课程的
学生元组都要记录这一信息。
修改复杂
某个教师开设的某门课程改名后,所有选修了该教师该门
课程的学生元组都要进行相应修改。
原因:
主属性J依赖于T,即主属性J部分依赖于码(S, T)。
解决方法:
采用投影分解法,将STJ分解为二个关系模式:
ST(S,T), TJ(T,J)
(4)BCNF(设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若 Y ⊈ X Y \\not\\subseteq X Y⊆X ,则X必含有码,那么R∈BCNF。等价于:每一个决定属性集都包含码)
BCNF的关系模式所具有的性质:
所有非主属性都完全函数依赖于每个候选码。
所有主属性都完全函数依赖于每个不包含它的候选码。
没有任何属性完全函数依赖于非码的任何一组属性。
例1
STJ(S,T,J)∈ 3NF
ST(S,T)∈ BCNF
TJ(T,J)∈ BCN
例2 关系模式C(Cno,Cname,Pcno)
C∈3NF
C∈BCNF
例3 关系模式S(Sno,Sname,Sdept,Sage)
假定S有两个码Sno,Sname
S∈3NF
S ∈ BCNF
例4 关系模式SJP(S,J,P),S表示学生,J表示课程,P表示名次。每一个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一个学生(即没有并列名次)。
函数依赖:(S,J)→P;(J,P)→S
(S, J) 与 (J, P) 都可以作为候选码,属性相交
SJP∈3NF
SJP∈BCNF
例5 在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
函数依赖:(S,J)→T,(S,T)→J,T→J
(S, J) 和 (S, T) 都可以作为候选码,属性相交
STJ∈3NF(没有任何非主属性对码传递依赖或部分依赖)
STJ∈BCNF(T是决定因素,T不包含码)
(5)3NF与BCNF的关系
例 假设有关系模式仓库保管WPE(W# , P#, E#, QNT),其中各属性分别表示:仓库号W# 、零件号P#、职工号E#、零件数量QNT
函数依赖
(W# , P#)→QNT,(W#, P#)→ E#,E#→W# (E#, P#)→QNT
这个关系模式有两个候选关键字(W# , P# ) , (E# ,P#)
WPE∈3NF(没有任何非主属性对码传递依赖或部分依赖,只有一个非主属性QNT,它对任何
一个候选关键字都是完全依赖的,并且是直接函数依赖,故该关系模式属于3NF)
将上述的仓库保管WPE分解成BCNF范式
WPE(W# , P#, E#, QNT)
保管: EP(E# ,P#,QNT),码是(E# ,P#)
工作: EW(E# ,W#),码是E#
以上是关于数据库原理-第6章:规范化的主要内容,如果未能解决你的问题,请参考以下文章