本文主要是介绍6.关系数据理论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
6.关系数据理论
6.1问题的提出
关系数据库逻辑设计
a.针对具体问题,如何构造一个适合的数据模式
b.数据库逻辑设计的工具—关系数据库的规范化理论
概念回顾:
关系:符合一定语义规则的一组二维表还有某些元组和属性列组成
关系模式:一类具有共同特征的关系的抽象的集合
关系数据库:基于关键模式构建
关系数据库的模式:
关系模式的形式化定义
五部分:R(U,D,DOM,F)
R:关系名
U:组成该关系的属性名集合(性别-年龄…)
D:属性组U中的属性所来自的域(属性范围)
DOM:属性向域的映像集合
F:属性间数据的依赖关系集合
简化:R(U,F) 当且仅当U上的一个关系r满足F时候,r称为关系模式R(U,F)的一个关系
数据依赖
1.完整性约束的表现形式
a.限定属性取值范围:例如成绩在0-100之间
b.定义属性值间的相互关联(主要体现于值是否相等),这就是数据依赖,他是数据库模式设计的关键
2.数据依赖
a.一个关系内部属性与属性之间的约束
b.现实世界属性间相互联系的抽象
c.数据内在的性质
d.语义的体现
数据依赖类型
函数依赖FD
多值依赖MVD
其他
数据依赖对关系模式的影响
可能存在的问题:
1.数据冗余
2.更新异常
3.插入异常
4.删除异常
解决方法:
通过分解关系模式来消除其中不合适的数据依赖
6.2规范化
6.2.1函数依赖
定义: 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件
6.2.1.2平凡函数依赖与非平凡函数依赖
X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。
若不特别声明, 我们总是讨论非平凡函数依赖。
若X→Y,则X称为这个函数依赖的决定因素(Determinant)。
若X→Y,Y→X,则记作X←→Y。
若Y不函数依赖于X,则记作X↛Y。
6.2.1.3完全函数依赖与部分函数依赖
定义在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → F Y。
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作xP → Y
[例] 在关系SC(Sno, Cno, Grade)中,有:
由于:Sno ↛Grade,Cno ↛ Grade,
因此:(Sno, Cno) → Grade
(Sno, Cno)→Sno
(Sno, Cno) →Cno
6.2.1.4传递函数依赖
定义6.3 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。记为:X → Z。
注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
6.2.2码
定义6.4 设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。
如果U部分函数依赖于K,即K → U,则K称为超码 (Surpkey)。候选码是最小的超码,即K的任意一个真子集都不是候选码。
若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
主属性与非主属性
包含在任何一个候选码中的属性 ,称为主属性 (Prime attribute)
不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
全码:整个属性组是码,称为全码(All-key)
定义6.5 关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
SC(Sno,Cno,Grade)中,Sno不是码
Sno是 S(Sno,Sdept,Sage)的码,则Sno是SC的外码
主码与外部码一起提供了表示关系间联系的手段
6.2.3范式
范式是符合某一种级别的关系模式的集合。
关系数据库中的关系必须满足一定的要求。满足 不同程度要求的为不同范式。
各种范式之间存在联系:
某一关系模式R为第n范式,可简记为R∈nNF。
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。
6.2.4 2NF
定义:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
[例6.4] S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc为学生的住处,并且每个系的学生住在同一个地方。S-L-C的码为(Sno,Cno)。
函数依赖有
(Sno,Cno)→Grade
Sno→Sdept, (Sno,Cno)→Sdept
Sno→Sloc, (Sno,Cno)→Sloc
Sdept→Sloc
非主属性Sdept、Sloc并不完全依赖于码
关系模式S-L-C不属于2NF
一个关系模式不属于2NF,会产生以下问题:
插入异常
如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。
删除异常
如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。
修改复杂
如果一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。
出现这种问题的原因
例子中有两类非主属性:
一类如Grade,它对码完全函数依赖
另一类如Sdept、Sloc,它们对码不是完全函数依赖
解决方法:
用投影分解把关系模式S-L-C分解成两个关系模式
SC(Sno,Cno,Grade)
S-L(Sno,Sdept,Sloc)
SC的码为(Sno,Cno),SL的码为Sno,这样使得非主属性对码都是完全函数依赖了
6.2.5 3NF
(无传递依赖和部分依赖)
定义 设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。
SC没有传递依赖,因此SC ∈ 3NF
S-L中Sno →Sdept( Sdept ↛ Sno), Sdept→Sloc,可得Sno → Sloc。
解决的办法是将S-L分解成
S-D(Sno,Sdept)∈ 3NF
D-L(Sdept,Sloc)∈ 3NF
6.2.6 BCNF
定义 设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
BCNF的关系模式所具有的性质
所有非主属性都完全函数依赖于每个候选码
所有主属性都完全函数依赖于每个不包含它的候选码
没有任何属性完全函数依赖于非码的任何一组属性
如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
[例6.5]考察关系模式C(Cno,Cname,Pcno)
它只有一个码Cno,没有任何属性对Cno部分依赖或传递依赖,所以C∈3NF。
同时C中Cno是唯一的决定因素,所以C∈BCNF。
对于关系模式SC(Sno,Cno,Grade)可作同样分析。
[例6.6] 关系模式S(Sno,Sname,Sdept,Sage),
假定Sname也具有唯一性,那么S就有两个码,这两个码都由单个属性组成,彼此不相交。
其他属性不存在对码的传递依赖与部分依赖,所以S∈3NF。
同时S中除Sno,Sname外没有其他决定因素,所以S也属于BCNF。
[例6.7] 关系模式SJP(S,J,P)中,S是学生,J表示
课程,P表示名次。每一个学生选修每门课程的
成绩有一定的名次,每门课程中每一名次只有一
个学生(即没有并列名次)。
由语义可得到函数依赖: (S,J)→P;(J,P)→S
(S,J)与(J,P)都可以作为候选码。
关系模式中没有属性对码传递依赖或部分依赖,所以
SJP∈3NF。
除(S,J)与(J,P)以外没有其他决定因素,所以
SJP∈BCNF。
[例6.8] 关系模式STJ(S,T,J)中,S表示学生,T表
示教师,J表示课程。每一教师只教一门课。每
门课有若干教师,某一学生选定某门课,就对应
一个固定的教师。
由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J
因为没有任何非主属性对码传递依赖或部分依赖,
STJ ∈ 3NF。
因为T是决定因素,而T不包含码,所以STJ ∈ BCNF
关系。
3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。
一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。
3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。
6.2.7 多值依赖
定义 设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
多值依赖的另一个等价的定义
在R(U)的任一关系r中,如果存在元组t,s使得t[X]=s[X]
,那么就必然存在元组w,v∈r,(w,v可以与s,t相
同), 使得w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],
v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两
个新元组必在r中则Y多值依赖于X,记为X→→Y。这里
X,Y是U的子集,Z=U-X-Y。
平凡多值依赖和非平凡的多值依赖
若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。
否则称X→→Y为非平凡的多值依赖。
多值依赖的性质
(1)多值依赖具有对称性。
即若X→→Y,则X→→Z,其中Z=U-X-Y
多值依赖的对称性可以用完全二分图直观地表示出来。
(2)多值依赖具有传递性。即若X→→Y,Y→→Z, 则 X→→Z -Y。
(3)函数依赖是多值依赖的特殊情况。即若X→Y,则
X→→Y。
(4)若X→→Y,X→→Z,则X→→YZ。
(5)若X→→Y,X→→Z,则X→→Y∩Z。
(6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
多值依赖与函数依赖的区别
(1)多值依赖的有效性与属性集的范围有关
若X→→Y在U上成立,则在W(XY W U)上一定成立;反之则不然,即X→→Y在W(W U)上成立,在U上并不一定成立。
原因:多值依赖的定义中不仅涉及属性组X和Y,而且涉及U中其余属性Z。
多值依赖的有效性与属性集的范围有关(续)
一般地,在R(U)上若有X→→Y在W(W U)上成立,则称X→→Y为R(U)的嵌入型多值依赖。
函数依赖X→Y的有效性仅决定于X、Y这两个属性集的值
只要在R(U)的任何一个关系r中,元组在X和Y上的值满足定义6.l,则函数依赖X→Y在任何属性集W(XY W U)上成立。
(2)若函数依赖X→Y在R (U)上成立,则对于任何Y‘ Y均有X→Y’ 成立。多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y’ Y有X→→Y’ 成立。
6.2.8 4NF
定义 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的非平凡多值依赖实际上是函数依赖。
如果一个关系模式是4NF, 则必为BCNF。
在[例6.10]的WSC中,W →→S,
W→→C,他们都是非平凡多值依赖。而W不是码,关系模式WSC的码是(W,S,C),即All-key,因此WSC ∈ 4NF。
可以把WSC分解成WS(W,S),WC(W,C), WS∈4NF,WC∈4NF。
6.2.9 规范化小结
在关系数据库中,对关系模式的基本要求是满足第一范式。
规范化程度过低的关系不一定能够很好地描述现实世界
可能存在插入异常、删除异常、修改复杂、数据冗余等问题
解决方法就是对其进行规范化,转换成高级范式
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
关系数据库的规范化理论是数据库逻辑设计的工具。
规范化的基本思想
是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”。
即采用“一事一地”的模式设计原则
让一个关系描述一个概念、一个实体或者实体间的一种联系。
若多于一个概念就把它“分离”出去。
因此 规范化实质上是概念的单一化。
这篇关于6.关系数据理论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!