1 / 89

第五章 关系数据库理论 ( 8 学时)

数据库原理和语言. 第五章 关系数据库理论 ( 8 学时). 2005 年 8 月 6 日. 主讲:谢益武 副教授 大连海事大学计算机科学与技术学院 研究方向:数据库与信息系统 电话: 84729625 Email : xieyiwu@.dlmu.edu.cn. 章节目录. §5.1 问题的提出 §5.2 规范化( Normalization ) § 5.3 数据依赖的公理系统 § 5.4 关系模式的分解. §5.1 问题的提出 . 在现实世界中,进行 数据处理 或进行数据库应用系统开发的 关键 是:

river
Download Presentation

第五章 关系数据库理论 ( 8 学时)

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. 数据库原理和语言 第五章关系数据库理论(8学时) 2005年8月6日 主讲:谢益武 副教授 大连海事大学计算机科学与技术学院 研究方向:数据库与信息系统 电话:84729625 Email:xieyiwu@.dlmu.edu.cn

  2. 章节目录 §5.1 问题的提出 §5.2 规范化(Normalization) §5.3 数据依赖的公理系统 §5.4 关系模式的分解

  3. §5.1 问题的提出 • 在现实世界中,进行数据处理或进行数据库应用系统开发的关键是: • 针对一个具体问题应该如何构造一个适合于它的数据模式。 • 即构造合理的数据逻辑结构这就需要理论指导。 • 常用的数据模型有:层次、网状、关系模型。 采用关系模型的理由: • 关系模型有严格数学理论基础 • 关系模型可以向别的数据模型转换 实际应用中主要的数据模型

  4. 关系数据理论(规范化理论)是关系数据库的理论基础,是关系数据库设计指南。关系数据理论(规范化理论)是关系数据库的理论基础,是关系数据库设计指南。 • 数据库逻辑设计有力工具关系数据库的规范化理论。 • 虽然是以关系模型为背景,但是它对于一般的数据库设计同样具有理论上的意义。 • 关系模式: R(U,D,dom,F)一个五元组 • 其中: • 影响关系模式涉及合理性的主要因素为U和F,即: • 属性 • 属性间依赖关系, 所以,可以简化为R(U,F); • U上每个属性必须是原子值; • F是属性组U上的数据依赖; • D为中属性所来自的“域”(域名集合); • dom为属性向域的映射集合。

  5. 属性间的数据依赖关系:数据依赖是数据库理论中最主要的组成部分,是数据库模式的理论基础。是现实世界中属性间相互联系的抽象,它表示数据间存在的一种限制或制约关系。 • 是一种语义体现; • 根据人们对事物的理解判定依赖关系。 • 数据依赖的(非形式的)概念(P170) • 是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。 • 数据依赖类型 • 函数依赖(Functional Dependency,简称FD) • 多值依赖(Multivalued Dependency,简称MVD) • 连接依赖 • 函数依赖是最重要的一种数据依赖,极为普遍存在。 • 就象自变量x确定之后,相应的函数值f(x)也就唯一地确定了一样。 • 如果属性间的函数依赖关系描述不好,或组织得不合理,将会出现异常情况(例如P171): • 插入异常;冗余太大-更新异常;删除异常。 重要

  6. Student SNo SDept MN CName G • 实例:(P171)现在要建立一个数据库(一个关系模式),来描述学生(Student)的一些情况。 • 其中,面临的对象有: • 学生(用学号SNo描述) • 系(用系名SDept描述) • 系负责人(用其姓名MN描述) • 课程(用课程名CName描述) • 成绩(G) • 如果用一个关系模式来描述,则得到: • U={ SNo,SName,SDept,MN,CName,G }

  7. G SNO CName SDept MN • 由现实世界可得知: • 一个系有若干学生,但一个学生只属于一个系。 • 一个系只有一名(正职)负责人。 • 一个学生可以选修多门课程,每门课程有若干学生选修。 • 每个学生学习每一门课程都有一个成绩。 • 于是,得到属性组U上的一组函数依赖: F={ SNOSDept,SDept MN,(SNO,CName) G } 图5.1 Student关系的函数依赖图示

  8. Student SNo SDept MN CName G G SNO CName SDept MN • 这样的关系模式,有如下三个毛病: (1)插入异常:该插入的信息无法插入 • 如果一个系刚成立,尚无学生, • 或者虽然有学生,但尚未安排课程, • 那么就无法把这个系及其负责人的信息存入数据库。 (2)删除异常:不该删除的信息被删除了 • 如果某个系的学生全部毕业了, • 在删除该系学生选修课的同时,把这个系及其负责人的信息也丢了。 (3)冗余太大: • 每一个系负责人的姓名要与该系每一个学生的每门功课的成绩出现的次数一样多, • 这样,一方面浪费存储,另一方面系统要付出很大的代价来维护数据库的完整性, • 比如某系负责人更换后,就必须逐一修改每一个元组。 • 若只考虑函数依赖这一种数据依赖,就得到了: • 一个描述学校的数据库模式S<U,F>, • 它由一个单一的关系模式构成。

  9. S<U,F> 表达模式 S SNo SDept Student 分解为 SG SNo SDept MN CName G SNo CName G D SDept MN • 改进:把这个单一的模式改造,分成3个关系模式。 • S(SNo,SDept,SNoSDept) • SG(SNo,CName,G,(SNo,CName) G) • D(SDept,MN,SDeptMN) • 异常产生原因:出现这种情况,是由于 • 模式中的函数依赖存在不好的性质; • 或者说,数据模式组织不合理。 • 效果: • 这三个模式都不会发生异常 • 插入异常 • 删除异常等毛病 • 冗余也得到控制。

  10. §5.2 规范化(Normalization) • 作用:规范化理论使数据库设计方法走向完备。 • 起源:1971年E.F.Codd提出。 • 在讨论规范理论之前,了解函数依赖。 §5.2.1 函数依赖(1NF--BCNF) §5.2.2 码:用函数依赖的概念来定义码。 §5.2.3 范式(Normal Form)-NF §5.2.4 多值依赖(4NF) §5.2.5 4NF

  11. §5.2.1 函数依赖 • 定义1:设R(U)是属性集U上的关系模式。X,Y是U的子集, • 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组t,s • 在X值上相等,即t[X]=s[X]; • 而在Y上的属性值不等,即t[Y]s[Y]; • 则称X函数确定Y或Y函数依赖于X,记作:XY。 • 另一种定义为: 设R(U)是属性集U上的一个关系模式, X, YU。 对R(U)中任意一个可能关系r中的任意两个元组t和s, 若有t[X]=s[X], 则有t[Y]=s[Y], 就称“X函数决定Y”, 或“Y函数依赖于X”。 • X称为决定因子, 或称为函数依赖的左部, Y称为函数依赖的右部。

  12. f(xi) Y X xi y xj f(xj) • 或者换个通俗的话 • 对于X的一个值,Y只有唯一的值与之对应 • 则称 XY。 x f(x)=y

  13. 对函数依赖, 我们需要强调几点: (1) 当我们确定关系模式R中的某个函数依赖时, 是指R的所有可能关系r都必须满足这个函数依赖; 反之, 如果R中只要有一个关系r不满足这个函数依赖, 我们就认为R不存在这个函数依赖。 (2) 当在确定一个关系模式中的函数依赖时, 我们只能从属性含义上加以说明, 而不能在数学上加以证明。 (3) 只有数据库设计者才能决定是否存在某种函数依赖。 这就使得数据库系统可以根据设计者的意图来维护数据库的完整性。

  14. 几个记号和术语: • XY,但Y X,则称X  Y是非平凡的函数依赖。(一般情况下不讨论非平凡依赖)。 • X  Y,但Y  X ,则称X  Y是平凡的函数依赖。 • 若X  Y,则X叫做决定因素(Determinant)。 • 若X  Y,Y  X,则记作XY。 • 若Y不函数依赖于X,记作X Y。 • 函数依赖是一个语义范畴的概念,如: • 姓名 年龄,姓名 出生日期,姓名 籍贯 • 只能在姓名唯一的假设前提下成立。

  15. 在R(U)中,如果XY,并且对于X的任何一个真子集X’,都有X’Y,则称Y对X完全函数依赖。记作:在R(U)中,如果XY,并且对于X的任何一个真子集X’,都有X’Y,则称Y对X完全函数依赖。记作: 定义2:完全函数依赖和部分函数依赖 • 若Y不完全函数依赖于X(只依赖于X的一部分),则称Y对X部分函数依赖,记作: • 在实际的一个关系表中: • 如果主码只有一个属性,则基本上是完全函数依赖。 • 如果主码有若干个属性组成,则可能存在部分依赖,也可能是完全依赖。

  16. SNo SName SDept SAge 在关系S 学号 姓名 系 年龄 S( SNO,SName, SDept,SAge)中 实例1 存在以下函数依赖: lSNo  SName (若无重名) lSNo SDept lSNo SAge

  17. SNo CNo G 在关系S 学号 课程号 成绩 S( SNO,CNo, G)中 SNO CNo SNO G F G ( SNO ,CNo) 是决定因素 实例2 • 在这里,单个属性不能作为决定因素,但属性的组合可以作为决定因素,即:

  18. 实例3 • PJTP(*工程项目编号,工程项目名称,*零件编号,零件名,规格型号,数量 ) • (零件编号,工程编号) 工程名称 • 工程编号 工程名称 • (工程编号,零件编号) 零件名称,规格型号,数量 • 零件编号 零件名 • 零件编号 规格型号 • (工程编号,零件编号) 数量

  19. 定义3: 传递依赖 • R(U)中,如果XY(Y X), Y X , Y  Z , X  Z ,则称Z对X传递函数依赖。 • 加上条件Y X是因为如果Y  X ,则 XY,实际上是 ,是直接函数依赖,而不是传递函数依赖。 例如: 关系模式R={A, B, C, D}, 其上的函数依赖集F={A→B, B→C, A→C, AB→D}, 则A→C为传递函数依赖。

  20. §5.2.2 码:用函数依赖的概念来定义码。 • 定义4:设K为R(U,F)中属性或属性组合。 • 若 ,则K为R的候选码(Candidate Key), • 若候选码为多个,则选定其中的一个为主码(Primary Key)。 • 主属性(Prime attribute) • 非主属性(Non Prime attribute)或非码属性(Non-Key-attribute) • 全码(all key):关系模式中,整个属性组是码。 • 定义5: 外码 • 关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则X是R的外部码(Foreign Key),也称外码。

  21. §5.2.3 范式(Normal Form)-NF • 必要性:关系数据库中 • 关系要满足一定要求; • 满足不同层次要求的关系,为不同范式。 • 范式的提出: • 1971~1972年,E.F.Codd系统地提出1NF,2NF,3NF。 • 1974年,Codd和Boyce又共同提出了一个新范式BCNF。 • 1976年,Fagin提出4NF。 • 后来又提出了5NF。 • 范式表示关系的某一级别, • 现在把范式理解为符合某一种级别关系模式的集合, • 则R为第几范式,可写成 R  xNF。

  22. 1NF 2NF 3NF BCNF 4NF 5NF 各种范式之间有如下关系 • 一个高一级的范式,必须属于低一级范式。 • 一个低一级范式的关系模式,通过模式分解,可以转化为若干个高一级范式的关系模式集合。 这种过程就叫规范化。

  23. 工号 姓名 出生时间 …… 受奖情况 获奖时间 奖励称号 获奖等级 奖励部门 复合数据项 一、1NF 第一范式 复合数据项 • 关系模式中每一个分量,必须是不可分的数据项, • 满足了这个条件的关系模式,就属于第一范式(1NF),即: • 关系模式中不存在复合数据项; • 是平坦的数据结构。 • 例,职工档案(非规范的)

  24. 工号 工号 工号 工号 姓名 姓名 出生时间 获奖时间 姓名 …… 出生时间 获奖时间1 奖励称号 奖励称号1 …… 出生时间 获奖等级1 获奖等级 奖励部门1 获奖时间 获奖时间2 …… 奖励部门 奖励称号2 奖励称号 获奖等级2 奖励部门2 获奖时间3 获奖等级 奖励称号3 获奖等级3 奖励部门 奖励部门3 获奖时间4 奖励称号4 获奖等级4 奖励部门4 …… …… 001 张三 19650403 19920401 市劳模 大连市 001 张三 19650403 19920401 科技进步奖 一等 大连市 表A. 横向冗余法 001 张三 19650403 19920401 科学发明 一等 辽宁省 …… …… …… …… 表B. 纵向冗余法 化为1NF,将上述关系拆开成两个表,即把组合项拿出来单独形成一个表: 人们在处理这个问题的时候,不规范的作法是------采用: (1)横向冗余法(例如,表A) (2)纵向冗余法(例如,表B)

  25. 二、2NF 第二范式 • 从2NF开始,判断非主属性与主属性间关系 • 定义6:若R  1NF,且每一个非码属性完全函数依赖于码,则R 2NF。 • 书中例子: P175 ,非2NF。 • 2NF定义:如果一个规范化的数据结构,它所有的非关键字数据元素都完全函数依赖于整个关键字,我们称它是第二规范化形式(Second Normal Form)的数据结构,简称第二范式(2NF)。 • 推论1:根据第二规范化形式的定义,如果一个规范化的数据结构,其关键字仅由一个数据元素组成,那么它必然属于2NF。 • 推论2:如果关键字是由若干个属性组成,要判别所有的非关键字与关键字的函数依赖关系,如果存在部分依赖关系,则不属于2NF。

  26. 实例一 例如: 描述一个在校大学生的学习情况涉及以下一些属性: 学号(Sno)、 姓名(Sname)、性别(Sex)、 系别(Sdept)、 学籍类型(SL)、 专业(Spec)、 班级(SC)、 课程号(Cno)、 课程名(Cname)、 学期数(T)、 学分(Credit)和成绩(G), 该关系模式R(U,F) 属性集合表示为U={Sno, Sname, Sex, ID, Sdept, SL, Spec, SC, Cno, Cname, T, Credit, G}。 函数依赖集合F={Sno→Sname, Sno→Sex, Sno→Sdept, Sno→SL, Sno→Spec, Sno→SC, Cno→Cname , Cno→T, Cno→Credit, (Sno, Cno)→G} 显然,该关系模式的码为(Sno,Cno)--可丛常识判断,也可从F中求解侯选码。 R∈1NF---所有的属性都是最小的不可分的数据项 R∈2NF---存在非码属性对码的部分函数依赖关系

  27. 实例一 R中存在以下几个问题: (1) 冗余。 (2) 插入异常。 假如新增一门课程, 其Cno=1011, Cname=多媒体技术, 学分=3, 但因此课程还没有学生选修, 则这样的元组不能插入R的关系中。 (3) 删除异常。 假如有一门课(如课程号为C5)目前只有一位学生选修了, 但这位学生又不选了, 那么 C5这个数据项就要删除。 由于C5是主属性, 删除了C5, 整个元组就不存在了, 也必须删除, 但这样也把不应该删除的信息删除了, 造成删除异常。

  28. 实例一 将R化为2NF---消除部分函数依赖关系。 R可分解为以下三个表: R1(U1,F1) ----码为Sno 属于2NF U1={Sno, Sname, Sex, ID, Sdept, SL, Spec, SC} F1={Sno→Sname, Sno→Sex, Sno→Sdept, Sno→SL, Sno→Spec, Sno→SC} R2(U2,F2) ----码为Cno 属于2NF U2={Cno, Cname, T, Credit} F2={Cno→Cname , Cno→T, Cno→Credit} R3(U3,F3) ----码为(Sno,Cno) 属于2NF U3={Sno, Cno,G} F3={(Sno, Cno)→G} 对属性集进行分解,对函数依赖集进行分解

  29. 实例二:配件-供应商-库存关系,语义描述: • “配件编号”代表每种配件(名称和规格); • 每种配件的“库存量”、“价格”、“库存占用资金”还和“供应商”有关(即:同一配件,可由不同的供应商供应,其价格、库存量及库存占用资金因供应商不同而不同) 。 • 同一供应商可供应多种配件。 • 这个关系达到1NF,因其所有的属性都是不可分的。用“配件编号+供应商名称”作关键字。根据语义描述,非关键字与关键字有如下的函数依赖关系。 • 函数依赖关系: • 配件编号→配件名称 • 配件编号→规格 • 供应商名称→供应商地址 • 配件编号+供应商名称→价格 • 配件编号+供应商名称→库存量, • 配件编号+供应商名称→库存占用资金 • 因为“配件名称”、“规格”和“供应商地址”并不完全函数依赖于整个关键字。存在非主属性部分函数依赖于关键字,所以它不属于2NF。 *配件编号 配件名称 规格 *供应商名称 供应商地址 价格(厂价) 库存量 库存占用资金

  30. 对这样一个数据结构,可能会有如下毛病。 ① 插入异常 如果汽车配件公司准备引进一种新的汽车配件,知道它的名称和规格,给它规定一个配件编号,想把这种新配件插入到“配件–供应商–库存”数据存贮中去,但是配件公司还没有决定由哪一家供应商提供这种新配件,也就是还没有该配件的供应商数据和库存数据;就无法插入这项新配件的数据(关键字不能为空) 。 ② 删除异常 如果汽车配件公司和某家供应商断绝了业务关系,就没有必要再保存这家供应商的数据,而这家供应商恰恰是某种(或某几种)配件的唯一供应商,当把这家供应商的数据删除时,整个元组也就不存在了,那么这种(或这几种)配件的数据也都丢失了,把不应该删除的数据也删除了。 ③ 修改异常 如果某家供应商的地址发生了变化,需要修改这家供应商的地址;但是有上百种或上千种配件是由这家供应商提供的,那么要逐个地修改“供应商地址”,与这家供应商有关的元组一条也不能遗漏,这就为修改带来了麻烦。

  31. 配件库存配件供应商 * 配件编号 * 配件编号 * 供应商名称 * 供应商名称 配件名称 供应商地址 价格 (厂价) 规格 库存量 库存占用资金 解决办法 • 显然,规范化以后,属于第一范式的数据结构还是一个不好的数据结构,需要进一步把它转换成第二规范化形式,办法是: • 对于关键字由若干个数据元素组成的数据结构,必须确保所有的非关键字数据元素完全函数依赖于整个关键字; • 必要时把它分解成若干个都是属于2NF的数据结构,使每一个数据结构中的非关键字数据元素都完全函数依赖于整个关键字。 • 因此,“配件-供应商-库存”可以分解成三个数据结构,“配件”,“供应商”和“配件库存”,它们都是属于2NF的数据结构。

  32. 三、3NF 第三范式 • 定义7: 关系模式R<U,F>中若不存在这样的码X,属性组Y及非主属性Z(Z Y ),使得 X Y,(Y X ), YZ成立,则称 • R<U,F>  3NF; • 即关系模式中不存在部分依赖和传递依赖关系。 • 传递依赖的定义:假设A,B,C分别是同一个数据结构R中的三个数据元素,或分别是R中若干个数据元素的集合。如果C函数依赖于B,而B又函数依赖于A,那么C也函数依赖于A,我们称“C传递依赖于A”,说明数据结构R中存在着传递依赖关系。 若A→B B→C 则A→C • 3NF定义:如果一个属于第二范式的数据结构,它所有的非关键字数据元素都是彼此函数独立的,换句话说,在所有的非关键字数据元素之间,不存在函数依赖关系,那么我们称它是第三规范化形式(Third Normal Form)的数据结构,简称第三范式(3NF)。

  33. 配件库存配件库存 * 配件编号 * 配件编号 * 供应商名称 * 供应商名称 价格 (厂价) 价格 (厂价) 库存量 库存量 库存占用资金 3NF 例1 • “配件库存”已经是第二范式的数据结构,但是存在着传递依赖关系。 • 因为“库存占用资金”函数依赖于“库存量”和“价格”,这三个数据元素都是属于非关键字域,而“库存量”和“价格”都完全函数依赖于整个关键字;因此“库存占用资金”传递依赖于关键字。 • 这说明在非关键字域中,存在着冗余的数据元素,因为已知“库存量”和“价格”,就必然能够计算出“库存占用资金”,它作为一个数据元素存在,为修改“配件库存”带来不方便,每当修改,“库存量”的时候,就必须修改“库存占用资金”,显然是不合理的。

  34. 例2 • 有若干项工程,每项工程都有规定的完工日期,每项工程要由若干人完成,每一个职工只能承担一项工程,每一个职工有固定的工资。 • 那么,可以设计一个称为“分派职工任务”的数据模式。 分派职工任务职工—工程工程 * 职工编号 * 职工编号 * 工程代号 姓名 姓名 工程名称 工资 工资 工程完成日期 工程代号 工程代号 工程名称 工程完成日期 分解成3NF

  35. 在一个单位里,不同的职工可能同名同姓,因此只有“职工编号”才能唯一地标识出这个职工及其所承担的工程,显然“分派职工任务”是第二范式的数据结构。在一个单位里,不同的职工可能同名同姓,因此只有“职工编号”才能唯一地标识出这个职工及其所承担的工程,显然“分派职工任务”是第二范式的数据结构。 • “分派职工任务”数据结构中存在着传递依赖关系,因为“工程完成日期”函数依赖于“工程代号”,而“工程代号”依赖于关键字“职工编号”。 • 如果又增加一个新的工程项目,规定了它的代号和完成日期,但是还没有指派由哪些职工承担,这时就无法插入这项新工程的数据。 • 即使是第二范式,“分派职工任务”的数据结构也仍然存在上述插入、删除、修改等异常问题,产生的原因就是存在着传递依赖关系。解决的办法是: • Q去掉传递依赖关系; • Q必要时,分解成若干个第三规范化形式的数据结构。 • 对于“分派职工任务”数据结构,可以把它分解成两个第三范式的数据结构,“职工—工程”和“工程”。

  36. 四、BCNF( Boyce Codd Normal Form) • 由Boyce 和Codd 1974年共同提出,对3NF进行扩充、修正。 • 定义8:关系模式R<U,F>  1NF, • 若XY且Y!X 时 X 必含有码, • 则R<U,F> BCNF。 • 即:关系R中所有的决定因素都是候选码。 • 由BCNF的定义可以得出结论:一个满足BCNF的关系模式有 • 所有的非主属性,对每一个码,都是完全函数依赖。 • 所有的主(码)属性,对每一个不包含它的码,也是完全函数依赖。 • 没有任何属性完全函数依赖于非码的任何一组属性。

  37. 对BCNF的分析 • 3NF和BCNF,是在函数依赖的条件下,对模式分解所能达到的分离程度的“测度”。 • BCNF实现了彻底的分离,已消除了插入、删除异常。 • 3NF的分离的“不彻底性”,表现在可能存在主属性对码的部分依赖和传递依赖。

  38. S T S J J T 图5.6 STJ中的函数依赖 实例 • 非BCNF范式:关系模式STJ(S,T,J)中, • S是学生、 T是老师、 J是课程; • 每个老师只教一门课; • 每门课都有若干老师; • 学生选定一门课就对应一个老师。 • 由语义可以得到如下的函数依赖: • ( S,J )T; • ( S,T )J; • T  J。 • 函数依赖图示(见右图5.6)

  39.  BCNF 实例分析 • 这里, ( S,J )和 ( S,T )都是候选码。 • STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。 • 但是, STJ不是BCNF。因为T是决定因素,而T不是码。 • 经BCNF分解后,得到: • ST(S,T) • TJ(T,J )

  40. 由于是X的子集 可断之 ,但 证明若R3NF,则R必属于2NF,R2NF(用反证法) • 证明: 设R3NF,R2NF 则 属性A,候选码X, A, X  R 与题设R3NF矛盾 这样在R中就有非主属性A,传递依赖候选码X

  41. §5.2.4 多值依赖 实例:教员,课程,参考书(P178-P179) 定义: • 设R(U)是属性集U上的一个关系模式,X、Y是U的子集, • 若对R(U)的任一关系r,对于X的一个给定值x,存在Y的一组值与其对应, • 而Y的这组值又不可以任何方式与U-X-Y中的属性值z相关, • 那么就是说,Y多值依赖于X,记为: XY。 • 当Y的这组值个数为1时, XY就成了XY。

  42. U yi1 yi2 yim Y X f (xi) = (m>1) yi1 yi2 xi yim z Z=U-X-Y XY 多值依赖的示意图

  43. 多值依赖的另一个等价的形式化的定义 • 在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中) , • 这里X、Y是U的子集,Z=U-X-Y。 • 称Y多值依赖于X,即为 XY。 • 若XY,而Z=U-X-Y=(为空),则称 XY为平凡的多值依赖。

  44. 多值依赖的性质 1. 多值依赖具有对称性,即:若XY,则XZ,其中Z=U-X-Y。 2. 多值依赖的传递性,若XY,YZ,则 XZ-Y。 3. 函数依赖可以看作是多值依赖的特殊情况, 即若XY,则XY。 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 Y–Z。

  45. 多值依赖与函数依赖的区别 • 多值依赖的有效性,与属性集的范围有关。 • 若XY在U上成立,则在W(XYWU) 上一定成立。 • 反之则不然。即:XY在W(WU)上成立,在U上不一定成立。 • 在大范围上成立,在小范围上不一定成立。 • 若函数依赖XY在R(U)上成立,则对于任何Y’Y均有XY’成立。 • 而多值依赖XY若在R(U)上成立,却不能断言对于任何Y’Y有XY’成立。

  46. §5.2.5 4NF • 定义:关系模式R<U,F>1NF,如果对于R的每个非平凡多值依赖XY(Y !X),X都含有码,则称 R<U,F> 4NF。 • 4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。 • 因为根据定义,对于 每一个非平凡的对值依赖XY,X都含有候选码,于是就有XY。 • 所以4NF所允许的非平凡的多值依赖实际上是函数依赖。 • 函数依赖和多值依赖,是两种重要的数据依赖: • 如果只考虑函数依赖,则BCNF方式是规范化程度最高; • 如果考虑多值依赖,则属于4NF的关系模式是规范化程度最高的了。

  47. 非4NF关系模式的例子 • 关系模式WSC(仓库W,保管员S,产品C); • 语义:一个仓库可以有多个保管员在里工作,一个仓库可以存放多种产品。 • WS; • WC; 它们都是 非平凡的多值依赖。 因为U-W-S=C,U-W-C = S不为空。 • 而关系的码为(W,S,C), • W不是码, •  WSR  4NF • 分解为: • WS(W,S) • WC(W,C) 两个4NF模式

  48. 非规范化模式 1NF 2NF 3NF BCNF 4NF 各种范式及规范化过程(1) 所有的属性必须是不可分的数据项 消除非主属性对码的部分函数依赖 消除非主属性对码的部分函数依赖和传递函数依赖 消除主属性对码的部分和传递函数依赖 消除非平凡且非函数依赖的多值依赖

  49. 非规范的数据结构 (含有重复出现的组项) 第一规范形式 (没有重复组项的数据结构) 第二规范化形式 (所有的非关键字数据元素都完全函数依赖于整个关键字) 第三规范化形式 (所有的非关键字数据元素都完全函数依赖于整个关键字,并且只依赖于整个关键字) 各种范式及规范化过程(2) 第一步:(去掉重复的组项)把所有的非平坦的数据结构若干二维表形式的数据结构,指定一个或若干个数据元素作为关键字,唯一标识出每个元组,关键字应该由尽可能少的数据元素组成。 第二步:(去掉部分依赖)如果关键字由不止一个的数元素组成,必须确保每一个非关键字数据元素完全函数依赖于整个关键字。否则,在必要的时候,通过分解的办法转换成若干个满足这种要求的数据结构。 第三步:(去掉传递依赖)检查所有的非关键字数据元素是否彼此独立,如果不是,消除传递依赖关系,去掉冗余的数据元素,或通过分解的办法,转换换成若干个满足这种要求的数据结构。

  50. 小结 • 关系模式属性间存在数据依赖,数据依赖是语义体现R<U,F> • 数据依赖可分为多种,如: • 函数依赖, • 多值依赖, • 连接依赖。 • 进行数据设计一般只考虑: • 函数依赖; • 多值依赖。 • 关系模式中属性间数据依赖要满足一定的程度要求-范式。满足不同程度要求的为不同范式。

More Related