关系模式: R(U, F) 本章中把关系模式看作一个三元组
R是符号化的元组语义
U为一组属性
F为属性组U上的一组数据依赖
数据依赖:是一个关系内部属性与属性之间的一种约束关系
·通过属性间值的相等与否体现出来的数据间相互联系
·是现实世界属性间相互联系的抽象
·是数据内在的性质
·是语义的体现
主要类型有:函数依赖(FD)、多值依赖(MVD)
函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。若不特别声明, 我们总是讨论非平凡函数依赖。
若X→Y,则X称为这个函数依赖的决定因素
若X→Y,Y→X,则记作X←→Y。
若Y不函数依赖于X,则记作X↛Y。
完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作
X
→
F
Y
X \overset F \rightarrow Y
X→FY
部分函数依赖:若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作
X
→
P
Y
X \overset P \rightarrow Y
X→PY
传递函数依赖:在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。记为:
X
→
传
递
Z
X \overset {传递} \rightarrow Z
X→传递Z
⚠️:如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
码
候选码:设K为R<U,F>中的属性或属性组合。若
K
→
F
U
K \overset F \rightarrow U
K→FU,则K称为R的一个候选码(Candidate Key)。
如果U部分函数依赖于K,即
K
→
P
U
K \overset P\rightarrow U
K→PU,则K称为超码 。
候选码是最小的超码,即K的任意真子集都不是候选码。
若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
包含在任何一个候选码中的属性 ,称为主属性
不包含在任何码中的属性称为非主属性
整个属性组是码,称为全码(All-key)
外部码:关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
范式:是符合某一种级别的关系模式的集合
种类有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)、第五范式(5NF)
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
一个关系模式不属于2NF,会产生插入异常、删除异常、修改复杂的问题,
原因是例子中有两类非主属性:一类对码完全函数依赖;另一类对码不是完全函数依赖。
解决方法是用投影分解把关系模式S-L-C分解成两个关系模式。
设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈== 3NF==。
设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
若X→→Y,而Z=Ф,则称X→→Y为平凡的多值依赖。
否则称X→→Y为非平凡的多值依赖。
关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
如果一个关系模式是4NF, 则必为BCNF。
不能说规范化程度越高的关系模式就越好。 必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。上面的规范化步骤可以在其中任何一步终止。
——————————————————————————————————————————————————————
(1)关系模式如下:
学生:Student(Sno,Sname,Sbirth,Dept,Cno,Rno)
班级:Class(Cno,Pname,Dept,Cnum,Cyear)
系:D(Dept,Dno,Doffice,Dnum)
学会:M(Mname,Myear,Maddr,Mnum)
(2)学生函数依赖:Sno→Sname,Sno→Sbirth,Sno→Cno,Dept→Rno,Cno→Dept。
传递依赖:由于Sno→Cno,Cno↛Sno,Cno→Dept,则Sno→Dept。
由于Sno→Dept,Dept↛Sno,且Dept→Rno,则Sno→Rno。
由于Cno→Dept,Dept↛Cno,且Dept→Rno,则Cno→Rno。
班级传递依赖:Cno→Pname,Cno→Cnum,Cno→Cyear。
传递函数依赖:Cno→Pname,Pname↛Cno,且Pname→Dept,则Cno→Dept。
系函数依赖:Dept→Dno,Dept→Doffice,Dept→Dnum,Dno→Dept。
不存在传递函数依赖
学会函数依赖:Mname→Year,Mname→Maddr,Mname→Mnum
没有传递函数依赖
(3)学生Student
候选码:Sno
外部码:Dept,Cno
全码:无
班级Class
候选码:Cno
外部码:Dept
全码:无
系D
候选码:Dept or Dno
无外部码,无全码
学会M
候选码:Mname
无外部码,无全码
(1)当属性组BC也是关系模式R的候选码时,R是BCNF
(2)R的候选码有:ACE,BCE,CDE
(3)不存在传递函数依赖,所以R属于3NF。每个函数依赖的决定因素都不包含码,所以R不属于BCNF
(1)正确
(2)正确
(3)正确
(4)❌ 当且仅当函数依赖A→→B 在R上成立,关系R(A,B,C)等于其投影R1(A,B)和R2(A,C)的连接。
(5)正确
(6)正确
(7)正确
(8)❌例:SC(Sno,Cno,Grade)学号课程号可确定唯一成绩,但学号不能确定成绩,课程号也不能确定成绩
(1)反证法 。假设R∈BCNF,R∉3NF。根据3NF定义得:
R中存在码X,属性组Y和非属性组Z,Y↛X,Z∉Y,使得X→Y,Y→Z成立
因为Y↛X,所以Y不是R的候选码
有因为R中存在函数依赖Y→Z,Z∉Y,而Y不包含码,所以R∉BCNF,与已知R∈BCNF矛盾,故假设不成立,R∈3NF
(2)反证法 。假设R∈3NF,R∉2NF。根据2NF定义得:
R中存在非主属性Z部分函数依赖于候选码X,即
X
→
P
Z
X \overset P \rightarrow Z
X→PZ
根据部分函数依赖的定义,R中存在X的真子集X’⊂X,使得X’→Z成立
因为R中存在码X,属性组X’及非属性组Z,X’↛X,Z∉X’,使得X→X’,X’→Z成立,所以R∉#NF,与已知矛盾,故假设不成立,R∈2NF。
一.
Y(X1,X2,X3,X4)
(X1,X2)→X3
X2→X4
- 侯选码?
- 属于第几范式?
解:
因为X2→X4,所以(X1,X2)→X4;
又因为(X1,X2)→X3,所以(X1,X2)→(X1,X2,X3,X4)。
因此:候选码:(X1,X2);非主属性:X3,X4。
因为(X1,X2)→X4, X2→X4,存在非主属性X4对候选码(X1,X2)的部分函数依赖;
所以不属于2NF。
结论:候选码(X1,X2),属于第一范式。
二.
R(A,B,C,D)
F={AB→D,AC→BD,B→C}
- 侯选码?
- 最高属于第几范式?
因为B→C,所以(A,B)→C;
又因为(A,B)→D,所以(A,B)→(A,B,C,D)。
因为AC→BD,所以(A,C)→(A,B,C,D)。
因此:候选码:(A,B)和(A,C);非主属性:D。
因为(A,B)→D,AC→D,非主属性完全函数依赖于任何一个候选码;
因此属于2NF。
因为(A,B)→D,AC→D,码与非主属性之间没有传递函数依赖;
因此属于3NF。
因为B→C,所以决定因素不含候选码;
因此不属于BCNF。
结论:候选码(A,B)和(A,C),最高属于3NF。
三.
R(X,Y,Z,W)
F={Y←→W,XY→Z}
- 侯选码?
- 最高属于第几范式?
因为Y←→W,所以Y→W,所以(X,Y)→W;
又因为(X,Y)→Z,所以(X,Y)→(X,Y,Z,W)。
因为Y←→W,所以W→Y,所以(X,W)→Y;
又因为XY→Z,W→Y,所以(X,W)→Z,所以(X,W)→(X,Y,Z,W);
因此候选码:(X,Y)(X,W);非主属性:Z。
因为(X,Y)→Z,(X,W)→Z,非主属性完全函数依赖于任何一个候选码;
因此属于2NF。
因为(X,Y)→Z,(X,W)→Z, 码与非主属性之间没有传递函数依赖;
因此属于3NF。
因为Y←→W,所以决定因素不含候选码;
因此不属于BCNF。
四.
R(A,B,C,D,E) F={A→B,CE→A,E→D}
1、求候选码。
2、最高属于第几范式,为什么?
3、分解到3NF。
因为E→D,所以CE→D。
因为CE→A,A→B,所以CE→B,所以CE→(A,B,C,D,E)。
因此候选码:(C,E);非主属性:A,B,D。
因为A→B和E→D,所以非主属性不完全依赖于候选码;
因此不属于2NF,最高属于1NF。
消除非主属性对码的部分函数依赖:R(A,C,E),R(A,B),R(D,E)
此时非主属性对码没有传递函数依赖,3NF:R(A,C,E),R(A,B),R(D,E)。
五.
R(商店编号,商品编号,数量,部门编号,负责人)
每个商店的每种商品只在一个部门销售,
每个商店的每个部门只有一个负责人,
每个商店的每种商品只有一个库存数量。
- 求候选码。
- R已达第几范式?为什么?
- 若不属于3NF,分解成3NF。
R(A,B,C,D,E)
F={(A,B)→C,(A,B)→D,(A,D)→E}
候选码:(A,B) 非主属性:C,D,E。
因为(A,B)→C,(A,B)→D,(A,D)→E,所以非主属性都完全函数依赖候选码;
因此R属于2NF。
因为(A,B)→D,(A,D)→E,所以码与非主属性之间有传递函数依赖;
因此R不属于3NF。
所以R已到达2NF。
消除码与非主属性之间的传递函数依赖:R(A,B,C,D) R(A,D,E)。
六.
R(A,B,C,D,E,F) F={A→C,AB→D,C→E,D→BF}
- 写出关键字。
- 分解到2NF。
- 分解到3NF。
- 分解到4NF。
因为A→C,所以(A,B)→C;
又(A,B)→C,C→E,所以(A,B)→E;
又AB→D,D→BF,所以(A,B)→F,(A,B)→(C,D,E,F)。
因为A→C,所以(A,D)→C;
又D→BF,所以(A,D)→BF;
又(A,D)→C,C→E,所以(A,D)→E,(A,D)→(C,D,E,F)。
因此候选码:(A,B),(A,D) 非主属性:C,E,F
2NF:R(A,C,E) R(A,B,D,F)
3NF:R(A,C) R(C,E) R(A,B,D) R(D,B,F)。
4NF:R(A,B,C) R(C,E) R(D,B,F)