320 likes | 449 Views
数据库原理与应用. 第五章 关系数据库设计. 第五章 关系数据库设计. 函数依赖 关系模式的分解 3NF BCNF 多值依赖和 4NF. 一个“不好”的数据库设计例子. BookInfo ( ISBN, title, author_id, author_name, serial , category_id, category_tag ) 假设在线书库系统的管理人员想新增一个类别“人文社科”,但是由于该类别下尚无任何图书,因此就无法将这个类别的信息存入数据库,称为 插入异常
E N D
数据库原理与应用 第五章 关系数据库设计
第五章 关系数据库设计 • 函数依赖 • 关系模式的分解 • 3NF • BCNF • 多值依赖和4NF 5.2
一个“不好”的数据库设计例子 • BookInfo(ISBN, title, author_id, author_name, serial,category_id, category_tag) • 假设在线书库系统的管理人员想新增一个类别“人文社科”,但是由于该类别下尚无任何图书,因此就无法将这个类别的信息存入数据库,称为插入异常 • 如果类别“外国语”下的图书全部售出,在删除这些图书信息的同时将该类别的信息也连带删除了,称为删除异常 • 假设在线书库新购一批名为《信息系统安全》的图书,在将这本新书入库的过程中,就不得不重复“计算机”这一类别的公共信息。而且如果一本书有多位作者,除作者之外的图书信息也要多次重复,从而造成大量的信息冗余 5.3
BookInfo实例 5.4
函数依赖 • 设R(U)是属性集U上的关系模式,X、Y是U的子集。若对R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或Y函数依赖于X,记作XY,X称为这个函数依赖的决定因素 • 函数依赖是键概念的扩展 • XY,且YX,则称XY是平凡的函数依赖,否则则是非平凡的函数依赖。如没有特别声明,一般讨论非平凡的函数依赖 5.5
BookInfo中的函数依赖 5.6
函数依赖的说明 • 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件 • 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖 • 例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立 • 数据库设计者可以对现实世界作强制的规定。例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定的函数依赖,若发现有同名人存在, 则拒绝装入该元组 5.7
完全和部分依赖、传递依赖 • 在关系模式R(U)中,如果X→Y,并且不存在X的一个真子集X’,满足X’→Y, 则称Y完全函数依赖于X,记作X fY • 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X P Y。 • 关系模式R(U)中,如果X→Y,Y不是X真子集,Y→Z,但Y→X不成立,则称Z传递函数依赖于X 5.8
逻辑蕴含 • 对于满足一组函数依赖F的关系模式R<U,F>,其任何一个关系r,若函数依赖X→Y都成立, 则称F逻辑蕴含X→Y • Armstrong公理系统是一套推理规则,是模式分解算法的理论基础,它的用途 • 求给定关系模式的码 • 从一组函数依赖求得蕴含的函数依赖 5.9
Armstrong公理系统 • 自反律(Reflexivity): 若Y XU,则X →Y为F所蕴含 • 增广律(Augmentation):若X→Y为F所蕴含,且ZU,则XZ→YZ为F所蕴含 • 传递律(Transitivity):若X→Y及Y→Z为F所蕴含,则X→Z为F所蕴含 注意:由自反律所得到的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于F 5.10
导出规则 • 根据Armstrong三条推理规则可以得到下面三条推理规则: • 合并规则:由X→Y,X→Z,有X→YZ • 伪传递规则:由X→Y,WY→Z,有XW→Z • 分解规则:由X→Y及 ZY,有X→Z 5.11
函数依赖闭包 • 在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作 F的闭包,记为F+ • 设F为属性集U上的一组函数依赖,XU, XF+ ={ A|X→A能由F 根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F 的闭包 5.12
码 • 设K为关系模式R<U,F>中的属性或属性组合。若K f U,则K称为R的一个侯选码(Candidate Key)。若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key) • 包含在任何一个码里面的属性是主属性,反之是非主属性 5.13
1NF • 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库 • 但是满足第一范式的关系模式并不一定是一个好的关系模式 5.14
关系模式的分解 • 关系模式R<U, F>的一个分解是指ρ= {R1<U1, F1>,R2<U2, F2>,…,Rn<Un, Fn>},U=U1∪U2∪…∪Un,且不存在 Ui Uj,Fi为 F在 Ui 上的投影 • 函数依赖集合{X→Y | X→Y F+∧XYUi} 的一个覆盖 Fi 叫作 F 在属性 Ui 上的投影 • 对于同一个模式,其分解是多种多样的,但是分解后的模式均应与原模式等价。这里的“等价”可以从三个不同角度去理解: • 具有“无损连接性” • 要保持“函数依赖” • 即要保持“函数依赖”,又要具有“无损连接性” 5.15
无损分解 • 设ρ= {R1<U1, F1>,R2<U2, F2>,…,Rn<Un, Fn>}是关系模式R<U, F>的一个分解,若对任何一个R<U, F>的关系r,ri是r在Ui上的投影,均有r等于所有ri的自然连接,则称分解ρ具有无损连接性,简称ρ为无损分解 • 设ρ= {R1<U1, F1>,R2<U2, F2>}是R<U, F>的一个分解,若F+中包含以下两条函数依赖的任何一条,则ρ为无损连接的分解 • R1∩R2 R1 • R1∩R2 R2 5.16
依赖保持的分解 • 设ρ= {R1<U1, F1>,R2<U2, F2>,…,Rn<Un, Fn>}是关系模式R<U, F>的一个分解,若F的闭包等于所有Fi并的闭包,则称分解ρ为依赖保持的分解 • 模式分解是数据库设计的一种重要手段。在对两种基本的分解有了一定的了解之后,我们给出几个关于模式分解的重要事实: • 若要求分解保持函数依赖,那么模式分解总可以达到3NF,但不一定能够达到BCNF • 若要求分解即保持函数依赖,又具有无损连接性,那么模式分解总可以达到3NF,但不一定能达到BCNF • 若仅要求分解具有无损连接性,那么模式分解一定可以达到4NF 5.17
范式及其规范化 1NF 2NF 3NF BCNF 4NF 5NF 5.18
3NF • 关系模式R<U, F>中不存在这样的码X,属性组Y以及非主属性组Z(Z不是Y的子集), 使得XY(YX不成立),YZ成立,则称R<U, F>属于3NF 5.19
例子 • 根据定义,若R属于3NF,则R的每个非主属性既不部分依赖于码,也不传递依赖于码 • 例如,关系模式BookInfo通过分解可以转化为多个满足3NF的关系模式,如下: • Book(ISBN, title, category_id); • Author(author_id, author_name); • Written_by(ISBN, author_id, serial); • Category(category_id, category_tag); • 分解后的关系模式Book、Author、Written_by和Category中都不存在部分函数依赖和传递函数依赖。因此,它们均属于3NF 5.20
BCNF • 关系模式R<U, F>属于1NF,若XY且Y不是X的子集时,X必含有码,则R<U, F> 属于BCNF • 一个满足BCNF的关系模式必然有: • 所有非主属性对每一个码都是完全函数依赖; • 所有主属性对每一个不包含它的码也时完全函数依赖 • 没有任何属性完全函数依赖于非码的任何一组属性 • 若一个关系模式BCNF,则必定有3NF, 5.21
例子 • 关系模式Interest_in(category_id, customer_id, date)中,category_id是图书类别标号,customer_id是顾客编号,date记录日期。一位顾客可以对多个图书类别感兴趣,多位顾客可以对同一个类别感兴趣,顾客对某个类别的兴趣不能够重复申明。Interest_in的属性之间存在如下依赖:(category_id, customer_id) date;(customer_id, date) category_id • (category_id, customer_id)和(customer_id, date)都可以作为候选码,这两个候选码各由两个属性组成,而且他们是相交的。Interest_in中显然没有非主属性对码的传递函数依赖和部分函数依赖,因此Interest_in属于3NF • 除(category_id, customer_id)和(customer_id, date)之外没有其他决定因素,因此有Interest_in属于BCNF。 5.22
规范化过程 • 一个属于低一级范式的关系模式,通过模式分解等手段可以转化为若干个高一级的范式的关系模式的集合,这个过程就叫规范化 5.23
book author bookcase 数据库系统概论 数据库系统概论 数据库系统概论 数据库系统概论 高级翻译教程 高级翻译教程 高级翻译教程 高级翻译教程 … 萨师煊 王珊 萨师煊 王珊 孙万彪 王恩铭 孙万彪 王恩铭 … IT#1 IT#1 Textbook#1 Textbook#1 Language#1 Language#1 Textbook#2 Textbook#2 … BookRel的一个实例 5.24
多值依赖与第四范式 • BookRel∈BCNF • BookRel具有唯一候选码(book,author,bookcase),即全码 • BookRel模式中存在的问题 • 数据冗余度大 • 插入操作复杂 • 删除操作复杂 • 修改操作复杂 • 产生原因:存在多值依赖 5.25
多值依赖 • 设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y,多值依赖X→→Y成立当且仅当对R的任一关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关 • 例: Teaching(book, author, bookcase) 对于book的每一个值,author有一组值与之对应,而不论bookcase取何值 5.26
多值依赖(续) • 在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。 t x y1 z2 s x y2 z1 w x y1 z1 v x y2 z2 5.27
平凡的多值依赖 • 平凡多值依赖和非平凡的多值依赖 • 若X→→Y,而Z=φ,则称 X→→Y为平凡的多值依赖 • 否则称X→→Y为非平凡的多值依赖 5.28
多值依赖的性质 (1)多值依赖具有对称性 若X→→Y,则X→→Z,其中Z=U-X-Y 多值依赖的对称性可以用完全二分图直观地表示出来 (2)多值依赖具有传递性 若X→→Y,Y→→Z, 则X→→Z –Y (3)函数依赖是多值依赖的特殊情况。 若X→Y,则X→→Y。 5.29
Yi1 Yi2 … Yin Xi Zi1 Zi2 … Zim 多值依赖的对称性 5.30
多值依赖(续) (4)若X→→Y,X→→Z,则X→→Y Z。 (5)若X→→Y,X→→Z,则X→→Y∩Z。 (6)若X→→Y,X→→Z,则X→→Y-Z, X→→Z -Y。 5.31
第四范式(4NF) • 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y X),X都含有候选码,则R∈4NF • 如果R ∈ 4NF, 则R ∈ BCNF • 例: BookRel(book,author,bookcase) ∈ 4NF • 存在非平凡的多值依赖book→→author,且book不是候选码 • 把BookRel分解为如下两个关系模式: BA(book, author) ∈ 4NF、 BB(C, B) ∈ 4NF 5.32