320 likes | 454 Views
第七章 关系数据库设计理论. 关系数据库的规范化设计是指面对一个应用问题 , 如何选择一个比较好的关系模式集合。. 研究数据间自然联系与约束. 数据依赖. 规范化设计理论. 范式. 范式是关系模式的标准. 模式设计方法. 是自动化设计的基础. R ( U , D , dom() , F ). 数据依赖. 属性到域上的映射关系. 关系的域. 属性集. 关系名. 关系的内涵称为关系模式。它是静态的,与时间无关。 关系模式 通常简记为: R (U , F) 。. 关系模式设计引论. 在某校信息管理系统中要建立一个数据库来描述学生和选课
E N D
关系数据库的规范化设计是指面对一个应用问题,如何选择一个比较好的关系模式集合。关系数据库的规范化设计是指面对一个应用问题,如何选择一个比较好的关系模式集合。 研究数据间自然联系与约束 数据依赖 规范化设计理论 范式 范式是关系模式的标准 模式设计方法 是自动化设计的基础
R ( U,D,dom(),F ) 数据依赖 属性到域上的映射关系 关系的域 属性集 关系名 关系的内涵称为关系模式。它是静态的,与时间无关。 关系模式通常简记为:R (U,F)。
关系模式设计引论 • 在某校信息管理系统中要建立一个数据库来描述学生和选课 • 的一些信息,面临的对象有:学号、姓名、系名、系主任、课 • 号、成绩。 • 由已知事实可以得知上述对象之间有如下对应关系: (l)一个系有若干学生,但一个学生只属于一个系; (2)一个系只有一名系主任; (3)一个学生可选修多门课程,每门课程有若干学生选修; (4)每个学生学习每一门课程有一个成绩。 如何设计一个合理的关系数据库模式?
方案1:采用一个总的关系模式,将这些对象都放在SA中。方案1:采用一个总的关系模式,将这些对象都放在SA中。 SA(学号,姓名,系名,系主任,课号,成绩) (1)数据冗余 每个班的系主任信息多次重复出现,导致数据冗余太大,既浪 费存储空间,又容易造成数据的不一致性。 (2)插入异常 插入异常指的是应该插入的信息不能正常插入,例如,新生 刚入学,就无法把该系及相应系主任信息插入到数据库。 (3)删除异常 删除异常指的是不该删除的信息被删除了,例如,当一个班的全部学生毕业了,在删除该系学生信息时就会将该系及系主任信息也删除了。
结论: • 该关系模式不是一个好的模式。 • “好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。 原因:在该例中系主任属性不仅函数依赖于系名,而且还依赖于学号。正是由于属性间约束关系太强才造成了上述异常现象。 解决方法:通过分解关系模式来消除其中不合适的依赖。 • 如:将SA分解为两个关系模式: • S(学号,姓名,系名)、D(系名,系主任)、 • SC(学号,课号,成绩)
由此可见: • 关系模型中用关系来描述实体及其联系,对同一现实世界可用不同的关系模式来描述,但不同的关系模式的效果却有很大差异。 • 判断是否存在插入异常、删除异常和更新异常以及是否存在数据冗余是一种直观的判断一个关系模式设计质量的方法。 • 如何消除不合理的数据依赖,将一个“不好”的关系模式改造为一个“好”的关系模式,这就是关系数据库设计过程中要讨论的规范化理论问题。
函数依赖 关系模式通常简记为:R (U,F),其中F为数据依赖集,数据 依赖是同一关系中属性间的相互依赖和相互制约。而规范化 (Normalization)是指定义一组关系模式应该符合条件(范式). 函数依赖 多值依赖 数据依赖 连接依赖
1.函数依赖(Functional Dependencies,简写为FD) 定义:设R(U)是一个属性集U上的关系模式,X和Y是U的 子集。若对于R(U)的任意一个可能的关系r,r中不可能存在 两个元组在X上的属性值相等, 而在Y上的属性值不等, 则 称 “X函数确定Y函数” 或 “Y函数依赖于X函数” ,记作 X→Y(读作X决定Y)。 X称为这个函数依赖的决定因素。 例: Student(Sno, Sname, Ssex, Sage, Sdept) 假设不允许重名,则有: Sno → Ssex,Sno → Sage,Sno → Sdept, Sno → Sname, Sname → Sno,Sname → Ssex, Sname → Sage,Sname → Sdept
函数依赖的说明: • 函数依赖指R的所有关系实例均要满足的约束条件。 • 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。 例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立 • 数据库设计者可以对现实世界作强制的规定。例如函数依赖“姓名→年龄”成立,则所插入的元组必须满足规定的函数依赖,若发现有同名人存在, 则拒绝装入该元组。
几种特殊的函数依赖: 在关系模式R(U)中,对于U的子集X和Y, ①若X→Y,但Y X,则称X→Y是非平凡的函数依赖 ②若X→Y,但Y X,则称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 对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。
⑤ 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’→Y,则称Y完全函数依赖于X,记作X F Y。若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X P Y。 例: 在关系SC(Sno, Sname, Cno, Grade)中, 由于:Sno → Grade,Cno → Grade, 因此:(Sno, Cno) F Grade (Sno, Sname,Cno) P Grade
⑥在关系模式R(U)中,如果X→Y,(Y X),Y→X, Y→Z,则有X →Z,称Z传递函数依赖于X,记为: X T Z。 例:在SA(学号,姓名,系名,系主任,课号,成绩)中,有: 学号 → 系名,系名 → 系主任,则学号 T系主任
定义:设K为关系模式R<U,F>中的属性或属性组。若K F U,则K称为R的一个候选码(Candidate Key)。若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。 • 主码的两个性质: ①决定性:K → U ②最小性:K’K,使得K’ → U • 主属性(Prime Attribute):所有候选码中出现的属性。 • 非主属性(Nonprime Attribute):不出现在任何候选码中的属性。 • 全码(All Key):由关系模式的所有属性构成码。
范 式 • 范式(Normal Form)是满足一定要求的关系模式的集合。关系数据库中的关系必须满足一定的要求,依照要求的不同程度分为不同范式。 1NF 如果一个关系模式R的所有属性都是不可分的基本数据项, 则称关系R为第一范式的关系模式(First Normal Form),简称关 系R属于一范式,记为:R∈1NF。 • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。(由关系属性的原子性得出)。 • 但是满足第一范式的关系模式并不一定是一个好的关系模式。仍然存在数据冗余度大 、插入异常 、修改和删除异常。
2NF :若关系模式R∈1NF,并且每一个非主属性都完全函数 依赖于R的码,则R∈2NF。 例:对SA(学号,姓名,系名,系主任,课号,成绩)进行分 析,主码为(学号,课号), 学号 → 系名, (学号,课号) → 系名 其不属于2NF,故对其分解 ① S2(学号,课号,成绩)∈2NF ② S1(学号,姓名,系名,系主任)∈2NF P 2NF的关系模式存在的问题:(S1不是一个好的关系模式) • 数据冗余度大:若计算机班有10个学生,则该系学生的系主任值就要重复存储10次。
3NF:关系模式R<U,F>中若不存在这样的码X、属性组Y及非主属性Z(Z Y), 使得X→Y,(Y → X),Y→Z,成立,则称R∈ 3NF。 说明:3NF是指不含非主属性对码的传递依赖的关系模式;每个非主属性对码的直接完全依赖。 例:S1(学号,姓名,系名,系主任))∈2NF 学号 → 系名,系名 → 系主任,则学号 → 系主任 存在非主属性对码的传递依赖,不属于3NF;将关系模式S1分解为: S2(学号,姓名,系名) DEP(系名,系主任) 分解后的关系模式S2与DEP中不再存在传递依赖,二者都∈3NF。 T
对比理解1NF、2NF、3NF • 1NF是指关系模式中的所有属性都满足原子性,是关系模式的最低要求。 • 2NF是指关系模式中不存在非主属性(组)对码的部分依赖。 • 3NF是指关系模式中不存在非主属性(组)对码的传递依赖。 • 范式间的包含关系:3NF2NF1NF • 范式的级别越高,其存在的操作异常和数据冗余越小。 • 解决操作异常和数据冗余的方法是通过关系模式的分解使其达到更高一级的范式。 • 分解实质为让每个关系只有一个主题;如一个关系有多个主题,就将其分解为多个关系,“一事一地”原则。
BCNF:设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y (YX) ,X必包含码,则R∈BCNF(Boyce Codd Normal Form),又称修正(或扩充)的第三范式。 结论: ①BCNF3NF。 ②若R∈BCNF,则R中所有非主属性对每一个码都完全直接函数依赖。(由2NF、3NF定义得到) ③若R∈BCNF,则R中所有主属性对每个不包含它的码都完全函数依赖。 ④若R∈BCNF,则R中没有任何属性完全函数依赖于非码的任何一组属性。
例:关系模式SJP(S, J, P) 中,S是学生,J表示课程,P表示名次。每一学生选修每门课程的成绩都有一定名次,且名次不重复。 FD: (S, J) →P, (J, P) →S 码: (S, J) , (J, P) 非主属性:无 ①不存在非主属性对码的部分依赖 SJP ∈2NF ②不存在非主属性对码的传递依赖 SJP ∈3NF ③每一个函数依赖的决定因素都包含码 S∈BCNF
S S T J J T STJ 例:在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称。 由语义得如下FD: (S,J)→T,(S,T)→J,T→J 函数依赖图: 码: (S,J), (S,T) 非主属性:无 ①不存在非主属性对码的部分依赖 STJ ∈2NF ②不存在非主属性对码的传递依赖 STJ ∈3NF ③存在函数依赖T→J,其中的决定因素T不包含码 STJ BCNF
不属于BCNF的关系模式存在的问题: STJ(S,T,J) (1) 插入异常 学生未开始选修某门课程前,无法输入教师任课信息。 (2) 删除异常 删除学生选课信息,教师任课信息一并删除。 (3) 数据冗余度大 同一教师的任课信息在多个学生选课的记录中重复存储。 (4) 修改复杂 由冗余性决定。
多值依赖 • 2 多值依赖(Multivalued Dependencies,简写为MVD) • 在关系模式R(X,Y,Z)的任一关系r中,如果对于X的一个确定值,都存在Y的一组值与之对应,且Y的这组值与Z中属性值无关,则称Y多值依赖于X,记为X→→Y。 这里X、Y、Z是U的子集,且Z=U-X-Y。 即:
特殊的多值依赖: 若X→→Y,而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。(由MVD的定义得出) (4)若X→→Y,X→→Z,则X→→Y Z (由MVD定义得出, X→→Y Z为平凡的MVD)
(5)若X→→Y,X→→Z,则X→→Y∩Z (6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y • 多值依赖与函数依赖的区别 (1) 有效性 多值依赖的有效性与属性集的范围有关 • 若X→→Y在U上成立,则在W(X Y W U)上一定成立;反之则不然,即X→→Y在W上成立,在U上并不一定成立. • 多值依赖的定义中不仅涉及属性组 X和 Y,而且涉及U中其余属性Z。
(2) 包含性 若函数依赖X→Y在R(U)上成立,则对于任何Y‘ Y均有X→Y’ 成立。 多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y‘ Y有X→→Y’ 成立。 4NF :关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y X),X都含有候选码,则R∈4NF。 说明: (1) 对于平凡的多值依赖,X不可能成为码,应是全码; (2) 每个非平凡的函数依赖X→→Y,X又含有码,则X→Y; (3) 4NF只允许平凡的多值依赖; (4) 所有含有非平凡MVD和EMVD都不是4NF。
例如,有关系模式Teach(C,T,B),C表示课程,T表示教师,B表示参考书。假设该关系如图所示。例如,有关系模式Teach(C,T,B),C表示课程,T表示教师,B表示参考书。假设该关系如图所示。 图课程-教师-参考书之间的关系
课程(C) 教师(T) 参考书(B) 信息管理 张三 信息管理学 信息管理 张三 数据库原理 信息管理 张三 C语言程序设计 信息管理 李四 信息管理学 信息管理 李四 数据库原理 信息管理 李四 C语言程序设计 计算机网络 李明 网络原理 计算机网络 李明 布线工程 该关系可用二维表表示如下:
课程(C) 教师(T) 参考书(B) 计算机网络 李明 网络安全 计算机网络 王成 网络原理 计算机网络 王成 布线工程 计算机网络 王成 网络安全 计算机网络 刘军 网络原理 计算机网络 刘军 布线工程 计算机网络 刘军 网络安全 续表
Teach具有惟一候选码(C,T,B),即全码,因而Teach∈BCNF。但Teach模式中存在一些问题:Teach具有惟一候选码(C,T,B),即全码,因而Teach∈BCNF。但Teach模式中存在一些问题: • (1)数据冗余度大。 • (2)增加操作复杂。 • (3)删除操作复杂。 • (4)修改操作复杂。
规范化总结: • 关系数据库的规范化理论是数据库逻辑设计的工具。 • 一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这只是最基本的规范化。 • 规范化程度可以有多个不同的级别 • 规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题 • 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化