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

  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

−→−S name)(S no, 、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)三个关系模式中,存在以下关键字:

Sname

Sno

Sno f−→

Dname

(Age

,

)

,

,

Cno

Cname

Cno f−→

e

,

)

(con

_

Pr

,

)

(

,

score

Sno f−→

Cno

所以,Sno、Cno和(Sno,Cno)分别是关系模式S、C和S_C的关键字。

Sno

Sname

Sname

(Age

Sno p−→

Dname

,

,

)

,

,

(

)

Sname

Dname

Sno

Sno p−→

(Age

Dname

)

,

,

,

,

(

)

所以,(Sno,Sname)和(Sno,Dname)都不是关键字,而是超关键字。

3 函数依赖的公理系统

(1) 函数依赖的逻辑蕴涵

例如在上述的传递函数依赖中,由X→Y,Y→Z,推导出X→Z,这可以表示为:{X→Y,Y→Z}⊨X→Z 其中: ⊨表示逻辑蕴涵。

相关文档
最新文档