




已阅读5页,还剩89页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章关系数据理论及求精 数据库系统原理与设计 第2版 志存高远 脚踏实地 勇于探索 目录 范式 问题提出 函数依赖定义 函数依赖理论 数据库模式求精 模式分解算法 5 6 5 5 本章要解决的两个问题 如何判断一个数据库模式是 好 的模式如何设计出一个 好 模式 数据冗余导致的问题 数据冗余是指同一信息在数据库中存储了多个副本 它可能引起下列问题 冗余存储 信息被重复存储 导致浪费大量存储空间 更新异常 当重复信息的一个副本被修改 所有副本都必须进行同样的修改 因此当更新数据时 系统要付出很大的代价来维护数据库的完整性 否则会面临数据不一致的危险 插入异常 只有当一些信息事先已经存放在数据库中时 另外一些信息才能存入数据库中 删除异常 删除某些信息时可能丢失其它信息 数据冗余关系举例 例5 1 考虑学生选课关系模式 SCE studentNo studentName courseNo courseName score 属性集 studentNo courseNo 是唯一候选码 也是主码 如果允许一个学生选修多门课程 且一门课程可被多个学生选修 则该关系实例可能出现 数据冗余关系举例 例5 1 考虑学生选课关系模式 SCE studentNo studentName courseNo courseName score 属性集 studentNo courseNo 是唯一候选码 也是主码 如果允许一个学生选修多门课程 且一门课程可被多个学生选修 则该关系实例可能出现 冗余存储 学生姓名和课程名被重复存储多次 更新异常 当修改某学生的姓名或某课程的课程名时 可能只修改了部分副本的信息 而其他副本未被修改到 插入异常 如果某学生没有选修课程 或某课程未被任何学生选修时 则该学生或该课程信息不能存入数据库 因为主码值不能为空 删除异常 当某学生的所有选修课程信息都被删除时 则该学生的信息将被丢失 对课程也是如此 冗余问题 数据冗余产生原因及解决方法 SCE产生问题的原因 部分函数依赖该模式中某些属性之间存在如下函数依赖关系studentNo studentName 即学号决定姓名 courseNo courseName 即课程编号决定课程名称 studentNo courseNo score即studentName courseName部分依赖于关系的主码 解决方法 关系模式分解分解为三个关系模式S studentNo studentName C courseNo courseName E studentNo courseNo score 模式分解导致的问题 将一个关系模式分解为较小关系模式集可解决冗余问题 但由此可能产生两个新的问题 什么样的关系模式需要进一步分解为较小的关系模式集 根据范式要求决定 后面讨论 是否所有的模式分解都是有益的 实例 模式分解问题举例 例5 2 设一关系模式STU studentNo studentName sex birthday native classNo 其中 studentNo为主码 假设将STU分解为以下两个子模式 STU1 studentNo studentName STU2 studentName sex birthday native classNo 分解后会发生什么问题 模式分解问题举例 图5 2有损分解举例 模式分解问题举例 模式分解存在的问题有损分解 两个分解后的关系通过连接运算还原得到的信息与原来关系的信息不一致 如果能够通过连接分解后所得到的较小关系完全还原被分解关系的所有实例 称之为无损分解 losslessdecomposition 也称该分解具有无损连接特性 丢失依赖关系sex birthday age native classNo等与属性studentNo依赖关系也就不再存在 如果被分解关系模式上的所有依赖关系都在分解得到的关系模式上保留 称该分解为依赖保持 dependencypreserving 分解 小结 一个 好 的关系模式应该是 数据冗余尽可能少 即数据共享尽可能高 不发生插入异常 删除异常 更新异常等问题 模式分解时 分解后的模式应具有无损连接 保持依赖等特性 目录 范式 问题提出 函数依赖定义 函数依赖理论 数据库模式求精 模式分解算法 5 6 5 5 函数依赖定义 函数依赖 functionaldependency 简称FD 是一种完整性约束 是现实世界事物属性之间的一种制约关系 它广泛地存在于现实世界之中 定义5 1设r R 为关系模式 R R 对任意合法关系r及其中任两个元组ti和tj i j 若ti tj 则ti tj 则称 函数确定 或 函数依赖于 记作 函数依赖举例 例5 3 关系模式r A B C D 的一个关系实例如图5 4所示 对于任意两个在属性集 A B 上取值相同的元组 它们在属性C上的取值也相同 因此 满足函数依赖AB C 图5 4满足函数依赖AB C的一个关系实例 如果在图中再增加一个元组 a1 b1 c2 d1 AB C还成立吗 函数依赖说明 对于函数依赖 需做如下说明 函数依赖不是指关系模式r R 的某个或某些关系实例满足的约束条件 而是指关系模式r R 的所有关系实例均要满足的约束条件 函数依赖是语义范畴的概念 只能根据数据的语义来确定函数依赖 是不能够被证明的 数据库设计者可以对现实世界作强制的规定 码约束是函数依赖的一个特例 码属性 集 相当于定义5 1中的 关系中的所有属性相当于定义5 1中的 平凡与非平凡函数依赖 定义5 2在关系模式r R 中 R R 若 但 则称 是非平凡函数依赖 否则 若 则称 是平凡函数依赖 对于任一关系模式 平凡函数依赖都是必然成立的 它不反映新的语义 完全函数依赖和部分函数依赖 定义5 3在关系模式r R 中 R R 且 若对任意的 都不成立 则称 是完全函数依赖 简称完全依赖 否则 若存在非空的 使 成立 则称 是部分函数依赖 简称部分依赖 完全函数依赖和部分函数依赖举例 当 是单属性时 则 完全函数依赖总是成立的 例如 在关系SCE中完全依赖 studentNo studentNamecourseNo courseName studentNo courseNo score部分依赖 studentNo courseNo studentName studentNo courseNo courseName对候选码的部分函数依赖会导致数据冗余和插入 删除 更新异常 传递函数依赖 定义5 4在关系模式r R 中 设 R R R 且 若 则必存在函数依赖 且称 是传递函数依赖 简称传递依赖 注意条件 和 为什么 与部分依赖一样 传递依赖也可能会导致数据冗余及产生各种异常 传递函数依赖举例 例5 4 在关系模式SCI studentNo classNo className institute 中 存在下列函数依赖 studentNo classNoclassNo classNameclassNo institute因此 关系模式SCI中存在下列传递函数依赖 studentNo classNamestudentNo instituteSCI中存在传递依赖 因此可能导致数据冗余 更新异常 插入异常及删除异常 请自己分析SCI中存在的各种异常问题 函数依赖小结 函数依赖是指关系模式中属性之间存在的一种约束关系 这种约束关系既可以是现实世界事物或联系的属性之间客观存在的约束 也可以是数据库设计者根据应用需求或设计需要强加给数据的一种约束 但不论是那种约束 一旦确定 进入数据库中的所有数据都必须严格遵守 正确了解数据的意义及确定属性之间的函数依赖关系 对设计一个好的关系模式是十分重要的 跳过函数依赖理论 第5章关系数据理论及求精 数据库系统原理与设计 第2版 志存高远 脚踏实地 勇于探索 目录 范式 问题提出 函数依赖定义 函数依赖理论 数据库模式求精 模式分解算法 5 6 5 5 函数依赖集闭包 对于给定关系模式r R D DOM F 简记为r R 及其函数依赖集F 有时只考虑给定的函数依赖集是不够的 而需要考虑在r R 上总是成立的所有函数依赖 例5 5 给定关系模式r R r A B C 及函数依赖集F A B B C 证明A C成立 证明 假设对于关系实例r中的任意两个元组ti tj i j 满足ti A tj A 由于存在A B 则可推出ti B tj B 又由于B C 则又可推出ti C tj C 因此 ti A tj A ti C tj C 按定义5 1有A C 证毕 函数依赖集闭包 定义5 5若给定函数依赖集F 可以证明其他函数依赖也成立 则称这些函数依赖被F逻辑蕴涵 定义5 6令F为一函数依赖集 F逻辑蕴涵的所有函数依赖组成的集合称为F的闭包 记为F 函数依赖集F的闭包计算方法Armstrong公理的推理规则 Armstrong公理及推论 Armstrong公理自反律 reflexivityrule 若存在 则有 增补律 augmentationrule 若存在 则有 传递律 transitivityrule 若存在 且 则有 Armstrong公理三个推论合并律 unionrule 若有 且 则有 分解律 decompositionrule 若有 则有 和 伪传递律 pseudotransitivityrule 若有 且 则有 请自己证明三个推论 函数依赖集闭包计算举例 例5 6 令r R r A B C G H I 函数依赖集F A B A C CG H CG I B H 我们可列出F 中的几个依赖 由传递律可得A H 因为A B且B H 由合并律可得CG HI 因为CG H CG I 由伪传递律可得AG I 因为A C且CG I 还可以使用上述规则推导出更多的函数依赖 读者可自行推导 属性集闭包 如果想要判断一个给定的函数依赖 是否在函数依赖集F的闭包中 不用计算F 就可以判断出来 定义5 7令r R 为关系模式 F为函数依赖集 A R 则称在函数依赖集F下由A函数确定的所有属性的集合为函数依赖集F下属性集A的闭包 记为A 属性集闭包的计算算法 属性集闭包计算举例 例5 7 r R r A B C G H I F A B A C CG H CG I B H 计算 AG 算法第一次循环的执行步骤 步骤FDclosure1 初值AG2 A BABG3 A CABCG4 CG HABCGH5 CG IABCGHI6 B HABCGHI算法第二次循环的结果仍为closure ABCGHI 没有变化 算法终止 结果为 closure ABCGHI 最后结果为 AG ABCGHI 计算属性集闭包的作用 计算属性集闭包的作用可归纳如下 验证 是否在F 中 看是否有 判断 是否为r R 的超码 计算 看其是否包含R的所有属性 如 AG ABCGHI 则AG为r R 的超码 判断 是否为r R 的候选码 若 是超码 可检验 包含的所有子集的闭包是否包含R的所有属性 若不存在任何这样的属性子集 则 是r R 的候选码 计算F 对于 R 可通过找出 则有 对 S 可输出一个 S 判断属性集是否为候选码举例 例5 8 r R 和F见例5 7 判断AG是否为r R 的候选码 例5 7已计算出 AG ABCGHI 则还要进一步分别计算A 和G 经计算得 A ABCH G G 它们都不包含R的所有属性 因此 AG为r R 的候选码 对于一个给定的关系模式r R 及函数依赖集F 如何找出它的所有候选码 这是基于函数依赖理论和范式概念判断该关系模式是否是 好 模式的基础 也是对一个 不好 的关系模式进行分解的基础 判断属性集是否为候选码 给定关系模式r R 及函数依赖集F 找出它的所有候选码的一般步骤如下 找出函数依赖集F中在所有函数依赖右方都没有出现的属性集X 属性集X中的属性都一定是候选码中的属性 找出F中在所有函数依赖右方出现但左方没有出现的属性集Y 属性集Y中的属性都不可能是候选码中的属性 如果X非空 则基于F计算X 并开始发现所有候选码 如果X R 则X是关系r R 的唯一候选码 如果X R 则如果X为空 则从F中的每一个函数依赖 u开始 先从函数依赖左边是一个属性的开始 首先 试着发现是否能够通过增加1个属性与X联合起来构成候选码 例如 若存在 R X Y 使 X R 则 X 是关系r R 的一个候选码 继续试着增加另一个属性 若存在 R X Y 使 X R 则 X 是关系r R 的另一个候选码 记找到的所有属性的集合为Z 即 Z 使 X R 接下来 还可以试着发现是否能够通过增加2个或多个属性与X联合起来构成候选码 例如 若存在 R X Y Z 使 X R 则 X 也是关系r R 的一个候选码 如果 R 则 是关系r R 的一个候选码 如果 R 类似地 试着发现是否能够通过增加1个属性与 联合起来构成候选码 再试着发现是否能够通过增加2个或多个属性与 联合起来构成候选码 判断属性集是否为候选码举例 例5 9 给定关系模式r R r A B C D 函数依赖集F B C D A 找出r R 的所有候选码 属性集BD没有在函数依赖的右部出现 故BD为候选码的一部分 由于 BD BDCA R 所以BD为关系模式r R 的唯一候选码 判断属性集是否为候选码举例 例5 10 给定关系模式r R r A B C D E 函数依赖集F A B BC E ED A 找出r R 的所有候选码 属性集CD没有在函数依赖的右部出现 故X CD为候选码的一部分 因 CD CD R 故CD不是候选码 因没有在函数依赖右部出现但左部不出现的属性 故Y 在集合R X Y ABE中寻找与X联合构成候选码的属性 集 A CD ACDBE R 故ACD为候选码 B CD BCDEA R 故BCD为候选码 E CD ACDBE R 故ECD为候选码 因此 关系模式r R 的候选码有ACD BCD和ECD 判断属性集是否为候选码举例 例5 11 设关系模式R A B C D E G 函数依赖集F B ADE A BE AC G BC D 找出r R 的所有候选码 因C没有在函数依赖的右部出现 故X C为候选码的一部分 因C C R 故C不是候选码 在函数依赖右部出现但左部不出现的属性有DEG 故Y DEG 在R X Y AB中寻找与X联合起来构成候选码的属性 集 A C ACBEGD R 故AC为候选码 B C BCADEG R 故BC为候选码 因此 关系模式r R 的候选码有AC和BC 无关属性定义 定义5 8给定函数依赖集F及 F 如果去除 或 中的某属性A之后不会改变F 则称属性A是无关的 定义5 9给定函数依赖集F及 F 若A 且F逻辑蕴涵 F A 即 A F 则属性A在 中是无关的 左无关 定义5 10给定函数依赖集F及 F 若A 且 F A 逻辑蕴涵F 即 F A 则属性A在 中是无关的 右无关 无关属性检测算法 设r R 为关系模式 F是函数依赖集 则检测 上的属性A左无关或右无关的算法分别如图5 9 a 或 b 所示 ifA A 计算F下 的闭包 if A在 中是无关的 ifA F F A 计算F 下 的闭包 ifA A在 中是无关的 a 左无关属性检测算法 b 右无关属性检测算法 图5 9无关属性检测算法 无关属性检测举例 例5 12 设F AB CD A E E C 证明C在AB CD中为无关属性 证明 由于C是AB CD中的右边属性 依图5 9 b 的算法 计算F F AB D A E E C 计算F 下 AB AB ABCDE 由于C AB ABCDE 因此 C是AB CD中的无关属性 证毕 正则覆盖定义和计算方法 定义5 11正则覆盖 canonicalcover Fc是一个函数依赖集 使得F逻辑蕴涵Fc中的所有函数依赖 Fc逻辑蕴涵F中的所有函数依赖 而且必须具有下列特性 Fc中的任何函数依赖都不包含无关属性 Fc中函数依赖的左半部都是唯一的 即Fc中不存在两个函数依赖 1和 2 根据上述性质 计算F的正则覆盖Fc分为两个步骤 合并函数依赖 将F中所有形如 1 2的函数依赖合并为 1 2 得到新函数依赖集F 去除无关属性 对F 中的每个函数依赖 依次判断是否包含无关属性 若发现无关属性 则用去除无关属性后的函数依赖代替F 中的原函数依赖 计算正则覆盖举例 例5 13 考虑关系模式r R r A B C 和函数依赖集F A BC B C A B AB C 计算F的正则覆盖Fc 第1步 合并函数依赖 将A BC和A B合并为A BC F A BC B C AB C 第2步 去除无关属性 对于AB C 根据图5 9 a 的算法可检测A是无关的 因此 去除无关属性A后 AB C变为B C 而B C已在F 中存在 则F A BC B C 对于B C 由于其左右两边都为单属性 故不存在无关属性 对于A BC 根据图5 9 b 的算法可检测C是无关的 因此 去除无关属性C后 A BC变为A B 则F A B B C F 中的函数依赖左半部都是唯一的 且都不存在无关属性 因此Fc A B B C 正则覆盖说明 对于正则覆盖 需做如下说明 可以证明Fc与F具有相同的闭包 Fc不包含无关属性 每个依赖是最小的 且是必要的 正则覆盖不一定唯一 无损连接分解 定义5 12给定关系模式r R 及函数依赖集F 记r1 R1 r2 R2 为由r R 分解得到的子模式 如果对任意一个满足函数依赖集F的关系实例r都有 r 则称该分解对于F是无损连接的 无损连接分解能够根据分解后的关系通过连接还原原来的关系实例 如何判定一个分解是否是无损连接的 无损连接分解判断方法 定义5 13给定关系模式r R 及函数依赖集F 则将r R 分解成r1 R1 r2 R2 的分解是无损连接分解 当且仅当F 包含函数依赖R1 R2 R1或R1 R2 R2 即 在F下 R1 R1 R2 或R2 R1 R2 因此 当一个关系模式分解为两个关系模式时 该分解为无损连接分解的充要条件是两分解关系的公共属性包含r1 R1 的码或r2 R2 的码 即 R1 R2是关系r1 R1 或r2 R2 的超码 无损连接分解判断举例 例5 14 假设关系模式r R r A B C D E F A BC CD E B D E A 则可将r R 进行两种不同的分解 分解1 r1 R1 r1 A B C r2 R2 r2 A D E 分解2 r1 R1 r1 A B C r2 R2 r2 C D E 对于分解1 R1 R2 A 且A R1 故此分解是无损连接分解 而对于分解2 R1 R2 C 且C R1 C R2 故此分解不是无损连接分解 保持依赖分解 关系数据库模式分解的另一个目标是保持依赖 定义5 14给定关系模式r R 及函数依赖集F r1 R1 r2 R2 rn Rn 为r R 的分解 F在Ri的投影为闭包F 中所有只包含Ri属性的函数依赖的集合 记为Fi 即如果 在Fi中 则 和 的所有属性均在Ri中 定义5 15称具有函数依赖集F的关系模式r R 的分解r1 R1 r2 R2 rn Rn 为保持依赖分解 当且仅当 F1 F2 Fn F 保持依赖分解判断举例 例5 15 设关系模式r R r A B C F A B B C 有两种分解 r1 R1 r1 A B r2 R2 r2 B C F1 A B F2 B C 该分解保持函数依赖 因为 F1 F2 F r1 R1 r1 A B r2 R2 r2 A C F1 A B F2 A C 注 A C F 该分解不保持函数依赖 因为分解后函数依赖B C被丢失 跳至BCNF 目录 范式 问题提出 函数依赖定义 函数依赖理论 数据库模式求精 模式分解算法 5 6 5 5 范式概述 基于函数依赖理论 关系模式可分成第一范式 1NF 第二范式 2NF 第三范式 3NF Boyce Codd范式 BCNF 这几种范式的要求一个比一个严格 它们之间的联系为 BCNF 3NF 2NF 1NF满足BCNF范式的关系一定满足3NF范式 满足3NF范式的关系一定满足2NF范式 满足2NF范式的关系一定满足1NF范式 第一范式 1NF 码 定义5 16如果一关系模式r R 的每个属性对应的域值都是不可分的 即原子的 则称r R 属于第一范式 记为r R 1NF 第一范式的目标是 将基本数据划分成称为实体集或表的逻辑单元 当设计好每个实体后 需要为其指定主码 图5 10非规范化的关系模式 图5 111NF规范化后的关系模式 第二范式 2NF 全部是码 定义5 17设有一关系模式r R R 若 包含在r R 的某个候选码中 则称 为主属性 否则 为非主属性 在SCE关系中 属性集 studentNo courseNo 是SCE的唯一候选码 因此 属性studentNo和courseNo为主属性 其余属性为非主属性 定义5 18如果一个关系模式r R 1NF 且所有非主属性都完全函数依赖于r R 的候选码 则称r R 属于第二范式 记为r R 2NF SCE中存在依赖关系studentNo studentName和courseNo courseName 即非主属性studentName和courseName部分依赖于SCE的候选码 studentNo courseNo 故SCE 2NF 第二范式 2NF 全部是码 第二范式的目标 将只部分依赖于候选码 即依赖于候选码的部分属性 的非主属性移到其他表中 也就是说 在满足第一范式的实体中 如果有复合候选码 即多个属性共同构成的候选码 那么所有非主属性必须依赖于全部的候选码 不允许依赖于部分的候选码属性 即不允许候选码的一部分对非主属性起决定作用 全部是码违背2NF的模式 即存在非主属性对候选码的部分依赖 则可能导致例5 1所述的数据冗余及异常问题 第二范式 2NF 全部是码 对于非2NF范式的关系模式 可通过分解进行规范化 以消除部分依赖 如将关系模式SCE分解为关系模式S C和E 这样在每个关系模式中 所有非主属性对候选码都是完全函数依赖 因此都属于2NF范式 2NF范式虽然消除了由于非主属性对候选码的部分依赖所引起的冗余及各种异常 但并没有排除传递依赖 因此 还需要对其进一步规范化 第三范式 3NF 仅仅是码 第三范式的目标 去掉表中不直接依赖于候选码的非主属性 定义5 19如果一个关系模式r R 2NF 且所有非主属性都直接函数依赖于r R 的候选码 即不存在非主属性传递依赖于候选码 则称r R 属于第三范式 记为r R 3NF 也就是说 在满足2NF的实体中 非主属性不能依赖于另一个非主属性 即非主属性只能直接依赖于候选码 总之 所有的非主属性应该直接依赖于 即不能存在传递依赖 这是3NF的要求 全部的候选码 即必须完全依赖 不能存在部分依赖 这是2NF的要求 范式举例 例5 16 r R r A B C D 函数依赖集F AB C B D r R 的候选码为AB r R 2NF 因为函数依赖B D中的决定属性B只是候选码的一部分 即D部分依赖于候选码AB 可将r R 分解为r1 R1 r1 A B C r2 R2 r2 B D r1 R1 的候选码为AB r2 R2 的候选码为B 分解得到的r1 R1 和r2 R2 都属于3NF范式 范式举例 例5 16 r R r A B C D 函数依赖集F AB C B D r R 的候选码为AB r R 2NF 因为函数依赖B D中的决定属性B只是候选码的一部分 即D部分依赖于候选码AB 可将r R 分解为r1 R1 r1 A B C r2 R2 r2 B D r1 R1 的候选码为AB r2 R2 的候选码为B 分解得到的r1 R1 和r2 R2 都属于3NF范式 例5 17 r R r A B C 函数依赖集F A B B C r R 的候选码为A r R 2NF 但r R 3NF 因为函数依赖B C中的决定属性B不是候选码 即C传递依赖于候选码A 可将r R 分解为r1 R1 r1 A B r2 R2 r2 B C r1 R1 的候选码为A r2 R2 的候选码为B 则分解得到的r1 R1 和r2 R2 都属于3NF范式 例5 18 r R r A B C D E 函数依赖集F AB C B D C E r R 的候选码为AB r R 2NF 因为函数依赖B D中的决定属性B只是候选码的一部分 即D部分依赖于候选码AB 另外E传递依赖于候选码AB r R 分解为r1 R1 r1 A B C r2 R2 r2 B D r3 R3 r3 C E r1 R1 的候选码为AB r2 R2 的候选码为B r3 R3 的候选码为C 它们都属于3NF范式 范式举例 例5 18 r R r A B C D E 函数依赖集F AB C B D C E r R 的候选码为AB r R 2NF 因为函数依赖B D中的决定属性B只是候选码的一部分 即D部分依赖于候选码AB 另外E传递依赖于候选码AB r R 分解为r1 R1 r1 A B C r2 R2 r2 B D r3 R3 r3 C E r1 R1 的候选码为AB r2 R2 的候选码为B r3 R3 的候选码为C 它们都属于3NF范式 例5 19 r R r A B C 函数依赖集F AB C C A r R 的候选码为AB或BC r R 3NF 因为关系模式r R 没有非主属性 也就不可能有非主属性对候选码的部分依赖和传递依赖 范式举例 总结 数据冗余 冗余存储 更新异常 插入异常 删除异常 好 的关系模式应该是 数据冗余应尽可能少 不发生插入异常 删除异常 更新异常等问题 模式分解时 需要满足无损连接 保持依赖等特性 函数依赖 完全 部分函数依赖 传递 直接函数依赖 范式 3NF 2NF 1NF 2NF 所有非主属性都完全函数依赖于r R 的候选码 3NF 所有非主属性都直接函数依赖于r R 的候选码 基于函数依赖理论 关系模式可分成 第一范式 1NF 所有属性都是原子的 第二范式 2NF 不存在非主属性对候选码的部分依赖 第三范式 3NF 不存在非主属性对候选码的传递依赖 Boyce Codd范式 BCNF Boyce Codd范式 BCNF Boyce Codd范式 BCNF 定义5 20给定关系模式r R 及函数依赖集F 若F 中的所有函数依赖 R R 至少满足下列条件之一 是平凡函数依赖 即 是r R 的一个超码 即 包含R的全部属性 即起决定作用的属性必须是超码 则称r R 属于Boyce Codd范式 记为r R BCNF 换句话说 在关系模式r R 中 如果F 中的每一个非平凡函数依赖的决定属性集 都包含候选码 则r R BCNF 特别说明 为确定r R 是否满足BCNF范式 必须考虑F 而不是F中的每个依赖 从函数依赖角度可得出 一个满足BCNF的关系模式必然满足下列结论 如果 非平凡 则 是r R 的一个超码 所有非主属性都完全函数依赖于每个候选码 所有主属性都完全函数依赖于每个不包含它的候选码 没有任何属性完全函数依赖于非候选码的任何一组属性 BCNF范式排除了 任何属性 包括主属性和非主属性 对候选码的部分依赖和传递依赖 主属性之间的传递依赖 Boyce Codd范式 BCNF 从函数依赖角度可得出 一个满足BCNF的关系模式必然满足下列结论 如果 非平凡 则 是r R 的一个超码 所有非主属性都完全函数依赖于每个候选码 所有主属性都完全函数依赖于每个不包含它的候选码 没有任何属性完全函数依赖于非候选码的任何一组属性 BCNF范式排除了 任何属性 包括主属性和非主属性 对候选码的部分依赖和传递依赖 主属性之间的传递依赖 Boyce Codd范式 BCNF 候选码A 非主属性1 非主属性2 非主属性k 候选码B Boyce Codd范式判断举例 例5 20 r R r A B C F A B B C r R 的候选码为A r R BCNF 因为函数依赖B C中的决定属性B不是超码 例5 21 r R r A B C F AB C C A r R 的候选码为AB或BC r R BCNF 因为C A的决定属性C不是超码 例5 22 r R r A B C F AB C BC A r R 的候选码为AB或BC r R BCNF 因为两个函数依赖中的决定属性AB或BC都是r R 的候选码 Boyce Codd范式分解 对于非BCNF范式的关系模式 可通过分解进行规范化 以消除部分依赖和传递依赖 例5 20 r R r A B C F A B B C 候选码为A 可分解为r1 R1 r1 A B r2 R2 r2 B C F1 A B F2 B C 或r1 R1 r1 A B r2 R2 r2 A C F1 A B F2 A C 显然 这两种分解得到的r1 R1 和r2 R2 都属于BCNF范式 且都是无损分解 分解后的公共属性是一个关系的候选码 但是 后一种分解不是保持依赖分解 因此 满足BCNF范式的模式分解 可能不是保持依赖分解 第三范式 3NF 仅仅是码 定义5 21给定关系模式r R 及函数依赖集F 若对F 中的所有函数依赖 R R 至少满足下列条件之一 是平凡函数依赖 即 是r R 的一个超码 即 包含R的全部属性 中的每个属性是r R 的候选码的一部分 即主属性 则称r R 属于第三范式 记为r R 3NF 3NF与BCNF范式的区别在于第3个条件 中的每个属性是r R 的候选码的一部分 放松之处 允许存在主属性对候选码的传递依赖和部分依赖 第三范式 3NF 仅仅是码 定义5 21给定关系模式r R 及函数依赖集F 若对F 中的所有函数依赖 R R 至少满足下列条件之一 是平凡函数依赖 即 是r R 的一个超码 即 包含R的全部属性 中的每个属性是r R 的候选码的一部分 即主属性 则称r R 属于第三范式 记为r R 3NF 3NF与BCNF范式的区别在于第3个条件 中的每个属性是r R 的候选码的一部分 放松之处 允许存在主属性对候选码的传递依赖和部分依赖 候选码C 候选码B 候选码A a b c 第三范式 3NF 仅仅是码 注意 如果 中的每个属性是r R 的候选码的一部分 那么 中也一定包含候选码的一部分 即 不可能全是非主属性 即 中一定包含主属性 不妨假设 是非平凡函数依赖 且不存在无关属性 如果 是候选码 由于 那么 是超码 包含候选码 因此 中一定包含主属性 否则 设 是候选码 有 R 由于 那么 R 即 是超码 包含候选码 由于 是候选码 即 不能单独构成候选码 因此 中一定包含主属性 第三范式 3NF 仅仅是码 注意 3NF的第3个条件不要求 中的每个属性必须包含在r R 的一个候选码中 因此 当r R 有多个候选码时 中的每个属性可以包含在r R 的不同候选码中 总之 非主属性对候选码的部分依赖问题在2NF中解决了 而非主属性对候选码的传递依赖问题由3NF来解决 即不允许非主属性起决定使用 仅仅是码 例5 23 r R r A B C F AB C C A r R 的候选码为AB或BC 由 例5 19 和 例5 21 可知 r R 3NF 但r R BCNF 3NF与BCNF比较 BCNF比3NF严格 BCNF要求所有的非平凡函数依赖 中的 是超码 而3NF则放松了该约束 允许 不是超码 若关系模式属于BCNF范式就一定属于3NF范式 反之则不一定成立 3NF存在数据冗余和异常问题 而BCNF是基于函数依赖理论能够达到的最好关系模式 BCNF范式分解是无损分解 但不一定是保持依赖分解 而3NF分解既是无损分解 又是保持依赖分解 总结 函数依赖集闭包 Armstrong公理 函数依赖集F下属性集A的闭包 验证 是否在F 中 计算F 判断 是否为r R 的超码 候选码 候选码的计算方法 左 右 无关属性 正则覆盖 无损连接分解 R1 R2是关系r1 R1 或r2 R2 的超码 保持依赖分解 F1 F2 Fn F BCNF F 中非平凡函数依赖的决定属性集 都包含候选码 不存在任何属性 包括主属性和非主属性 对候选码的部分依赖和传递依赖 以及主属性之间的传递依赖 模式分解 是无损连接分解 可能不是保持依赖分解 3NF 允许存在主属性对候选码的传递依赖和部分依赖 模式分解 是无损连接分解 且是保持依赖分解 第5章关系数据理论及求精 数据库系统原理与设计 第2版 志存高远 脚踏实地 勇于探索 目录 范式 问题提出 函数依赖定义 函数依赖理论 数据库模式求精 模式分解算法 5 6 5 5 模式分解方法 数据库设计目标为 基于函数依赖 BCNF无损连接保持依赖如果不能同时达到这3个目标 就需要根据实际应用需求在BCNF和3NF中做出选择 主要模式分解算法BCNF分解3NF分解 BCNF分解 设r R 为关系模式 r R BCNF 若非平凡函数依赖 违反了BCNF的函数依赖条件 即 不是超码 则将r R 分解为r1 R1 和r2 R2 其中 R1 F1 如果 则 是候选码R2 R 如果 则R2 R 若r2 R2 不属于BCNF 则继续分解下去 直到所有结果模式都为BCNF BCNF分解举例 例5 24 r R r A B C F AB C C A 判断关系模式r R 是否属于BCNF范式 如果不是 则进行BCNF分解 例5 21 已经证明r R BCNF 因为候选码为AB或BC 所以C A的决定属性C不是超码 按上述算法 r R 可分解为r1 R1 r1 A C F1 C A 该关系r1 R1 中 C是候选码r2 R2 r2 B C F2 该关系r2 R2 中 BC是候选码分解后的r1 R1 和r2 R2 都属于BCNF 不需再做分解 注意 F中的函数依赖关系AB C 在分解后丢失了 BCNF分解算法 BCNF分解算法的形式化描述如下 result R done false 计算F while notdone doif ri Ri BCNFif F Ri Ri F result result Ri Ri elsedone true 图5 15BCNF分解算法 是Ri上的一个非平凡函数依赖 不是Ri的超码 第一次循环时 ri Ri 就是r R 如果 则该属性集为Ri BCNF分解举例 例5 25 r R r A B C D G H F A BC DG H D A r R 是否属于BCNF范式 如果不是 则进行BCNF分解 r R BCNF 因为候选码为DG 所以A BC的决定属性A不是超码 按上述算法 r R 可分解为r1 R1 r1 A B C F1 A BC A是候选码r2 R2 r2 A D G H F2 DG H D A DG是候选码r2 R2 BCNF 因为D A的决定属性D不是超码 按上述算法 r2 R2 可分解为r21 R21 r21 D A F21 D A D是候选码r22 R22 r22 D G H F22 DG H DG是候选码最后 r1 A B C r21 D A 和r22 D G H 都属于BCNF BCNF分解举例 例5 26 r R r A B C D G H F AB GH CD GH B A D B 关系模式r R 是否属于BCNF范式 如果不是 则进行BCNF分解 r R BCNF 因为AB GH的决定属性AB不是超码 r R 可分解为 r1 R1 r1 A B G H F1 AB GH AB是候选码r2 R2 r2 A B C D F2 B A D B CD候选码 丢失CD GH r2 R2 BCNF B A的决定属性B不是超码 r2 R2 可分解为 r21 R21 r21 B A F21 B A B是候选码r22 R22 r22 B C D F22 D B CD是候选码r22 R22 BCNF D B的决定属性D不是超码 r22 R22 分解为 r221 R221 r221 D B F221 D B D是候选码r222 R222 r222 C D F222 CD是候选码最后 r1 A B G H r21 B A r221 D B 和r222 C D 都属于BCNF CD是候选码 BCNF分解举例 例 r R r A B C D G H F AB GH CD GH D B r R 是否属于BCNF范式 如果不是 则进行BCNF分解 r R BCNF 因为AB GH的决定属性AB不是超码 r R 可分解为 r1 R1 r1 A B G H F1 AB GH AB是候选码r2 R2 r2 A B C D F2 D B ACD是候选码 丢失函数依赖CD GH r2 R2 BCNF D B的决定属性D不是超码 r2 R2 可分解为 r21 R21 r21 D B F21 D B D是候选码r22 R22 r22 A C D F22 ACD是候选码最后 r1 A B G H r21 D B 和r22 A C D 都属于BCNF ACD是候选码 BCNF分解 上述算法得到的分解不仅是BCNF分解 而且是无损分解 但可能不是保持函数依赖分解 算法中使用的函数依赖集是F 而不是F 用该算法生成的BCNF分解不是唯一的 3NF分解算法 3NF分解算法形式化描述如下 计算F的一个正则覆盖Fc i 0 foreach Fcdoif Rj j 1 2 i i i 1 Ri if没有任何Rj j 1 2 i 包含r R 的候选码i i 1 Ri r R 的任一候选码 return R1 R2 Ri 图5 163NF分解算法 3NF分解 对3NF分解算法做如下说明 该算法能保证3NF分解是无损连接分解和保持依赖分解 该算法是基于F的正则覆盖Fc中的函数依赖集进行的 一方面正则覆盖可能有多个 另一方面算法执行的结果是依赖于Fc中函数依赖的考虑顺序 因此分解结果可能不唯一 3NF分解举例 例 r R r A B C D G H Fc A BC DG H D A 判断r R 是否属于3NF范式 如果不是 则进行3NF分解 由于Fc中存在部分依赖和传递依赖 故r R 3NF 可根据3NF分解算法将r R 分解成满足3NF的关系模式 步骤1 根据上述三个函数依赖依次进行分解得 r1 R1 r1 A B C Fc1 A BC A是候选码r2 R2 r2 D G H Fc2 DG H DG是候选码r3 R3 r3 D A Fc3 D A D是候选码步骤2 由于r R 的候选码DG已被r2 D G H 包含 故分解结束 因此 r R 的分解结果为r1 A B C r2 D G H 和r3 D A 它们都属于3NF DG是候选码 3NF分解举例 例5 28 r R r A B C D G H F AB GH CD GH B A D B r R 是否属于3NF范式 如果不是 则进行3NF分解 计算Fc Fc B AGH D B AB GH中的A是左无关属性 因为在F下有B ABGH 去掉无关属性A后 F B GH CD GH B A D B CD GH中的C是左无关属性 因为在F下有D DBAGH 去掉无关属性C后 F B GH D GH B A D B D GH中的G是右无关属性 因为在F 下D DBAGH 去掉无关属性G后 F B GH D H B A D B 合并左边相同依赖后 F B AGH D BH D BH中的H是右无关属性 因为在F 下D DBAGH 去掉无关属性H后 Fc B AGH D B CD是候选码 3NF分解举例 例5 28 r R r A B C D G H F AB GH CD GH B A D B r R 是否属于3NF范式 如果不是 则进行3NF分解 计算Fc Fc B AGH D B AB GH中的A是左无关属性 因为在F下有B ABGH 去掉无关属性A后 F B GH CD GH B A D B CD GH中的C是左无关属性 因为在F下有D DBAGH 去掉无关属性C后 F B GH D GH B A D B D GH中的G是右无关属性 因为在F 下D DBAGH 去掉无关属性G后 F B GH D H B A D B 合并左边相同依赖后 F B AGH D BH D BH中的H是右无关属性 因为在F 下D DBAGH 去掉无关属性H后 Fc B AGH D B CD是候选码 r R 3NF 因为存在部分和传递函数依赖 r R 可分解为 r1 R1 r1 B A G H Fc1 B AGH B是候选码r2 R2 r2 D B Fc2 D B D是候选码 由于r R 的候选码CD没有被r1或r2包含 故增加如下关系 r3 R3 r3 C D Fc3 CD是候选码 最后 r1 B A G H r2 D B 和r3 C D 都属于3NF 目录 范式 问题提出 函数依赖定义 函数依赖理论 数据库模式求精 模式分解算法 5 6 5 5 模式求精的必要性 E R图设计是一个复杂且
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字的由来和演变
- 云南省曲靖市民族中学2024-2025学年高一上学期期中检测化学试卷(含答案)
- 内蒙古鄂尔多斯市西四旗2024-2025学年高一下学期7月期末考试生物试卷(含答案)
- 福建省漳州第一中学2024-2025学年高二下学期期末考试化学试题(含答案)
- 年眼科护士工作总结
- 虚拟现实技术在娱乐产业的运用
- 餐饮连锁经营模式成功案例分享
- 2025年桥梁维护养护合同
- 2025餐馆股份转让协议合同样本
- 永顺县应急知识培训课件学校
- 教师副高职称答辩题库【3篇】
- 一只窝囊的大老虎第二课时
- 房屋建筑工程监理规划(范本-附带监理细则内容)
- 公司境外佣金业务管理办法
- 规章制度编写格式规范
- 屏幕尺寸换算表
- 金属技术监督管理制度
- 建筑行业材料员培训课件
- 佐贺的超级阿嬷亲子阅读单
- 企业工会制度大全
- NB-T 10316-2019 风电场动态无功补偿装置并网性能测试规范
评论
0/150
提交评论