第六章 关系模式的规范化理论
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章关系模式的规范化理论
关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合。规范化设计理论对关系数据库结构的设计起着重要的作用。
关系模型有严格的数学理论基础,因此人们就以关系模型为作为讨论对象,形成了数据库逻辑设计的一个有力工具――关系数据库的规范化理论。
本章内容
(1)关系模式的冗余和异常问题。
(2)FD的定义、逻辑蕴涵、闭包、推理规则、与关键码的联系;平凡的FD;属性集的闭包;推理规则的正确性和完备性;FD集的等价;最小依赖集。
(3)无损分解的定义、性质、测试;保持依赖集的分解。
(4)关系模式的范式:1NF,2NF,3NF,BCNF。分解成2NF、3NF模式集的算法。
(5)MVD、4NF、5NF的定义。
一,关系模式设计中的问题
1.什么是好的数据库
构建好的,合适的数据库模式,是数据库设计的基本问题
a) 体现客观世界的信息
b) 无过度的冗余
c) 无插入异常
d) 无删除异常
e) 无更新复杂
如书上的S_C_G关系。
假设需要设计一个学生学习情况数据库StuDB。
下面我们以模式S_C_G(Sno,Sname,Dname,Age,Cno,Cname,Score,Pre_cno)为例来说明该模式存在的问题。下表是其一个实例。
3冗余度大:每选一门课,他本人信息和有关课程信息都要重复一次。
4插入异常:插入一门课,若没学生选修,则不能把该课程插入表中。
5删除异常:如S11号学生的删除,有一门只有他选,会造成课程的丢失。
6更新复杂:更新一个人的信息,则要同时更新很多条记录。还有更新选修课时也存在这样的情况。
2.异常的原因:
数据信赖的约束
3.解决方法:
数据库设计的规范化:分解,每个相对的独立,依赖关系比较单纯,如分解为3NF 我们采用分解的方法,将上述S_C_G分解成以下三个模式:
S(Sno,Sname,age,Dname)
C(Cno,Cname,Pre_cno)
S_C(Sno,Cno,Score)
4.规范化设计理论包括三个内容:
i> 数据信赖---- 核心,研究数据之间的联系
ii> 范式---- 关系模式的标准
iii> 模式设计方法---- 自动化设计的基础
二,函数依赖(Functional Dependency,FD)
1. 函数依赖的定义:(还有非函数的依赖?,什么是函数?给出一个值能唯一确
定另外一个值?映射:一对一,多对一,一对多?)
定义:函数依赖是指一个或一组属性可以(唯一)决定其它属性的值。
数学的语言:
设有关系模式R(U),其中U={A1,A2,…,A n}是关系的属性全集,X、Y是U的属性子集,设t和u是关系R上的任意两个元组,如果t和u在X的投影t[X]=u[X]推出t[Y]=u[Y],即:t[X]=u[X] => t[Y]=u[Y],
则称X 函数决定Y ,或Y 函数依赖于X 。记为X →Y 。
在上述的关系模式S (Sno ,Sname ,age ,Dname )中,存在以下函数依赖:
Sno →age Sno →Dname ...
(Sno,Cno )→Score
... 2. 几种类型的函数依赖
定义6.2(非平凡函数依赖、平凡函数依赖):一个函数依赖X →Y 如果满足Y ⊈X ,则称此函数依赖为非平凡函数依赖,否则称之为平凡函数依赖。
例如X →Φ, X →X , XZ →X 等都是平凡函数依赖。
定义6.3(完全函数依赖、部分函数依赖):设X 、Y 是关系R 的不同属性集,若X →Y (Y 函数依赖于X ),且不存在X’ ⊂X ,使X’→Y ,则称Y 完全函数依
赖于X ,记为Y X f
−→−;(即不存在真子集仍然是函数依赖关系的函数依赖是完全函数依赖)。
否则则称Y 部分函数依赖于X ,记为Y X p
−→−
。
例如,在上例关系S 中, Dname f
−→−Sno 是完全函数依赖;
Dname p −→−Sname)(Sno, 、Dname p
−→−
age)(Sno, 是部分函数依赖。
在属性Y 与X 之间,除了完全函数依赖和部分函数依赖关系等直接函数依赖,还存在间接函数依赖关系。如果在关系S 中增加系的电话号码Dtel ,从而有Sno →Dname, Dname →Dtel ,于是Sno →Dtel 。在这个函数依赖中,Dtel 并不直接依赖于Sno ,是通过中间属性Dname 间接依赖于Sno 。这就是传递函数依赖。
定义6.4(传递函数依赖):设X 、Y 、Z 是关系模式R (U)中的不同的属性集,如果X →Y ,Y →X ,Y →Z ,则称Z 传递依赖于X 。否则,称为非传递函数依赖。
举例说明:
定义6.5 关键字(Key ,候选键):在关系模式R(U)中,若K ⊆U ,且满足U K f
−→−,
则称K 为R 的关键字。
一个包含了关键字的属性集合也能够函数决定(但不是完全函数决定,而是部分决定)属性全集,我们把这种包含了关键字的属性集合称为超关键字(Super Key)。
例如,在上例的S (Sno ,Sname ,Dname ,Age )、C (Cno,Cname,Pre_cno )、S_C (Sno ,Cno ,Score )三个关系模式中,存在以下关键字:
),,,(Age Dname Sname Sno Sno f
−→−
)_Pr ,,(con e Cname Cno Cno f
−→−
score Cno Sno f
−→−),(
所以,Sno 、Cno 和(Sno ,Cno )分别是关系模式S 、C 和S_C 的关键字 。
)
,,,(),(Age Dname Sname Sno Sname Sno p
−→−
),,,(),(Age Dname Sname Sno Dname Sno p
−→−
所以,(Sno ,Sname)和(Sno ,Dname)都不是关键字,而是超关键字。
3 函数依赖的公理系统 (1) 函数依赖的逻辑蕴涵
例如 在上述的传递函数依赖中,由X →Y ,Y →Z ,推导出X →Z ,这可以表示为: {X →Y ,Y →Z }⊨ X →Z 其中: ⊨表示逻辑蕴涵。 一般地,函数依赖的逻辑蕴涵定义如下:
定义6.6(逻辑蕴涵):设F 是由关系模式R(U)满足的一个函数依赖集,X →Y 是R 的一个函数依赖,且不包含在F ,如果满足F 中所有函数依赖的任一具体关系r ,也满足X →Y ,则称函数依赖集F 逻辑地蕴涵函数依赖X →Y ,或称X →Y 可从F 推出。可表示为: F ⊨X →Y