第六章 关系模式的规范化理论

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档