1 / 49

数 据 库 基 础 规 范 化

数 据 库 基 础 规 范 化. 汤 娜 中山大学计算机科学系 isstn@zsu.edu.cn. 一、概述 二、规范化 三、反规范化. 概述. 关系模式 Student<U, F> 中存在的问题 U ={ Sno, Sdept, Mname, Cname, Grade } ⒈ 数据冗余太大 浪费大量的存储空间 例:每一个系主任的姓名重复出现 ⒉ 更新异常( Update Anomalies ) 数据冗余 , 更新数据时,维护数据完整性代价大。 例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组. 概述.

jenna-mckay
Download Presentation

数 据 库 基 础 规 范 化

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数 据 库 基 础规 范 化 汤 娜 中山大学计算机科学系 isstn@zsu.edu.cn

  2. 一、概述 • 二、规范化 • 三、反规范化

  3. 概述 关系模式Student<U, F>中存在的问题 U ={ Sno, Sdept, Mname, Cname, Grade } ⒈ 数据冗余太大 • 浪费大量的存储空间 例:每一个系主任的姓名重复出现 ⒉ 更新异常(Update Anomalies) • 数据冗余 ,更新数据时,维护数据完整性代价大。 例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组

  4. 概述 ⒊ 插入异常(Insertion Anomalies) • 该插的数据插不进去 例,如果一个系刚成立,尚无学生,我们就无法把这个系及其系主任的信息存入数据库。 ⒋ 删除异常(Deletion Anomalies) • 不该删除的数据不得不删 例,如果某个系的学生全部毕业了, 我们在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。

  5. 概述 结论: • Student关系模式不是一个好的模式。 • “好”的模式: 不会发生插入异常、删除异常、更新异常, 数据冗余应尽可能少。 原因:由存在于模式中的某些数据依赖引起的 解决方法:通过分解关系模式来消除其中不合适 的数据依赖。

  6. 概述 一、函数依赖 二、平凡函数依赖与非平凡函数依赖 三、完全函数依赖与部分函数依赖 四、传递函数依赖

  7. 一、函数依赖 主属性:候选键中的任意一个属性元素称为主属性 非主属性:不是候选键中的属性 定义1 设R(U)是属性集U上的关系模式,X、Y是U的一个子集。r是R(U)中任意给定的一个关系。若对于r中任意两个元组s和t,当s[X] = t[X]时,就有s[Y] = t[Y],则称属性子集X函数决定属性子集Y或者称Y函数依赖于X(Functional Dependence),记其为 X→Y。否则就称X不函数决定Y或者称Y不函数依赖于X。

  8. AB AB AB BA BA BA

  9. 函数依赖说明: 1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。 2. 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。 例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立 3. 数据库设计者可以对现实世界作强制的规定。例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定的函数依赖,若发现有同名人存在, 则拒绝装入该元组。

  10. 二、平凡函数依赖与非平凡函数依赖 在关系模式R(U)中,对于U的子集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

  11. 平凡函数依赖与非平凡函数依赖(续) • 于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。

  12. 三、完全函数依赖与部分函数依赖 定义2 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有 X’ Y, 则称Y完全函数依赖于X,记作X fY。 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X P Y。

  13. 完全函数依赖与部分函数依赖(续) 例: 在关系SC(Sno, Cno, Grade)中, 由于:Sno →Grade,Cno → Grade, 因此:(Sno, Cno) f Grade

  14. 四、传递函数依赖 定义3 在关系模式R(U)中,如果X→Y,Y→Z,且Y X,Y→X,则称Z传递函数依赖于X。 注: 如果Y→X, 即X←→Y,则Z直接依赖于X。 例: 在关系Std(Sno, Sdept, Mname)中,有: Sno → Sdept,Sdept → Mname Mname传递函数依赖于Sno

  15. 规范化 规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

  16. 范式 • 范式是符合某一种级别的关系模式的集合。 • 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。 • 范式的种类: 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF)

  17. 范式 • 各种范式之间存在联系: • 某一关系模式R为第n范式,可简记为R∈nNF。

  18. 范式 • 1NF的定义 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。 • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。 • 但是满足第一范式的关系模式并不一定是一个好的关系模式。

  19. 什么是一个好的模式 • 设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么这个关系模式就是一个好的模式(BCNF)。

  20. 要知道的7个公式 • Inclusion rule(包含律): if Y X, then X -> Y(平凡依赖) • Transitivity rule(传递率): if X -> Y and Y -> Z, then X -> Z • Augmentation rule(增广率): if X -> Y, then X Z -> Y Z • Union Rule(合并): If X  Y and X  Z then X  Y Z • Decomposition Rule(分解): If X  Y Z then X  Y and X  Z • Pseudotransitivity Rule(伪传递): If X  Y and W Y  Z then X W  Z • set Accumulation Rule: If X  Y Z and Z  B then X  Y Z B

  21. 表中那些属性可以做候选键? • Def 属性集的闭包Given a set X of attributes in a table T and a set F of FDs on T, we define the CLOSURE of the set X (under F), denoted by X+, as the largest set of attributes Y such that X -> Y is in F+. • Algorithm 如何求闭包的算法 • 如果某个属性集的闭包为表中的全体属性,则此属性集可以为候选键

  22. 求候选键-左边单属性 • 构造函数依赖图 • 找出关键属性集合(起始点和孤立点都是关键属性,可以为空) • 察看图中是否有环路,若没有,则关键属性集合X为唯一候选关键字,转(5);若有,转(4) • 从各独立回路中取节点与X进行组合,重复着一过程取尽所有组合 • 结束

  23. R=(O,B,I,S,Q,D) • F={SD,D  S,I  B,B  I,B  O,O  B) • 候选键QSI,QSB,QSO, QDI,QDB,QDO S D I B O 关键属性Q

  24. 求候选键-左边多属性 • R=(X,Y,Z,W) F={W  Y,Y  W,X  WY,Z  WY,XZ  W) 候选键为:XZ • 例子:R=(A,B,C,D,E) • F={BCD AD  E B  A} • 候选键为B • R=(A,B,C,D,E) • F={A BC,CD E,B D,E A} • 候选键为A,BC,CD,E

  25. 判断是否是一个好模式的例子(1) 例:描述学校的数据库: 学生的学号(Sno)、所在系(Sdept) 系主任姓名(Mname)、课程名(Cname) 成绩(Grade) 单一的关系模式 : Student <U、F> U ={ Sno, Sdept, Mname, Cname, Grade }

  26. 判断是否是一个好模式的例子(1) 学校数据库的语义: ⒈ 一个系有若干学生, 一个学生只属于一个系; ⒉ 一个系只有一名主任; ⒊ 一个学生可以选修多门课程, 每门课程有若干学生选修; ⒋ 每个学生所学的每门课程都有一个成绩。 属性组U上的一组函数依赖F: F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade }

  27. 判断是否是一个好模式的例子(1) Student <U、F> U ={ Sno, Sdept, Mname, Cname, Grade } 属性组U上的一组函数依赖F: F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade } 不是好模式

  28. 判断是否是一个好模式的例子(2) 例:在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。 • 每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称 : (S,J)→T,(S,T)→J,T→J • 不是好模式

  29. 如何分解? • 1.求出函数依赖集合的最小覆盖集 • when we list a set of FDs, we normally try to list a MINIMAL set, so that a smaller set doesn't exist that will imply these. It will turn out that finding a minimal set of FDs is very important in finding the right relational design by Normalization. • 2.进行无损分解T——〉T1,T2

  30. 步骤一:求解最小覆盖 • Step 1.用 decomposition rule.将所有的函数依赖的右边只有一个属性 xyz x y 和x z • F: (1) A B, (2) C B, (3) D A B C, (4) A C D • H: (1) A B, (2) C B, (3) D A, (4) D B, (5) D C, (6) A C D

  31. Step 2.去除多余的函数依赖Remove inessential FDs from the set H to get the set J. Determine inessential X  A if A is in X+ under FDs without X -> A. • (1) A B, (2) C B, (3) D A, (4) D B, (5) D C, (6) A C D • A+=AB C+=BC D+=ABCD AC+=ACDB • H = (1) A B, (2) C B, (3) D A, (4) D C, (5) A C D (Renumber)

  32. Step 3.去除左边多余的属性Successively replace FDs in H with FDs that have a smaller number of FDs on the left-hand side so long as H+ remains the same:changing X  A to Y  A, then checking if Y+ under new FD set is unchanged.如果第三步函数依赖有改变要回到第二步 • (1) A B, (2) C B, (3) D A, (4) D C, (5) A C D • A+=AB C+=BC D+=ABCD AC+=ACDB

  33. Step 4. Apply Union rules to bring things back together on the right for common sets of attributes on the left of FDs, renamed M. (Xy and x z then x yz • (1) A B, (2) C B, (3) D A, (4) D C, (5) A C D • (1) A B, (2) C B, (3) D A C, (4) A C D

  34. Other example • ABD AC, C BE,AD BF,B E • 1.ABD A, ABD  C,C B, C  E,AD B, AD  F,B E (ABD+= ABDECF ABC+=ABCE AD+=ADBFEC B+=BE) • 2. ABD A是平凡依赖, C  E不关键 只留下了ABD  C, C B, AD B, AD  F,B E • 3.AD C, C B, AD  B ,AD  F,B E重返第2步得到AD C, C B,AD  F,B E • 4. AD CF, C B, B E

  35. 如果第二步先,做完第三步如果有改变,则要重新作第二步如果第二步先,做完第三步如果有改变,则要重新作第二步 • 注意第二步骤和第三步可以调换次序。

  36. 如何分解 • 什么是无损分解? • 使得分解后的表进行连接运算后等于原来的表 • 例1 • 例2 • 算法 • 假设表 T 具有函数依赖集合 F ,如果要将表T误算分解为 {T1, T2},则要满足以下两个条件: • (1) Head(T) =Head(T1) Head(T2) • (2)在函数依赖集合 F包含了以下的函数依赖: Head(T1)  Head(T2) -> Head(T1), or Head(T1)  Head(T2) -> Head(T2)

  37. 假设给定一个表,以及函数依赖F,算法产生T的一个符合3NF且保持F中函数依赖的无损分解。假设给定一个表,以及函数依赖F,算法产生T的一个符合3NF且保持F中函数依赖的无损分解。 • 例子 已知表T,head(T)=ABCDEF,函数依赖集包括ABC,A  D,B  E 分解结果: T1(ABF) T2( ABC ) T3( AD ) T4( BE )

  38. Replace F with minimal cover of F S= FOR ALL X Y IN F IF FOR ALL ZS, X YZ THEN S=S HERDING(X Y) END FOR ‘ 如果没有任何表包括X Y,则在s集合中添加一个新的表头(xy) IF FOR ALL CANDIDATE KEYS K FOR T FOR ALL Z S,K Z THEN CHOOSE A CANDIDATE KEY K AND SET S=S HERDING(K) ‘如果T表中的候选键没有在任何表中,则在s集合中添加一个新的表头(候选键)

  39. 例一:r=(SNO,CNO,GRADE,SDEPT,Mname) F ={ Sno → Sdept, Sdept → Mname, (Sno, Cno) → Grade } SC(Sno, Cno, Grade) SD(Sno, Sdept) DL(Sdept, Mname) 例二: (S,J)→T,(S,T)→J,T→J S表示学生,T表示教师,J表示课程

  40. 例二: (S,J)→T,(S,T)→J,T→J

  41. BCNF • 具有函数依赖的数据库设计目标: • BCNF • 无损连接 • 保持依赖 • 有些情况很难达到所有的三个目标,通常舍弃目标3而选择目标1和2

  42. BCNF • T表如何分解,首先将非码依赖x→Y分解出去,将剩余的属性+x形成另一个表模式 • 例子: (S,J)→T,(S,T)→J,T→J ( TJ )和(S,T) • 如何保留函数依赖? 定义一个物化视图,将表连接起来,对于没有保留的依赖x→Y,在视图上定义unique(x) • 例如要定义一个物化视图(s,t,j), (S,J)→T,(S,T)→J由于没有保留,则要在sj和st上定义唯一性

  43. 规范化的其他例子(1) • 1.假设一个医生可以在几家医院工作并从每家医院领取工资。关系(doctor,hospital,salary)规范吗?规范 • 2.如果在上例的关系中加入一个address字段,每个医生只有一个地址,但一个地址对应了几个医生,请问关系规范吗?不规范 • 3.在例2的基础上,禁止医生同时在多家医院工作,其他不变。关系(doctor,hospital,salary, address )规范吗?规范

  44. 规范化的其他例子(2) • 在例3假设的基础上,加入医院的hospital-address信息,关系(doctor,hospital, hospital-address ,salary, address )规范吗?不规范

  45. 规范化总结 • 关系数据库的规范化理论是数据库逻辑设计的工具。 • 规范化程度可以有多个不同的级别 • 一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这只是最基本的规范化。(1NF表示可以入库) • 规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题

  46. 规范化总结(续) • 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化 • 所谓规范化实质上是概念的单一化,采用“一事一地”的模式设计原则 • 让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去 • 采用case工具用e-r图确定实体和关系的方法就不容易出现非规范化。 例子

  47. 医生 医院 doctor_ID name specialty Works-in hospital_ID name address Doctor(doctor_ID,name,specialty, hospital_ID ,……) hospital (hospital_ID,name,address)

  48. 规范化总结(续) • 不能说规范化程度越高的关系模式就越好 • 当一个应用的查询中经常涉及到两个或多个关系模式的属性时,系统必须经常地进行联接运算,而联系运算的代价是相当高的,可以说关系模型低效的主要原因就是做联接运算引起的,因此在这种情况下,第二范式甚至第一范式也许是最好的。

  49. 规范化总结(续) • 在设计数据库模式结构时,必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式 • 上面的规范化步骤可以在其中任何一步终止

More Related