• 1. 1数据库系统概论 An Introduction to Database System 第六章 关系数据理论
  • 2. 2第六章 关系数据理论6.1 问题的提出 6.2 规范化 *6.3 数据依赖的公理系统 *6.4 模式的分解 6.5 小结
  • 3. 36.1 问题的提出关系数据库逻辑设计 针对具体问题,如何构造一个适合于它的数据模式。 数据库逻辑设计的工具──关系数据库的规范化理论。
  • 4. 4一、概念回顾关系模式的形式化定义 关系模式由五部分组成,即它是一个五元组: R(U, D, DOM, F) R: 关系名 U: 组成该关系的属性名集合 D: 属性组U中属性所来自的域 DOM: 属性到域的映射 F: 属性间数据的依赖关系集合返回
  • 5. 5二、关系模式的简化表示关系模式R(U, D, DOM, F) 简化为一个三元组: R(U, F) 当且仅当U上的一个关系r 满足F时,r称为关系模式 R(U, F)的一个关系返回
  • 6. 6三、什么是数据依赖1. 数据依赖 是现实世界属性间相互联系的抽象 是通过一个关系中属性间值的相等与否体现出来 是数据内在的性质 2. 数据依赖的类型 函数依赖(Functional Dependency,简记为FD) 多值依赖(Multivalued Dependency,简记为MVD) 其他
  • 7. 7四、数据依赖对关系模式的影响例:描述学校教务的数据库: 学生的学号(Sno)、所在系(Sdept) 系主任姓名(Mname)、课程名(Cno) 成绩(Grade) 单一的关系模式 : Student U ={ Sno, Sdept, Mname, Cno, Grade }
  • 8. 8数据依赖对关系模式的影响(续)学校数据库的语义: ⒈一个系有若干学生, 一个学生只属于一个系; ⒉一个系只有一名主任; ⒊一个学生可以选修多门课程, 每门课程有若干学生选修; ⒋每个学生所学的每门课程都有一个成绩。
  • 9. 9数据依赖对关系模式的影响(续)属性组U上的一组函数依赖F: F ={ Sno → Sdept, Sdept → Mname, (Sno, Cno) → Grade } SnoCnoSdeptMnameGrade
  • 10. 10关系模式Student中存在的问题⒈ 数据冗余太大 ⒉更新异常(Update Anomalies) ⒊ 插入异常(Insertion Anomalies) ⒋ 删除异常(Deletion Anomalies)
  • 11. 11数据依赖对关系模式的影响(续)结论: Student关系模式不是一个好的模式。 “好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。 原因:产生上述问题的原因,直观地说,是因为关系中“包罗万象”,内容太杂了。实际上是由存在于模式中的某些数据依赖引起的。 解决方法:通过分解关系模式来消除其中不合适的数据依赖。
  • 12. 12我们把关系模式student分解为下面三个结构简单的关系模式: 学生关系S(Sno,Sname,Sdept ) 选课关系SC(Sno, Cno, Grade ) 系关系D(Sdept, Mname)
  • 13. 13SNO SName SDEPT SNO CNO Grade S1 赵亦 计算机 S1 C1 90 S2 钱尔 信息 S1 C2 85 S3 孙珊 信息 S2 C5 57 S4 李思 自动化 S2 C6 80   S2 C7   D  S2 C8 70 SDEPT MName S3 C1 0 计算机 刘伟 S3 C2 70 信息 王平 S3 C4 85 自动化 刘伟 S4 C1 93 图 分解后的关系模式 SSC70
  • 14. 146.2 规范化6.2.1 函数依赖 6.2.2 码 6.2.3 范式 6.2.4 2NF 6.2.5 3NF 6.2.6 BCNF 6.2.7 多值依赖 6.2.8 4NF 6.2.9 规范化小结返回
  • 15. 156.2.1 函数依赖一、函数依赖 二、平凡函数依赖与非平凡函数依赖 三、完全函数依赖与部分函数依赖 四、传递函数依赖 返回
  • 16. 16一、函数依赖 定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。我们称X为决定因素,Y为依赖因素。Y=f(X)
  • 17. 17T1ABX1Y1X2Y4X1Y1X3Y2X2Y4X4Y3T2ABX1Y1X2Y4X1Y1X3Y2X2Y4X4Y4练习:请给出下列两个关系中A与B的函数依赖关系AB BAAB BA
  • 18. 18说明1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件,函数依赖是数据依赖的一种,也是特殊的完整性约束。 2. 函数依赖是语义范畴的概念。只能根据语义来确定一个函数依赖,而不能按照其形式化定义来证明一个函数依赖是否成立。
  • 19. 19 3. 数据库设计者可以对现实世界作强制的规定。例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定的函数依赖,若发现有同名人存在, 则年龄就不再函数依赖于姓名了。
  • 20. 204.函数依赖与属性之间的联系类型有关。 (1)在一个关系模式中,如果属性X与Y有1:1联系时,则存在函数依赖X→Y,Y→X,即XY。 例如,当学生无重名时,SNOSname。 (2)如果属性X与Y有1:m的联系时,则只存在函数依赖Y→X。 例如,Sage,Sdept与SNO之间均为1:m联系,所以有SNO→Sage ,SNO→Sdept 。
  • 21. 21(3)如果属性X与Y有m: n的联系时,则X与Y之间不存在任何函数依赖关系。 例如,一个学生可以选修多门课程,一门课程又可以为多个学生选修,所以SNO与CNO之间不存在函数依赖关系。 由于函数依赖与属性之间的联系类型有关,所以在确定属性间的函数依赖关系时,可以从分析属性间的联系类型入手,便可确定属性间的函数依赖。
  • 22. 22练习:设关系模式R(ABCD),在R的关系中,属性值间有如下的联系:A值与B值有一对多联系,即每个A值有多个B值与之联系,而每个B值只有一个A值与之联系;C值与D值之间有一对一联系。试根据这些规则写出相应的函数依赖。解:因为A值与B值有一对多联系,故可写出函数依赖B →A; 因为C值与D值有一对一联系,故可写出两个函数依赖C→D和D →C。
  • 23. 235.函数依赖关系的存在与时间无关 当关系中的元组增加、删除或更新后都不能破坏这种函数依赖。 所以函数依赖关系的存在与时间无关,而只与数据之间的语义规定有关。
  • 24. 24二、平凡函数依赖与非平凡函数依赖在关系模式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
  • 25. 25平凡函数依赖与非平凡函数依赖(续)对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。返回
  • 26. 26三、完全函数依赖与部分函数依赖 定义6.2 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X',都有X' →Y, 则称Y完全函数依赖于X,记作X F Y。 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X P Y。
  • 27. 27完全函数依赖与部分函数依赖(续) 例: 在关系SC(Sno, Cno, Grade)中, 由于:Sno →Grade,Cno → Grade, 因此:(Sno, Cno) F Grade
  • 28. 28完全函数依赖与部分函数依赖(续)只有当决定因素是组合属性时,讨论部分函数依赖才有意义,当决定因素是单属性时,只能是完全函数依赖。 例:关系模式S(SNO,SName,Sage,Sdept) 决定因素为单属性SNO, SNO→(SName,Sage,Sdept ),则不存在部分函数依赖。返回
  • 29. 29四、传递函数依赖 定义6.3 在关系模式R(U)中,如果X→Y,Y→Z,且Y X,Y→X,则称Z传递函数依赖于X。 注: 如果Y→X, 即XY,则Z直接函数依赖于X。( S(SNO,SName,Sage,Sdept) )
  • 30. 30函数依赖(续)综上所述,函数依赖分为完全函数依赖、部分函数依赖和传递函数依赖三类,它们是规范化理论的依据和规范化程度的准则,数据库的规范设计将以这些概念为基础来进行。 返回
  • 31. 316.2.2 码 定义6.4 设K为关系模式R中的属性或属性组合。若K F U,则K称为R的一个侯选码(Candidate Key)。若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。 主属性与非主属性 ALL KEY
  • 32. 32全码举例一个教师可以讲授多门课程,一门课程可以为多个教师讲授 同样一个学生可以选听多门课程,一门课程可以为多个学生选听 (T,C,S)三个属性的组合是主码,T、C、S都是主属性,而无非主属性。
  • 33. 33外部码 定义6.5 关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R 的外部码(Foreign key)也称外码。如: SC(Sno,Cno,Grade) 主码和外部码一起提供了表示关系间联系的手段。 返回
  • 34. 346.2.3 范式把关系数据库规范化过程中为不同程度的规范化要求设立的不同标准称为范式(Normal Form),它是符合某一种级别的关系模式的集合。每种范式都规定了一些限制约束条件。 由于规范化的程度不同,就产生了不同的范式。 满足最基本规范化要求的关系模式叫第一范式, 在第一范式中进一步满足一些要求为第二范式, 依此类推就产生了第三范式、BC范式、第四范式以及第五范式概念。
  • 35. 35范式(续)各种范式之间存在联系: 如下图所示:4NF5NFBCNF3NF2NF1NF规范与非规范关系
  • 36. 361NF (First Normal Form)在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的模式。 职工号、姓名、电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 规范成为1NF有三种方法:
  • 37. 37职工号姓名 电话办公 家用001张三1234545855002李四2122222224职工号姓名 电话001张三12345001张三45855002李四21222002李四22224职工号姓名办公 电话家用电话001张三1234545855002李四2122222224职工号姓名电话001张三12345002李四21222原表法1法2法3
  • 38. 386.2.4 2NF第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。 但是满足第一范式的关系模式并不一定是一个好的关系模式。
  • 39. 392NF(续)例: 关系模式SLC(Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,假设每个系的学生住在同一个地方。 函数依赖包括: (Sno, Cno) F Grade Sno → Sdept (Sno, Cno) P Sdept Sno → Sloc (Sno, Cno) P Sloc Sdept → Sloc
  • 40. 40 2NF (续)SLC的码为(Sno, Cno) SLC满足第一范式。 非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)SnoCnoGradeSdeptSlocSLC
  • 41. 41SLC不是一个好的关系模式关系模式SLC(Sno, Sdept, Sloc, Cno, Grade) (1) 插入异常 假设Sno=95102,Sdept=IS,Sloc=N的学生还未选课,因课程号是主属性,因此该学生的信息无法插入SLC。 (2) 删除异常 假定某个学生本来只选修了3号课程这一门课。现在因身体不适,他连3号课程也不选修了。因课程号是主属性,此操作将导致该学生信息的整个元组都要删除。
  • 42. 42SLC不是一个好的关系模式(续)关系模式SLC(Sno, Sdept, Sloc, Cno, Grade) (3) 数据冗余度大 如果一个学生选修了10门课程,那么他的Sdept和Sloc值就要重复存储了10次。 (4) 修改复杂 例如学生转系,在修改此学生元组的Sdept值的同时,还可能需要修改住处(Sloc)。如果这个学生选修了K门课,则必须无遗漏地修改K个元组中全部Sdept、Sloc信息。
  • 43. 43 2NF (续)原因 非主属性Sdept、 Sloc部分函数依赖于码。 解决方法 SLC分解为两个关系模式,以消除这些部分函数依赖 SC(Sno, Cno, Grade) SL(Sno, Sdept, Sloc)
  • 44. 442NF (续)函数依赖图:SnoCnoGradeSCSLSnoSdeptSloc
  • 45. 45 2NF的定义(续)定义6.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。 例:SLC(Sno, Sdept, Sloc, Cno, Grade) ∈1NF SLC(Sno, Sdept, Sloc, Cno, Grade) ∈2NF SC(Sno, Cno, Grade) ∈ 2NF SL(Sno, Sdept, Sloc) ∈ 2NF
  • 46. 46 第二范式(续)采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
  • 47. 47算法:将关系模式R分解成2NF模式集设有关系模式R(U),主码是W,R上还存在FD X→Z,其中Z是非主属性,X⊂W,则X →Z就是一个部分依赖。此时应把R分解成两个模式: R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X(参考R1)。 利用外码和主码的连接可以从R1和R2重新得到R。 如果R1和R2还不是2NF,则重复上述过程,一直到数据库模式中每一个关系模式都是2NF为止。
  • 48. 48 第二范式(续)经以上分析,可以得到两个结论: 1.从1NF关系中消除非主属性对码的部分函数依赖,则可得到2NF关系。 2.如果R的码为单属性,或R的全体属性均为主属性,则R2NF。返回
  • 49. 49 6.2.5 3NF将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。 例:2NF关系模式SL(Sno, Sdept, Sloc)中有如下函数依赖: Sno→Sdept Sdept→Sloc Sno→Sloc Sloc传递函数依赖于Sno,即SL中存在非主属性对码的传递函数依赖。
  • 50. 50 3NF的定义定义6.7 关系模式R 中若不存在这样的码X、属性组Y及非主属性Z(Z  Y), 使得X→Y,Y → X,Y→Z,成立,则称R ∈ 3NF。 也即:如果关系模式R是2NF,且每个非主属性都不传递依赖于码,那么称R是第三范式的模式。如果数据库模式中每个关系模式都是3NF,则称其为3NF的数据库模式。
  • 51. 51 3NF (续)解决方法 采用投影分解法,把SL分解为两个关系模式,以消除传递函数依赖: SD(Sno, Sdept) DL(Sdept, Sloc) SD的码为Sno, DL的码为Sdept。
  • 52. 52例如: SL(Sno, Sdept, Sloc) ∈ 2NF  SL(Sno, Sdept, Sloc) ∈ 3NF SD(Sno, Sdept) ∈ 3NF DL(Sdept, Sloc)∈ 3NF
  • 53. 53算法:将关系模式R分解成3NF模式集设关系模式R (U),主码是W,R上还存在FD X→Z,其中Z是非主属性,Z⊈X且X不是候选码,这样W→Z就是一个传递依赖。此时应把R分解成两个模式: R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X(参考R1)。 利用外码和主码相匹配机制,R1和R2通过连接可以重新得到R。 如果R1和R2还不是3NF,则重复上述过程,一直到数据库模式中每一个关系模式都是3NF为止。返回
  • 54. 54 3NF(续)若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。 如果R∈3NF,则R也是2NF。
  • 55. 55 6.2.6 BC范式(BCNF)定义6.8 设关系模式R∈1NF,如果对于R的每个函数依赖X→Y,且Y不属于X,则X必含有码,那么R∈BCNF。 即,关系模式R中,若每一个决定因素都包含码,则R ∈BCNF。
  • 56. 56BCNF的关系模式所具有的性质⒈ 所有非主属性都完全函数依赖于每个候选码 ⒉ 所有主属性都完全函数依赖于每个不包含它的候选码 ⒊ 没有任何属性完全函数依赖于非码的任何一组属性
  • 57. 57BCNF (续)例:在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。 每一教师只教一门课,每门课由若干教师教;某一学生选定某门课就确定了一个固定的教师,某个学生选修某个教师的课就确定了所选课的名称。则有如下函数依赖:SJTSTJSTJ (S,J)→T,(S,T)→J,T→J
  • 58. 58BCNF (续)STJ∈3NF  (S,J)和(S,T)都可以作为候选码  S、T、J都是主属性 STJ∈BCNF T→J,T是决定属性集,T不是候选码
  • 59. 59对于STJ,(S,J)和(S,T)都是候选键,两个候选键相交,有公共的属性S。 STJ中不存在非主属性,也就不可能存在非主属性对键的部分依赖或传递依赖,所以STJ 3NF。 但从STJ的一个关系实例分析,仍存在一些问题。 T JS T1 J1 S1 T1 J1 S2 T2 J1 S3 T2 J1 S4 T3 J2 S2 T4 J2 S1 T4 J2 S3 关系STJ
  • 60. 601.数据冗余。虽然每个教师只开一门课,但每个选修该教师所开课程的学生元组都要记录这一信息。 2.插入异常。当某门课程本学期不开,自然就没有学生选修。没有学生选修,因为主属性不能为空,教师上该门课程的信息就无法插入。 3.删除异常。如果选修某门课程的学生全部毕业,删除学生记录的同时,随之也删除了教师开设该门课程的信息。 4.更新异常。当某个教师开设的某门课程改名后,所有选修该教师该门课程的学生元组都要进行修改,如果漏改某个数据,则破坏了数据的完整性。
  • 61. 61BCNF(续)解决方法:将STJ分解为二个关系模式: ST(S,T) ∈ BCNF, TJ(T,J)∈ BCNF 没有任何属性对码的部分函数依赖和传递函数依赖STSTTJTJ
  • 62. 62关系模式STJ由规范到BCNF后,使原来存在的四个异常问题得到解决。 1.数据冗余降低。每个教师开设课程的信息只在TJ关系中存储一次。 2.不存在插入异常。对于所开课程尚未有学生选修的教师信息可以直接存储在关系TJ中。 3.不存在删除异常。如果选修某门课程的学生全部毕业,可以只删除关系ST中的相关学生记录,而不影响系关系TJ中相应教师开设该门课程的信息。 4.不存在更新异常。当某教师开设的某门课程改名后,只需修改关系TJ中的一个相应元组即可,不会破坏数据完整性。
  • 63. 63BC范式(续)若R∈BCNF 每一个决定属性集(因素)都包含(候选)码 R中的所有属性(主,非主属性)都完全函数依赖于码 若R∈BCNF,R∈3NF 若R∈3NF,则 R不一定∈BCNF 例5,例6,例7
  • 64. 64BCNF (续)如果一个关系数据库中所有关系模式都属于3NF,则已在很大程度上消除了插入异常和删除异常,但由于可能存在主属性对候选码的部分依赖和传递依赖,因此关系模式的分离仍不够彻底。 如果一个关系数据库中所有关系模式都属于BCNF,那么在函数依赖的范畴内,已经实现了模式的彻底分解,消除了产生插入异常和删除异常的根源,而且数据冗余也减少到极小程度。返回
  • 65. 65 规范化小结关系数据库的规范化理论是数据库逻辑设计的工具。 一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这只是最基本的规范化。 规范化程度可以有多个不同的级别。
  • 66. 66规范化(续)规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题。 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
  • 67. 67规范化(续)关系模式规范化的基本步骤 1NF ↓ 消除非主属性对码的部分函数依赖 消除决定因素 2NF 非码的非平凡 ↓ 消除非主属性对码的传递函数依赖 函数依赖 3NF ↓ 消除主属性对码的部分和传递函数依赖 BCNF
  • 68. 68规范化(续)不能说规范化程度越高的关系模式就越好。 在设计数据库模式结构时,必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。
  • 69. 69规范化(续)对于那些只要求查询而不要求插入、删除等操作的系统,几种异常现象的存在并不影响数据库的操作。这时便不宜过度分解,否则当要对整体查询时,需要更多的多表连接操作,这有可能得不偿失。 上面的规范化步骤可以在其中任何一步终止 在实际应用中,最有价值的是3NF和BCNF,在进行关系模式的设计时,通常分解到3NF就足够了
  • 70. 70补充作业题设有关系模式:订购(客户名,住址,联系电话,书号,书名,作者,出版社,社址),其中F={客户名→住址,客户名→联系电话,书号→书名,书号→作者,书号→出版社,出版社→社址}。求本关系模式的关键码,判断其为第几范式,如何将它规范化为符合BCNF的关系?返回