1.02k likes | 1.16k Views
请支持 COBASE. COBASE. 第五章 关系数据 理论及数据库设计. 关系数据库设计中存在的问题 (Ⅰ). 示例: 考虑为管理职工的工资信息而设计一个关系模式。. 关系数据库设计中存在的问题 (Ⅱ). 问题:麻烦 ! 麻烦 !! 好 麻烦 !!! 唉,剪不断,理还乱 插入异常 :如果没有职工具有 8 级工资,则 8 级工资的工资数额就难以插入。 删除异常 :如果仅有职工赵明具有 4 级工资,如果将赵明删除,则有关 4 级工资的工资数额信息也随之删除了。 数据冗余 :职工很多,工资级别有限,每一级别的工资数额反复存储多次。
E N D
请支持COBASE COBASE
第五章 关系数据 理论及数据库设计
关系数据库设计中存在的问题(Ⅰ) • 示例: 考虑为管理职工的工资信息而设计一个关系模式。
关系数据库设计中存在的问题(Ⅱ) • 问题:麻烦! 麻烦!! 好麻烦!!! 唉,剪不断,理还乱 • 插入异常:如果没有职工具有8级工资,则8级工资的工资数额就难以插入。 • 删除异常:如果仅有职工赵明具有4级工资,如果将赵明删除,则有关4级工资的工资数额信息也随之删除了。 • 数据冗余:职工很多,工资级别有限,每一级别的工资数额反复存储多次。 • 更新异常:如果将5级工资的工资数额调为620,则需要找到每个具有5级工资的职工,逐一修改。
关系数据库设计中存在的问题(Ⅲ) • 解决之道:分解! 分解!! 再分解!!! 哇,原来生活可以如此简单
关系数据库设计中存在的问题(Ⅳ) 有关学生的关系模式S(S# , SN , SD , DEAN , C# , G) • 快速热身1:它有哪些数据冗余? • 望闻问切:不良的数据依赖
函数依赖(Ⅰ) • 定义 • 函数依赖:设R(U)是属性集U上的关系模式,X , Y U, r是R(U)上的任意一个关系,如果成立对t , s r,若t[X] = s[X],则t[Y] = s[Y],那么称“X函数决定Y”,或“Y函数依赖于X”,记作XY。称X为决定因素。 如S# SN, (S#,C#)G • 平凡函数依赖:如果X Y,但Y X,则称其为非平凡的函数依赖,否则称为平凡的函数依赖。 如(S#,SN)SN是平凡的函数依赖
函数依赖(Ⅱ) • 部分函数依赖:在R(U)中,如果XY,且对于任意X的真子集X′,都有X′Y,则称Y对X完全函数依赖,记作X Y,否则称为Y对X部分函数依赖,记作X Y。 (S#,C#) G, (S#,C#) SN • 快速热身2:找出S中的另一部分函数依赖。 • 传递函数依赖:在R(U)中,如果XY,Y Z,且Y X,Y X,则称Z对X传递函数依赖。 S# SD,SD DEAN • 快速热身3:找出职工工资表中的传递函数依赖。
函数依赖(Ⅲ) • 检验:A→C?C→A?AB→D? • 辨识: • 满足依赖的关系:依赖在模式的某个关系实例上成立。 • 模式上成立的依赖:依赖在模式的所有关系实例上都成立。
练习 • 找出可能的函数依赖。
码 • 定义 • 超码:设K为R< U , F >的属性或属性组,若K U,则称K为R的超码。 • 候选码:设K为R< U , F >的超码,若K U,则称K为R的候选码。 • 主码:若R(U , F)有多个候选码,则可以从中选定一个作为R的主码。 • 主属性:包含在每一个候选码中的属性,称作主属性。 • 全码:关系模式的码由整个属性组构成。 如(S#,C#,P#)
范例 关系模式S(S# , SN , SD , DEAN , C# , G) 主码:(S#,C#) 函数依赖: (S#,C#) G S# SN,(S#,C#) SN S# SD,(S#,C#) SD SD DEAN
范式 • 定义 • 范式是对关系的不同数据依赖程度的要求。 • 通过模式分解将一个低级范式转换为若干个高级范式的过程称作规范化(概念的纯粹化)。 1NF 2NF 3NF BCNF 4NF 5NF
1NF(Ⅰ) • 定义 关系中每一分量不可再分。即不能以集合、序列等作为属性值。
1NF(Ⅱ) 分量是否需要再分,与具体应用有关。如果用到值的一部分,则需要进一步分割。 如果只是查询出生日期,则它满足1NF。 如果查询两人生日是否相同,则只比较月、日,需要将生日分解,就不满足1NF。 如果比较两人的生肖呢?
2NF(Ⅰ) 关系模式S(S# , SN , SD , DEAN , C# , G) • 不良特性 • 插入异常:如果学生没有选课,关于他的个人信息及所在系的信息就无法插入。 • 删除异常:如果删除学生的选课信息,则有关他的个人信息及所在系的信息也随之删除了。 • 更新异常:如果学生转系,若他选修了k门课,则需要修改k次。 • 数据冗余:如果一个学生选修了k门课,则有关他的所在系的信息重复
2NF(Ⅱ) • 定义 • 若R1NF,且每个非主属性完全依赖于码,则称R2NF(消除非主属性对码的部分依赖)。 如S2NF,因为(S#,C#) SN, (S#,C#) SD • 改造 非主属性有两种,一种完全依赖于码,一种部分依赖于码。 将S分解为:SC(S# , C# , G) S_SD(S# , SN , SD , DEAN)
2NF(Ⅲ) • 快速热身 关系模式R(A,B,C,D),码为AB,给出它的一个函数依赖集,使得R属于1NF而不属于2NF。
3NF(Ⅰ) S_SD(S# , SN , SD , DEAN) • 不良特性 • 插入异常:如果系中没有学生,则有关系的信息就无法插入。 • 删除异常:如果学生全部毕业了,则在删除学生信息的同时有关系的信息也随之删除了。 • 更新异常:如果学生转系,不但要修改SD,还要修改DEAN,如果换系主任,则该系每个学生元组都要做相应修改。 • 数据冗余:每个学生都存储了所在系的系主任的信息。
3NF(Ⅱ) • 定义 • 关系模式R< U , F >中,若不存在这样的码X,属性组Y及非主属性Z(Z Y),使得下式成立, XY , YZ , YX 则称R3NF(消除非主属性对码的传递依赖)。 如S_SD3NF,因为有S#SD,SDDEAN • 改造 将S分解为:STUDENT(S# , SN , SD) DEPT(SD , DEAN)
3NF(Ⅲ) • 快速热身 关系模式R(A,B,C,D),码为AB,给出它的一个函数依赖集,使得R属于2NF而不属于3NF。
BCNF(Ⅰ) • 示例 SPC(S# , P# , C#), P# C#,每位老师只教授一门课 (S#,P#) C# (S#,C#) P#,某学生选定一门课,就对应一位老师 (S#,P#),(S#,C#)为候选码。 • 思考 SPC 3NF ?
BCNF(Ⅱ) • 不良特性 • 插入异常:如果没有学生选修某位老师的任课,则该老师担任课程的信息就无法插入。 • 删除异常:删除学生选课信息,会删除掉老师的任课信息。 • 更新异常:如果老师所教授的课程有所改动,则所有选修该老师课程的学生元组都要做改动。 • 数据冗余:每位学生都存储了有关老师所教授的课程的信息。 • 症由: 主属性对码的不良依赖。
BCNF(Ⅲ) • 定义 • 关系模式R< U , F >中,对于属性组X,Y,若XY且Y X时X必含有码,则R< U , F > BCNF。 如SPC BCNF,因为P# C#,而T不含有码。 • 改造 将S分解为(S#,P#),(P#,C#)。 • 思考 (S# , C# , ORDER),表示学生选修课程的名次,有函数依赖(S#,C#) ORDER, (C#,ORDER) S#,它属于BCNF吗?
多值依赖(Ⅰ) 关系模式TEACH(C#,P#,B#),一门课程由多个教员担任,一门课程使用相同的一套参考书。 它的码是(C#,P#,B#),所以属于BCNF。
多值依赖(Ⅱ) • 不良特性 • 插入异常:当某门课程增加一名教员时,该门课程有多少本参考书就必须插入多少个元组;同样当某门课程需要增加一本参考书时,它有多少个教员就必须插入多少个元组。 • 删除异常:当删除一门课程的某个教员或者某本参考书时,需要删除多个元组。 • 更新异常:当一门课程的教员或参考书作出改变时,需要修改多个元组。 • 数据冗余:同一门课的教员与参考书的信息被反复存储多次。
多值依赖(Ⅲ) • 定义 • 描述型:关系模式R(U),X、Y、Z U,并且Z = U – X – Y,多值依赖X Y成立当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。 如在关系模式TEACH中,对(C1 , B1)有一组P#值(P1 , P2),对(C1 , B2)也有一组P#值(P1 , P2),这组值仅取决于C#的取值,而与B#的取值无关。因此,P#多值依赖于C#,记作C# P#,同样有C# B#。
多值依赖(Ⅳ) • 形式化:关系模式R(U),X、Y、ZU,Z=U–X– Y,对于R(U)的任一关系r,若存在元组t1,t2,使得t1[X] = t2[X],那么就必然存在元组t3,t4,使得: t3[X] = t4[X] = t1[X] = t2[X] t3[Y] = t1[Y], t4[Y] = t2[Y] t3[Z] = t2[Z], t4[Z] = t1[Z] 则称Y多值依赖与X,记作X Y。 若(C#, P#, B#)满足C#P#,含有元组t1=(C1, P1, B1),t2=(C1, P2, B2),则也一定含有元组t3=(C1, P1, B2),t2=(C1, P2, B1)。
多值依赖(Ⅴ) • 找出关系上所满足的多值依赖。 • CB?若使BC成立,需加入哪些元组? t1 t2 t3 t4 t3 t4
多值依赖(Ⅵ) • 性质 • 多值依赖具有对称性,即 若XY,则XZ,其中Z=U–X–Y。 • 函数依赖是多值依赖的特例,即 若XY,则XY。 • 若XY,U–X–Y=,则称XY为平凡的多值依赖。
多值依赖 Vs 函数依赖(Ⅰ) • 区别 • 函数依赖规定某些元组不能出现在关系中,也称为相等产生依赖。 • 多值依赖要求某种形式的其它元组必须在关系中,称为元组产生依赖。 • 有效性范围 • XY的有效性仅决定于X、Y属性集上的值,它在任何属性集W(XY W U)上都成立。 若XY在R(U)上成立,则对于任何Y′ Y,均有XY ′成立。
多值依赖 Vs 函数依赖(Ⅱ) • XY的有效性与属性集范围有关。 XY在属性集W(XY W U)上成立,但在U上不一定成立。 XY在U上成立 XY在属性集W(XY W U)上成立。 若在R(U)上,XY在属性集W(XY W U)上成立,则称XY为R(U) 的嵌入式多值依赖。 若XY在R(U)上成立,则不能断言对于Y′ Y,是否有XY ′成立。
4NF • 定义 • 关系模式R< U , F > 1NF,若XY(YX)是非平凡的多值依赖,且X含有码,则称R4NF。 如关系模式CPB,C#P#,C#B#,码为(C#, P#, B#),所以CPB4NF。 如果一门课Ci有m个教员,n本参考书,则关系中分量为Ci的元组共有m×n个,数据冗余非常大。 • 改造 将CPB分解为CP(C#,P#),CB(C#,B#),在分解后的关系中分量为Ci的元组共有m + n个。
盘点 • 任何一个二目关系模式R(A,B)一定属于BCNF吗?一定属于4NF吗? • 关系模式R(A,B,C),ABC一定成立吗? • 一个全是主属性的关系模式一定可以达到第几范式? • 一个全码的关系模式一定可以达到第几范式?
范式之间的关系(Ⅰ) • 3NF 2NF 反证:若R3NF, 但R2NF,则按2NF定义,一定有非主属性部分依赖于码, 设X为R的码,则存在X的真子集X′,以及非主属性Z(Z X′),使得X′Z。 于是在R中存在码X,属性组X′,以及非主属性Z(Z X′) ,使得XX′, X′Z,X′X成立,这与R3NF矛盾。 所以R2NF。
范式之间的关系(Ⅱ) • BCNF 3NF 反证:若RBCNF, 但R3NF,则按3NF定义,一定有非主属性对码的传递依赖,于是存在: R的码X ,属性组Y,以及非主属性Z(Z Y),使得XY, Y Z,YX成立 。 由YZ,按BCNF定义,Y含有码,于是YX成立,这与YX矛盾。 所以R3NF。 • 4NF BCNF
模式分解中的问题 • 实例1 表(职工,级别,工资)可以有两种分解途径, 分解一:(职工,工资),(工资,级别) 分解二:(职工,级别),(工资,级别) 不同行业机构的不同工资级别会有相同工资数额,因此按分解一,有可能导致同一职工对应不同的工资级别,从而丢失了有关职工工资级别的信息(丢失了函数依赖:职工级别)。 丢失函 数依赖
模式分解中存在的问题 ∏AB(R) ∏BC(R) ∏AB(R) ∏BC(R) R(A, B, C) 无损分解 R(A, B, C) ∏AB(R) ∏BC(R) ∏AB(R) ∏BC(R) 有损分解
数据依赖的公理系统 • 定义 • 关系模式R< U, F >,对于其上任意一个关系r,若函数依赖XY都成立,则称F逻辑蕴涵XY。 • 在关系模式R< U, F >中,为F所逻辑蕴涵的函数依赖的全体称作F的闭包,记作F+。 例:F={XY,YZ},则{XZ} F+。 • Armstrong公理 X,Y,Z是属性集, • 自反律。若Y X, 则X Y。 • 增广律。若X Y ,则XZ YZ。 • 传递律。若X Y, Y Z,则X Z 。
数据依赖的公理系统 • Armstrong公理的有效性及完备性 A = { f | 可用Armstrong公理从F中导出的函数依赖f} B = {f | 被F所逻辑蕴涵的函数依赖f} • 有效性:用Armstrong公理从F中导出的函数依赖必为F所蕴涵。 A B • 完备性:F所蕴涵的函数依赖都能用Armstrong公理从F中导出。 B A
数据依赖的公理系统 • 关于Armstrong公理有效性的证明 按函数依赖定义r是R<U, F>上的任一关系,t,s r 自 反 律 t[X] = s[X] YX } X Y t[Y] = s[Y] t[XZ] = s[XZ] t[X] = s[X] } 增 广 律 t[Y] = s[Y] XY } t[XZ] = s[XZ] t[Z] = s[Z] XZYZ t[YZ] = s[YZ]
数据依赖的公理系统 • 由Armstrong公理导出的推理规则 • 合并律。若X Y,X Z,则X YZ。 • 分解律。若X YZ ,则X Y,X Z 。 • 伪传递律。若X Y,WY Z,则XW Z 。 X Y t[X] = s[X] } 传 递 律 t[Y] = s[Y] } t[Z] = s[Z] Y Z X Z
数据依赖的公理系统 • 示例 R< U, F >, U = (A, B, C, G, H, I), F = {AB, AC, CGH, CGI, BH}, • A H? • CG HI? • AG I? X Y 增广律 } 合 并 律 X XY } 传递律 X YZ X Z 增广律 } XY YZ
数据依赖的公理系统 问题:有没有一般性的算法判定XY是否能由F根据Armstrong公理导出? • 属性集的闭包 • 设F为属性集U上的一组函数依赖,X U, = {A | XA能由F根据Armstrong公理导出} 称 为属性集X关于函数依赖集F的闭包。 • 引理一: XA1 A2 Ak成立 XAi成立(i=1, 2, ,k) 证明: 由合并律 由分解律
数据依赖的公理系统 • 引理二 F逻辑蕴涵XY Y 必要性: Y 对Y中任意属性A,有XA } XY 引理一 充分性: 若Y Y中有属性A XA不能由F导出 } XY也不能由F导出 } 矛盾 引理一 F逻辑蕴涵XY
数据依赖的公理系统 • 算法(求属性集的闭包) • 由引理二,判定XY是否能由F根据Armstrong公理导出,可转化为求 ,判定Y 是否成立。 Input:X,F Output: := X; while ( 发生变化)do for each 函数依赖 AB in F do begin if A then := B end 算法会终止吗? 开始:
数据依赖的公理系统 • 示例1 R< U, F >, U = (A, B, C, G, H, I), F = {AB, AC, CGH, CGI, BH},计算 。 所用依赖 AB AGB AC AGBC CGH AGBCH CGI AGBCH I = AGBCH I
数据依赖的公理系统 • 示例2 R< U, F >, U = (A, B, C, D, E), F = {ABC, BD, CE, CEB, ACB},计算 。 所用依赖 ABC ABC BD ABCD CE ABCDE = ABCDE
数据依赖的公理系统 • 示例2 R< U, F >, U = (A, B, C, D, E, G), F = {AE, BEAG, CEA, GD},计算 。 所用依赖 AE ABE BEAG ABEG GD ABEGD = ABEGD