620 likes | 741 Views
第四章 关系数据库设计理论. 前面介绍了关系数据库的基本概念、关系模型的三个组成部分,以及关系数据库的标准语言 SQL 。 我们已知关系 DB 是由一组关系组成的,那么针对一个具体问题,应该如何构造一个适合于它的数据模式(即应构造几个关系,每个关系由哪些属性组成的等)? 这就是关系数据库的模式设计问题。规范化理论正是指导我们进行设计的指南和有力工具。. 第四章 关系数据库设计理论. 4.1 数据依赖 4.2 范式 4.3 关系模式的 规范化. F 是属性间数据的依赖关系集合 ( 既是描述关系的元组语义 , 限定组成关系的各个元组必须满足的约束条件).
E N D
第四章 关系数据库设计理论 • 前面介绍了关系数据库的基本概念、关系模型的三个组成部分,以及关系数据库的标准语言SQL。 • 我们已知关系DB是由一组关系组成的,那么针对一个具体问题,应该如何构造一个适合于它的数据模式(即应构造几个关系,每个关系由哪些属性组成的等)? • 这就是关系数据库的模式设计问题。规范化理论正是指导我们进行设计的指南和有力工具。
第四章 关系数据库设计理论 • 4.1 数据依赖 • 4.2 范式 • 4.3 关系模式的规范化
F是属性间数据的依赖关系集合(既是描述关系的元组语义,限定组成关系的各个元组必须满足的约束条件)F是属性间数据的依赖关系集合(既是描述关系的元组语义,限定组成关系的各个元组必须满足的约束条件) 4.1 数据依赖 1.关系模式中的数据依赖 • 关系DB是以关系模式为基础的DB,它利用关系描述现实世界。一个关系即可用来描述实体及其属性,也可用来描述实体间的联系。 • 关系模式是用来定义关系的,是对关系的描述。要清楚地刻画关系,关系模式应该是五元组: R(U,D,DOM,F)
4.1 数据依赖 • 在实际中,这些约束条件有些是通过对属性取值范围的限定反映出来,有些是通过属性间的相互关联反映出来。后者称为“数据依赖”。 • 在关系模式中,对DB模式设计影响最大的是U和F。我们把五元组简化为三元组R(U,F),对F的理解应该是: • 一个关系模式上的数据依赖,必须是这个关系模式的所有关系都应满足的数据依赖。即:当且仅当U上的一个关系r满足F时,r称为关系模式R(U,F)的一个关系。
4.1 数据依赖 2.数据依赖对关系模式的影响 • 数据依赖是通过关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。 • 在数据依赖中,最重要的是函数依赖和多值依赖。函数依赖普遍存在于现实生活中,下面来看一个例子:
4.1 数据依赖-数据依赖对关系模式的影响 • 我们建立一个数据库,用以描述某图书馆的一些情况,面临的对象有:借书证,读者,读者单位,联系电话,书号,书名,出版社,出版社地址,借阅日期。于是得到一组属性: • U={借书证号,读者姓名,读者单位,单位电话,书号,书名,出版社,出版社地址,借阅日期} • 对这些属性有下面一些语义规定: 每个读者只属于一个单位 每个读者可借多本书 不同的书可有相同的书名 一个单位只设一个联系电话 不同的单位不能有相同的电话号码 一个出版社有一个地址,不同出版社可以在同一个地址
读者姓名 读者单位 函数依赖图 借书证号 单位电话 借阅日期 书 号 出版社 出版社地址 书 名 4.1 数据依赖-数据依赖对关系模式的影响 • 由此得到属性组U上的一组函数依赖: • F={借书证号→读者姓名,借书证号→读者单位,借书证号→单位电话,读者单位↔单位电话,书号→书名,书号→出版社,书号→出版社地址,出版社→出版社地址, (借书证号,书号)→借阅日期}
4.1 数据依赖-数据依赖对关系模式的影响 • 如果只考虑函数依赖这一种数据依赖,就得到一个描述图书馆的数据库模式Borrow(U,F),它由一个单一的关系模式构成: Borrow(借书证号,读者姓名,读者单位,单位电话,书号, 书名,出版社,出版社地址,借阅日期) • 这个关系模式存在四个问题: 数据冗余太大 一个读者可以借多本书,有关这个读者的信息就要在关系中出现多次;而一个单位有许多读者,每个读者都有相同的信息;同时图书馆又要面对许多单位……,由此可见,在这个关系模式中,数据的冗余度非常可观。
4.1 数据依赖-数据依赖对关系模式的影响 修改复杂 如果某个读者更换了单位,他若借了10本书,有关他所在单位的信息在Borrow中重复存放10次,当数据更新时必须无遗漏地修改10个元组中全部的信息。 由于数据冗余,DBMS要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。这就造成了修改的复杂性。
4.1 数据依赖-数据依赖对关系模式的影响 插入异常 如果刚买进一批新书,因为还没有读者借阅,就无法把有关新书的信息存入Borrow中,这就是插入异常。 删除异常 如果某个读者把他借的所有的书都还给了图书馆,那么随着这些书的相关信息的删除,这个读者的信息也丢失了。这就产生了删除异常,即不该删除的信息也删除了。
4.1 数据依赖-数据依赖对关系模式的影响 • 结论:Borrow不是一个好的关系模式,原因是由存在于关系模式中的某些函数依赖引起的,规范化理论正是用来改造关系模式的指南。
4.1 数据依赖 3.有关概念 ⑴函数依赖 • 函数依赖在规范化理论中起着核心作用,它普遍存在于现实生活中,专门讨论一个关系的属性间不同的依赖情况(即不同的函数依赖)。 • 由于属性间依赖情况不同,可使一些关系明显地存在某些不好的性质,因此,要设计一个较佳的、能反映现实世界的关系模式,首先就要深刻理解函数依赖的有关理论,并据此来分析和判断关系是否具有某些不好的性质,然后才能清除关系中这些不合适的部分。
4.1 数据依赖-有关概念 定义4.1设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R(U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称“X函数决定Y”或“Y函数依赖于X”,记作X→Y。 • 对当前关系r的任意两个元组,如果X值相同,则要求Y值也相同,即有一个X值就有一个Y值与之对应。
4.1 数据依赖-有关概念 • 几点说明: 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。 函数依赖是语义范畴的概念。 设计者可对现实世界作强制规定。
4.1 数据依赖-有关概念 • 术语和记号: 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。
4.1 数据依赖-有关概念 ⑵完全函数依赖与部分函数依赖 定义4.2 在R(U)中,如果X→Y,并且对于X的任意一个真子集X’,都有X’↛Y,则称Y完全函数依赖于X,记作 。 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作 。 ⑶传递函数依赖 定义4.3 在R(U)中,如果X→Y(Y⊄X),Y→Z,且 Y↛X,则称Z传递函数依赖于X,记作 。
函数依赖图 读者姓名 读者单位 p p t p 单位电话 f 借书证号 t 借阅日期 p 书 号 出版社 t p p 出版社地址 书 名 4.1 数据依赖-有关概念 【例】 ⑷码 定义4.4设K为R(U,F)中的属性或属性组,若 ,则称K为R的候选码,若候选码多于一个,则选定其中一个为主码。
第四章 关系数据库设计理论 • 4.1 数据依赖 • 4.2 范式 • 4.3 关系模式的规范化
4.2 范式 • 范式是衡量数据模式优劣的标准,范式级别越高,其数据冗余和操作异常现象就越少。 • 范式有1NF,2NF,3NF,BCNF,4NF,5NF。 • 范式之间存在的联系: 1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF • 一个低一级范式的关系模式通过模式分解可转化成若干个高一级范式的关系模式集合,这个过程就叫做规范化。
4.2 范式 1.第一范式(1NF) 定义4.5若一个关系模式R的所有属性都是不可再分的基本数据项,则R∈1NF。 • 例: Borrow∈1NF,但不是一个好的关系模式。 • Borrow(借书证号,读者姓名,读者单位,单位电话,书号,书名,出版社,出版社地址,借阅日期) • 为什么会有数据冗余,插入异常,删除异常,修改复杂?因为存在部分函数依赖。
4.2 范式 2.第二范式(2NF) 定义4.6若关系模式R∈1NF,并且每一非主属性都完全函数依赖于R的码,则R∈2NF。 • 我们将Borrow转化为2NF,即要消除非主属性对码的部分函数依赖。 • 方法:投影分解法
读者姓名 读者单位 p p t p 单位电话 f 借书证号 t 借阅日期 p 书 号 出版社 t p p 出版社地址 书 名 4.2 范式-2NF • 把Borrow分解为三个关系模式: Reader(借书证号,读者姓名,读者单位,单位电话) Book(书号,书名,出版社,出版社地址) BORR(借书证号,书号,借阅日期)
借阅日期 借书证号 书 名 书号 书 号 出版社 出版社地址 读者姓名 借书证号 读者单位 单位电话 4.2 范式-2NF • 它们的函数依赖分别如下图所示: • 这三个关系都属于2NF,联合起来共同表达了原来一个关系所表达的内容,且原来关系不能表达的,它们也能表达。因此,第二范式比第一范式有更强的表达能力,是对现实世界更准确的描述。
仍有冗余 冗余消失 仍有冗余 冗余消失 4.2 范式-2NF • 一个属于2NF的关系模式还会存在某些问题,如: Reader(借书证号,读者姓名,读者单位,单位电话) Book(书号,书名,出版社,出版社地址) • 原因:存在传递函数依赖
书 名 书 号 出版社 出版社地址 读者姓名 借书证号 读者单位 单位电话 4.2 范式 3.第三范式(3NF) 定义4.7若关系模式R中不存在候选码X,属性组Y以及非主属性Z(Z Y),使得X→Y,Y→Z和 Y X成立,则R∈3NF。 • 要消除关系模式中非主属性对码的传递函数依赖,用投影分解法。
出版社 出版社地址 读者姓名 借书证号 借书证号 读者单位 借阅日期 读者单位 单位电话 书 号 书 名 书 号 出版社 4.2 范式-3NF Reader1(借书证号,读者姓名,读者单位) Unitphone(读者单位,单位电话) Book1(书号,书名,出版社) Publish(出版社,出版社地址) Borr(借书证号,书号,借阅日期) • 它们的函数依赖分别如下图所示:
4.2 范式-3NF • 一个属于3NF的关系模式一般可令人满意。 • 局部依赖和传递依赖是模式产生冗余和异常的两个重要原因。由于3NF中不存在非主属性对码的局部和传递函数依赖,因此消除了很大一部分异常现象,具有较好的性能。
4.2 范式 4.BC范式(BCNF) 例:设有关系模式 STC(学生,教师,课程) 若规定: 每一教师只教一门课,每门课由若干教师教 某一学生选定某门课,就确定了一个固定的教师。 F={教师 →课程,(学生,课程) →教师, (学生,教师) →课程}
学生 学生 教师 课程 课程 教师 4.2 范式-BC范式 STC的候选码为:(学生,课程),(学生,教师) 函数依赖图为: 关系模式STC的属性都是主属性,不存在非主属 性,所以STC没有任何非主属性对码的传递或 部分依赖, STC∈3NF。 3NF的STC关系模式也存在一些诸如插入异常, 删除异常,数据冗余等问题。
4.2 范式-BC范式 • STC出现问题的原因:主属性课程依赖于教师,即课程部分依赖于码(学生,教师)。 • 解决这一问题同样可用投影分解法,将STC分解为两个关系模式: ST(学生,教师), TC(教师,课程) 定义4.8关系模式R∈1NF,若X→Y,且Y⊈X时,X必含有码,则R∈BCNF。 • 即:在R中,若每个决定因素都包含码,则R∈BCNF。
4.2 范式-BC范式 • 由定义可知:STC(学生,教师,课程)不属于BCNF。因为教师→课程,但教师即不是候选码,也不包含候选码。而ST(学生,教师)和TC(教师,课程)都属于BCNF。 • BCNF即检查非主属性,又检查主属性,显然比3NF限制更严格。
4.2 范式-BC范式 • 由BCNF的定义可看到,每个BCNF的关系模式都具有如下三个性质: 所有非主属性都完全函数依赖于每个码; 所有主属性都完全函数依赖于每个不包含它的码; 没有任何属性完全函数依赖于非码的任何一组属性。 • 若R∈BCNF,则⇒R∈3NF。 • 若R∈3NF⇏R∈BCNF,若R只有一个候选码,则R∈3NF⇒R∈BCNF。
4.2 范式-BC范式 【例1】S(S#,SN,SE,SA,SD) 解:∵SN有可能重名,则KEY=S#,没有任何属性对S#部分和传递函数依赖,∴S∈3NF。同时S#是唯一决定因素,∴S∈BCNF。 【例2】C(C#,CN,PC#) 解:设CN具有唯一性,则KEY=C#或KEY=CN,都为单属性,彼此不相交。其它属性不存在对码的部分和传递函数依赖,∴C∈3NF。同时除C#,CN外,无其它决定因素,∴C∈BCNF。 【例3】SC(S#,C#,G) 解:KEY=(S#,C#),唯一决定因素,∴S∈BCNF。
4.2 范式-BC范式 【例4】SCP(S,C,P) • 语义:每位学生(S)每门课(C)都有一个确定的名次(P),每门课中每一名次只有一个学生。 • 函数依赖:F={(S,C)→P,(C,P)→S}, ∴(S,C)和(C,P)都可作为候选码。 • 候选码各由两个属性组成,且相交,SCP中显然没有属性对码的部分和传递函数依赖,∴SCP∈3NF。且除(S,C),(C,P)外没有其它决定因素,∴SCP∈BCNF。
S S T C C T 4.2 范式-BC范式 【例5】STC(S,T,C) • 语义:每位教师(T)只教一门课(C),每门课有若干教师,某一学生(S)选定某门课就对应一个固定的教师。 • 函数依赖:F={(S,C)→T,(S,T)→C,T→C}, ∴(S,C)和(S,T)都可作为候选码。 • 显然STC∈3NF,∵没有任何非主属性对码的部分和传递函数依赖,但STC不是BCNF,因为T是决定因素,但T不包含码。
4.2 范式-BC范式 • 若一个关系DB中的所有关系模式都属于BCNF,则在函数依赖范畴内已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。 • 3NF的不彻底性表现在可能存在主属性对码的部分和传递函数依赖。
4.2 范式 5.多值依赖与第四范式(4NF) ⑴多值依赖 【例】学校中某门课由多个教师讲授,他们使用相同的一套参考书。 数学→{邓军,陈斯}→{数学分析,高等代数,微分方程} 物理→{李平,王强,刘明}→{普通物理学,光学原理} ……………… • 可以用一个关系模式Teach(C,T,B)表示课程C、教师T和参考书B之间的关系。
4.2 范式-多值依赖与第四范式 • 关系Teach(C,T,B)可以用右边的二维表表示: • 关系模式Teach(C,T,B)的码是全码:Key=(C,T,B) ∴Teach∈BCNF,但存在问题: 当某门课增加一位教师,必须插入多个元组。 当要去掉某本参考书,也必须删除多个元组。 当要修改某门参考书,也必须修改多个元组。
4.2 范式-多值依赖与第四范式 • 显然,数据的更新不方便,且冗余十分明显。只所以会出现上述问题,分析后可发现: • 课程与教师有直接关系;课程与参考书有直接关系;但教师与参考书之间没有直接联系,是一个间接联系。即参考书的取值和教师的取值是彼此独立毫无关系的,它们都只取决于课程名。 • 把有间接联系的属性放在一个关系模式中,就会产生数据冗余和各种异常。
4.2 范式-多值依赖与第四范式 定义4.9设R(U)是属性集U上的关系模式,X,Y,Z是U的子集,且Z=U-X-Y,多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,r在(X,Z)上的每个值对应一组Y值,这组值仅仅决定于X值而与Z值无关。 若Z=Ø,则X→→Y为平凡多值依赖。 • 等价定义:若关系模式R(U)的任意关系r的任意两个元组在X属性上的值相等,则交换这两个元组在Y上的属性值,得到的新元组也必定是r中的元组,则X→→Y。
4.2 范式-多值依赖与第四范式 • 多值依赖指的是:两个属性或属性集相互独立。 例:在Teach(C,T,B)中,每个(C,B)上的值对应一组T值: (物理,光学原理)→{李平,王强,刘明} 这组值仅仅决定于课程上的值,即: (物理,普通物理学)→{李平,王强,刘明} • 参考书B的值已改变,但教师T的值没变, ∴C→→T (T多值依赖于C)。 • 多值依赖给出多对多联系,而函数依赖只给出多对一联系。
Ti1 Ti2 ……Tin Ci Bi1Bi2 ……Bin 4.2 范式-多值依赖与第四范式 • 多值依赖具有下列性质: 对称性:若X→→Y,则X→→Z,其中Z=U-X-Y。 例:在关系模式Teach(C,T,B)中,已知C→→T,根据多值依赖的对称性,必有C→→B。 对每个Ci,T有个完整的集合与之对应,B也同样。 {T}Ci中的每个值和{B}Ci中的每个值对应,正好形成一个完全二分图。 与Ci对应的全部T值:{T}Ci 教Ci的全体教师 与Ci对应的全部B值:{B}Ci Ci使用的所有参考书 ∴C→→T,而B与T完全对称,∴ C→→B。
4.2 范式-多值依赖与第四范式 传递性:若X→→Y,Y→→Z,则X→→Z-Y。 替代性:若X→Y,则X→→Y。(∵X→Y时,X的每一个值x,Y有一个确定的值y与之对应,∴ X→→Y) • 函数依赖可看成是多值依赖的特殊情况。 多值合并性:若X→→Y,X→→Z,则X→→YZ。 多值分解性:若X→→Y,X→→Z,则X→→Y∩Z, X→→Y-Z, X→→Z-Y。
4.2 范式-多值依赖与第四范式 多值依赖的有效性与属性集的范围有关 若X→→Y,在U上成立,则在W(XY⊆W⊆U)上一定成立。但X→→Y,在W(W⊂U)上成立,在U上并不一定成立。(这是因为多值依赖的定义中不仅涉及到X和Y,而且涉及到U中的其余属性Z) 若多值依赖X→→Y在R(U)上成立,对于Y’⊂Y,并不一定有X→→Y’成立。但若X→Y在R上成立,则对任意Y’⊂Y,均有X→Y’成立。 • 这两条是函数依赖与多值依赖的基本区别
4.2 范式-多值依赖与第四范式 例:R(C,T,H,R,S,G),其中C为课名,T为教师,H为时间,R为教室,S为学生,G为成绩。有语义:一门课由一个教师开设,但在不同时间可以安排在不同的教室。即一门课可以有一组“时间,教室”与之对应,而与听课的学生与成绩无关。列出两个学生听课情况: 取出任意两个元组,同时交换HR中 属性,所得新元组必在原r中,而S 与G的值不受影响。∴有C→→HR, T→→HR等。又有H⊂HR,但C→→H 不成立。∵(C1,T1,H2,R1,S1,G1)和 (C1,T1,H1,R2,S1,G1)不在r中。
4.2 范式-多值依赖与第四范式 ⑵第四范式(4NF) 定义4.10关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y⊈X),X都含有候选码,则R∈4NF。 • 4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。因为根据定义,对于每一个非平凡的多值依赖X→→Y,X都含有候选码,于是就有X→Y,所以4NF所允许的非平凡的多值依赖实际上是函数依赖。 • 显然,若R∈4NF ➙ R∈BCNF。
4.2 范式-多值依赖与第四范式 例:在Teach(C,T,B)中,C→→T,C→→B都是非平凡的多值依赖,而Key=(C,T,B),即C不是码。 ∴Teach∉4NF。 分解为:CT(C,T),CB(C,B)后,都属于4NF。 • 虽有C→→T,但这是平凡多值依赖。因此在多值依赖时,解决数据冗余和更新异常现象的方法是:把关系分解成仅含平凡多值依赖的多个关系。 • 一个满足4NF的关系模式特点: 该关系模式满足BCNF; 该关系模式只允许出现平凡多值依赖。
4.2 范式-多值依赖与第四范式 • 在Teach(C,T,B)中,前面提到的问题可得到解决: 参考书只需在CB中存储一次 某门课增加一位教师,只需在CT中增加一个 元组 某门课去掉某本参考书时,只需在CB中删除 一个元组 • 函数依赖和多值依赖是两种最重要的数据依赖。若考虑函数依赖,则属于BCNF的关系模式已很完美;若考虑多值依赖,则属于4NF的关系已很完美。
第四章 关系数据库设计理论 • 4.1 数据依赖 • 4.2 范式 • 4.3 关系模式的规范化
4.3 关系模式的规范化 • 一个关系的每一个分量是不可再分的数据项,是规范化关系的最基本的条件,规范化程度可以有6个不同的级别(6个范式)。 • 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这个过程就叫做关系模式的规范化。