1、为何要提出关系数据库规范化,即规范化理论是为了解决关系数据库中什么问题而引入的?
用来改造关系模式。通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
2、函数依赖的基本概念,码(包括超码,主码,候选码,外码)的基本概念
1、函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集, 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
所谓函数依赖是指关系中属性或属性组的值可以决定其它属性的值,设R(U)是属性集U上的关系模式,X、Y是U的子集:
如果X和Y之间是1:1关系(一对一关系),如学校和校长之间就是1:1关系,则存在函数依赖X → Y和Y →X。
如果X和Y之间是1:n关系(一对多关系),如年龄和姓名之间就是1:n关系,则存在函数依赖Y → X。
如果X和Y之间是m:n关系(多对多关系),如学生和课程之间就是m:n关系,则X和Y之间不存在函数依赖。
在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但Y X,则称X→Y是非平凡的函数依赖;若X→Y,但Y X, 则称X→Y是平凡的函数依赖。
例:在关系SC(Sno, Cno, Grade)中,非平凡函数依赖: (Sno, Cno) → Grade;
平凡函数依赖: (Sno, Cno) → Sno (Sno, Cno) → Cno
若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。
2、 完全函数依赖: 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ Y, 则称Y对X完全函数依赖,记作。
3、部分函数依赖:若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作
例:中 (Sno,Cno)→Grade是完全函数依赖,(Sno,Cno)→Sdept是部分函数依赖
∵Sno →Sdept成立,且Sno是(Sno,Cno)的真子集。
当存在部分依赖时,就会产生数据冗余。
4、传递函数依赖:在R(U)中,如果X→Y,(YX) ,YX ,Y→Z,Z Y,则称Z对X传递函数依赖,记为:
注: 如果Y→X, 即X←→Y,则Z直接依赖于X。
例: 在关系Std(Sno, Sname,Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname
Mname传递函数依赖于Sno
5、侯选码:设K为R中的属性或属性组,若KU (每个属性), 则K称为R的侯选码(Candidate Key)
注K满足两个条件:
1.K完全函数决定该关系的所有其它属性。
2.K的任何真子集都不能完全函数决定R的所有其它属性,K必须是最小的。
若候选码多于一个,则选定其中的一个做为主码(Primary Key),通常称之为码。
主属性(Prime attribute):包含在任何一个候选码中的属性。
非主属性或非码属性:不包含在任何码中的属性。
例:关系模式S(Sno,Sdept,Sage),单个属性Sno是码,
SC(Sno,Cno,Grade)中,(Sno,Cno)是码
由于码能唯一确定一个元组,所以关系的码函数决定该关系的所有属;一个关系中的所有属性都函数依赖于该关系的码。
例:关系模式R(P,W,A)P:演奏者 W:作品 A:听众:一个演奏者可以演奏多个作品,某一作品可被多个演奏者演奏,听众可以欣赏不同演奏者的不同作品。
码为(P,W,A),即All-Key
6、外部码: 关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码
如在SC(Sno,Cno,Grade)中,Sno不是码,
但Sno是关系模式S(Sno,Sdept,Sage)的码,则Sno是关系模式SC的外部码
主码与外部码一起提供了表示关系之间联系的手段
3、1NF,2NF,3NF,BCNF的定义及应用,能判断某一个关系模式处于第几范式,各级别范式存在的问题(插入,删除和更新异常)和解决方法、
各种范式之间存在联系:
1、1NF :如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库;简而言之,第一范式就是无重复的列,关系数据库研究的关系都是规范化的关系。但是满足第一范式的关系模式并不一定是一个好的关系模式。
例:关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,假设每个系的学生住在同一个地方。
(Sno, Cno) P Sdept ∵ Sno → Sdept
(Sno, Cno) P Sloc ∵ Sdept 传递 Sloc
S-L-C的码为(Sno, Cno)。
S-L-C满足第一范式。
非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)。
插入异常:如未选课的学生不能插入。
删除异常:如放弃修一门课,只选修这-门课的学生被删除
数据冗余度大 修改复杂
原因:存在对码的冗余依赖。Sdept、 Sloc部分函数依赖于码。
解决方法:S-L-C分解为两个关系模式,以消除这些部分函数依赖
SC(Sno, Cno, Grade) S-L(Sno, Sdept, Sloc)
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、3NF:关系模式R 中若不存在这样的码X、属性组Y及非主属性Z(Z Y), 使得X→Y, Y → X, Y→Z成立,即每个非主属性都不传递依赖于R的码,则称R ∈ 3NF。若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
简而言之,第三范式(3NF)要求一个数据库表中不能包含其它表中已包含的非码信息。
例:S-L(Sno, Sdept, Sloc) ∈ 2NF S-L(Sno, Sdept, Sloc) ∈ 3NF
S-D(Sno,Sdept) ∈ 3NF D-L(Sdept, Sloc)∈ 3NF
如果R∈3NF,则R也是2NF。
局部依赖和传递依赖是模式产生数据冗余和操作异常的两个重要原因。
由于3NF模式中不存在非主属性对候选码的局部依赖和传递依赖,因此一定程度上上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题具有较好的性能。将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。
4、BC范式(BCNF):关系模式R∈1NF,若X→Y且Y X时X必含有码,即每个属性都不传递依赖于R的码,则R ∈BCNF。
等价于:每一个决定因素都包含码,即消除任何属性对码的部分和传递函数依赖
若R∈BCNF 所有非主属性对每一个码都是完全函数依赖;所有的主属性对每一个不包含它的码,也是完全函数依赖;没有任何属性完全函数依赖于非码属性。
R ∈BCNFR ∈3NF 。如果R∈3NF,且R只有一个候选码
例:关系模式S(Sno,Sname,Sdept,Sage)假定S有两个码Sno,Sname
S∈3NF S ∈ BCNF
例:系模式SJP(S,J,P) s 学生,J课程, P名次
函数依赖:(S,J)→P;(J,P)→S (S,J)与(J,P)都可以作为候选码,属性相交
SJP∈3NF,(不存在非主属性对码的部分和传递依赖)
SJP∈BCNF,(每个决定因素都包含码)