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

上传人:b****6 文档编号:5176451 上传时间:2022-12-13 格式:DOCX 页数:18 大小:109.38KB
下载 相关 举报
第六章 关系模式规范化理论.docx_第1页
第1页 / 共18页
第六章 关系模式规范化理论.docx_第2页
第2页 / 共18页
第六章 关系模式规范化理论.docx_第3页
第3页 / 共18页
第六章 关系模式规范化理论.docx_第4页
第4页 / 共18页
第六章 关系模式规范化理论.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

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

《第六章 关系模式规范化理论.docx》由会员分享,可在线阅读,更多相关《第六章 关系模式规范化理论.docx(18页珍藏版)》请在冰豆网上搜索。

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

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

第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>模式设计方法----自动化设计的基础

二,函数依赖(FunctionalDependency,FD)

1.函数依赖的定义:

(还有非函数的依赖?

,什么是函数?

给出一个值能唯一确定另外一个值?

映射:

一对一,多对一,一对多?

定义:

函数依赖是指一个或一组属性可以(唯一)决定其它属性的值。

数学的语言:

设有关系模式R(U),其中U={A1,A2,…,An}是关系的属性全集,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,记为

例如,在上例关系S中,

是完全函数依赖;

是部分函数依赖。

在属性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,且满足

,则称K为R的关键字。

一个包含了关键字的属性集合也能够函数决定(但不是完全函数决定,而是部分决定)属性全集,我们把这种包含了关键字的属性集合称为超关键字(SuperKey)。

例如,在上例的S(Sno,Sname,Dname,Age)、C(Cno,Cname,Pre_cno)、S_C(Sno,Cno,Score)三个关系模式中,存在以下关键字:

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

所以,(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

例:

Sno→Dname,Dname→Dtel,则:

Sno→Dtel

FX→Y

函数依赖集F的闭包F+

定义6.7:

函数依赖集F所逻辑蕴涵的函数依赖的全体称为为F的闭包(Closure),记为F+,即F+={X→Y|F⊨X→Y}

例如,有关系R(X,Y,Z),它的函数依赖集F={X→Y,Y→Z},则其闭包F+为:

(2)Armstrong公理系统

1)独立推理规则

即下面给出的Armstrong公理的三条推理规则是彼此独立的。

A1:

自反律(Reflexivity)

如果Y⊆X,则X→Y成立,这是一个平凡函数依赖。

根据A1可以推出X→Ф、U→X等平凡函数依赖(因为Ф⊆X⊆U)、XY→X。

A2:

增广律(Augmentation)

如果X→Y,且Z⊆W,则XW→YZ成立。

根据A2可以推出XW→Y、XZ→YZ或XW→YW、X→XY、XY→X等。

A3:

传递律(Transitivity)

 如果X→Y且Y→Z,则X→Z成立

其他推理规则

推论1:

合并规则(TheUnionRule)

{X→Y,X→Z}⊨X→YZ

推论2:

分解规则(TheDecompositionRule)

如果X→Y,Z⊆Y,则X→Z成立;(X→YZ),X→Y,X→Z

推论3:

伪传递规则(ThePseudoTransitivityRule)

{X→Y,WY→Z}⊨XW→Z

证:

(1)X→Y⊨X→XY    (A2增广律)

    X→Z⊨ XY→YZ  (A2增广律)

    由上可得X→YZ   (A3传递律)

(2)Z⊆Y⊨Y→Z    (A1自反律)

 X→Y        (给定条件)

由上可得X→Z     (A3传递律)

(3)X→Y⊨WX→WY   (A2增广律)

  WY→Z       (给定条件)

由上可得XW→Z    (A3传递律)

例6.2:

设有关系模式R(A,B,C,D,E)及其上的函数依赖集F={AB→CD,A→B,D→E},求证F必蕴涵A→E。

证明:

∵A→B(给定条件)

∴A→AB(A2增广律)

∵AB→CD(给定条件)

∴A→CD(A3传递律)

∴A→C,A→D(分解规则)

∵D→E(给定条件)

∴A→E(A3传递律)

证毕。

 

一个重要定理

定理6.1:

若Ai(i=1,2,…,n)是关系模式R的属性,

则X→(A1,A2,…,An)成立的充分必要条件是X→Ai均成立

证明由分解和合并规则容易得到。

推论6.1X是候选键的充分必要条件是X→每个属性Ai。

例:

1.现有如下关系模式:

R(A#,B#,C,D,E),R上存在的FD有A#B#→E,B#→C,C→D,求R的一个候选键。

解:

A#B#→E,得A#B#→A#B#E

又B#→C,得A#B#→A#B#CE

又C→D,得A#B#→A#B#CDE

因此A#B#是候选键。

也可以这样做:

先由B#→C出发,得B#→B#CD,还少一个A#,再加一个A#即可,得

A#B#→A#B#CDE

2.设有关系模式R(A,B,C,D),F是R上成立的FD集,F={D→A,D→B},试写出关系模式R的候选键,并说明理由。

方法一

因为:

D→A,D→B(已知)得D→AB

D→D,得D→ABD,但D!

→C

而CD→C(A1自反律),

我们有,CD→ABCD,即CD→U

因此,CD为候选键。

也可以这样做:

方法二

D→A,D→B(已知)

D→D,但D!

→C

而CD→C(A1自反律),

我们有,CD→A,CD→B,CD→C,CD→D,由合并规则知:

CD→ABCD

因此,CD为候选键。

3.关系模式R(A,B,C,D)的函数依赖集为F={AC→B},求R的候选键

解:

因为AC→B

所以AC→ACB

所以ACD→ABCD

所以R的候选码是ACD

4.有关系模式R(A,B,C,D,E,F)其函数依赖集为F={E→D,C→B,CE→F,B→A},判断CE为候选键。

CE→D(A2增广律)

CE→B

CE→C(A1自反律)

CE→E

CE→F(给定条件)

CE→C,C→B,则CE→B,又B→A,所以有:

CE→A

由合并规则,即CE→U,为候选键

按方法一

由E→D知:

E→DE

由C→B知:

C→BC,又B→A,知:

C→ABC

由合并规则知:

CE→ABCDE,为候选键

5.设关系R={A,B,C,D,E,F},其函数依赖集F={A→B,C→D,D→E,E→F,F→C},求R的所有候选键。

解:

C→D,C→E,C→E,C→C,C!

→A,把A加上,则有

AC→A,AC→B,…AC→U

因此AC为候选键。

又因为:

D→E,D→F,D→C,D→D,同理:

AD为候选键。

同理可得:

AE,AF也为候选键。

综上所述,R的候选码为:

AC,AD,AE,AF。

关系模式R(A,B,C,D)的函数依赖集为F={AC→B},则R的候选键为()。

6.关系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X,X→Z,Y→W}。

关系模式R的候选建是什么?

解法:

从函数依赖集出发,把所有属性分为4类

1、L类:

全部出现在函数依赖的左半部

2、R:

全部出现在函数依赖的右半部

3、LR:

出现在函数依赖的左右两边

4、N:

不出现在函数依赖中

可能成为候选键的有L类,LR类和N类

对于L类,求出它的闭包,若包含所有属性,则说明其为候选键,且为唯一候选键。

对于LR类,求出其闭包,若包含所有属性,则为候选键,若不包含,在找出其中一个属性结合。

对于N类,直接加至候选键即可。

L:

R:

Z

LR:

W,X,Y

N:

先排除Z

在LR中,W的闭包为{W,Y,Z,X}

X的闭包为{X,Z}

Y闭包为{Y,W}

WX的闭包为{W,X,Y,Z}

WY的闭包为{W,Y}

XY的闭包为{X,Y,Z,W}

WXY的闭包为{X,Z,Y,W}

由此可见,可能的键为{W,WZ,XY,XYW},去掉多余的属性,得:

W,XY为候选键。

F+很大,一般不去求它。

在我们求候选键时,主要用到的是属性集的闭包。

属性集闭包

定义6.8(属性集闭包):

设有关系模式R(U),U={A1,A2,…,An},X是U的子集,F是U上的一个函数依赖集,则属性集X关于函数依赖集F的闭包定义为:

={Ai|Ai∈U,且X→Ai可用阿氏公理从F推出}

即:

属性(集)闭包是那些由X用阿氏公理从F推出的属性组成的集合。

例:

设关系模式R(A,B,C)的函数依赖集为F={A→B,B→C},分别求A、B、C的闭包。

解:

若X=A,

∵A→B,B→C  (给定条件)

∴A→C(A2传递律)

∵A→A(A1自反律)

∴={A,B,C}(据定义)

若X=B

∵B→B(A1自反律)

B→C(给定条件)

∴={B,C}(据定义)

若X=C,

C→C(自反律)

∴={C}(据定义)

定理6.2:

设F是关系模式R(U)上的函数依赖集,U是属性全集,X,Y⊆U,则函数依赖X→Y是用阿氏公理从F推出的,充分必要条件是Y⊆;

反之,能用阿氏公理从F推出的所有X→Y的Y都在中。

证明:

这个定理告诉我们,只要Y⊆,则必有X→Y。

于是,一个函数依赖X→Y能否用阿氏公理从F推出的问题,就变成判断Y是否为子集的问题。

属性集的闭包计算

算法6.1:

求属性集X(X⊆U)关于U上的函数依赖集F的闭包 。

输入:

属性全集U,U上的函数依赖集F,以及属性集X⊆U。

输出:

X关于F的闭包。

方法:

根据下列步骤计算一系列属性集合X(0),X

(1),…

(1)令X(0)=X,i=0;

(2)求属性集

/*在F中寻找满足条件V⊆X(i)的所有函数依赖V→W,并记属性W的并集为B*/

(3)X(i+1)=X(i)∪B

(4)判断X(i+1)=X(i)吗?

(4)若X(i+1)≠X(i),则用i+1取代i,返回

(2);

(5)若X(i+1)=X(i),则=X(i),结束。

定理6.3Armstrong公理是正确的,完备的。

完备性:

F所蕴涵的每个函数依赖都可由Armstrong公理从F可推出。

3函数依赖集的等价和覆盖

定义6.9(函数依赖集的等价、覆盖):

设F和G是关系R(U)上的两个依赖集,若F+=G+,则称F与G等价,记为F=G。

也可以称F覆盖G,或G覆盖F;也可说F与G相互覆盖。

检查两个函数依赖集F和G是否等价的方法是:

第一步:

检查F中的每个函数依赖是否属于G+,若全部满足,则F⊆G+。

如若有X→Y∈F,则计算,如果Y⊆,则X→Y∈G+;

第二步:

同第一步,检查是否G⊆F+;

第三步:

如果F⊆G+,且G⊆F+,则F与G等价。

由此可见,F和G等价的充分必要条件是:

F⊆G+,且G⊆F+。

引理6.1:

设G是一个函数依赖集,且其中所有依赖的右部都只有一个属性,则G覆盖任一左部与G(左部)相同的函数依赖集。

证明:

构造G={X→A|X→Y∈F且A∈Y}

   由A∈Y,X→Y∈F根据分解规则导出,从而等到G⊆F+。

   反之,如果Y=A1A2…An,而且X→A1,X→A2,…X→An在G中可根据合并律等到F⊆G+。

 由此可见,F与G等价,即F被G覆盖。

一个函数依赖集F可能有若干个与其等价的函数依赖集,我们可以从中选择一个较好以便应用的函数依赖集。

标准至少是:

所有函数依赖均独立,即该函数依赖集中不存在这样的函数依赖,它可由这个集合中的别的函数依赖推导出来。

表示最简单,即每个函数依赖的右部为单个属性,左部最简单。

定义6.10(最小函数依赖集):

函数依赖集F如果满足下列条件,则称F为最小函数覆盖,记为Fmin:

(1)F中每一个函数依赖的右部都是单个属性。

(2)对F中任一函数依赖X→A,F-{X→A}都不与F等价。

(3)对于F中的任一函数依赖X→A,{F-{X→A}}∪{Z→A}都不与F等价,其中Z为X的任一子集。

求函数依赖集F的最小覆盖的方法是:

(1)检查F中的每个函数依赖X→A,若A=A1,A2,…,Ak,则根据分解规则,用X→Ai(i=1,2,…,k)取代X→A。

(2)检查F中的每个函数依赖X→A,令G=F-{X→A},

若有A∈,则从F中去掉此函数依赖。

(3)检查F中各函数依赖X→A,设X=B1,B2,…,Bm,检查Bi,

当A∈时,即以X-Bi替换X。

例6.5:

求下列函数依赖集的最小覆盖:

 F={AH→C,C→A,EH→C,CH→D,D→EG,CG→DH,CE→AG,ACD→H}。

解:

(1)用分解规则将F中的所有依赖的右部变成单个属性,可以得到以下11个函数依赖:

  AH→C,C→A,CH→D,ACD→H(给定)

 C→E,C→G          (由C→EG分解得到)

 EH→C             (给定)

 CG→H,CG→D         (由CG→DH分解得到)

 CE→A,CE→G         (由CE→AG分解得到)

(2)根据阿氏公理去掉F中的冗余依赖

由于从C→A可推出CE→A,从C→A、CG→D、ACD→H推出CG→H,因此CE→A和CG→H是冗余,可从F删除。

 (3)用所含属性较少的依赖代替所含属性较多的依赖。

由于C→A,ACD→H中A是冗余属性,因此,可用CD→H代替ACD→H,故删除ACD→H。

最后得到F的最小覆盖为:

F={AH→C,C→A,CH→D,CD→H,C→E,C→G,EH→C,CG→D,CE→G}

 

6.5关系模式的规范化

一.什么是范式(NormalForms)

构造数据库必须遵循一定的规则,满足特定规则的模式称为范式。

R(U|F)

1.一个关系满足某个范式所规定的一系列条件时,它就属于该范式。

2.可以用规范化要求来设计数据库。

3.也可验证设计结果的合理性,用其来指导优化数据库设计过程。

4.关系规范化条件可分为几级,每级称为一个范式,记为第xNF(NormalForms)

1NF2NF3NFBCNF,4NF5NF

级别越高,条件越严格

5NF(4NF(BCNF(3NF(2NF(1NF.

5.范式是衡量模式优劣的标准,范式表达了模式中数据依赖之间应满足的联系。

如果关系模式R是3NF,那么R上成立的非平凡FD都应该左边是超键或右边是非主属性。

如果关系模式R是BCNF,那么R上成立的非平凡的FD都应该左边是超键。

范式的级别越高,其数据冗余和操作异常现象就越少

二,第1范式(1NF)

1.如果一个关系模式R的每个属性的域都只包含单纯值,而不是一些值的集合或元组,则称关系是第1范式,记为R∈1NF.

或:

如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式

(理解:

每个元组的每个属性只含有一个单纯值,即要求属性是原子的。

这是关系模式的基本要求,条件是最松的,只要你不硬把两个属性塞到一个字段中去。

如果不满足1NF,就不是关系数据库。

字段1

字段2

字段3

属性1

属性2

2.把一个非规范化的模式变为1NF有两种方法:

1)把不含单纯值的属性分解为多个属性,使它们仅含有单纯值。

例:

通讯方式:

电话、手机,邮编,地址等。

通讯方式分开:

电话,邮编,通讯地址。

例:

NameFirstName,LastName

2)把关系模式分解,并使每个关系都符合1NF

学生(学生信息)

3.原子属性:

列的:

每个字段不再分割成多个属性。

行的:

每个元组在表可只出现一次。

4.第一范式中一般情况下都会存在着数据的冗余和异常现象,因此关系模式需要进一步的规范化。

三,第2范式(2NF)

它是在1NF的基础上建立起来的。

如果关系模式R∈1NF,且它的任一非主属性都完全函数依赖于任一候选关键字,则称R满足第2范式,记为R∈2NF.

(理解:

不存在非主属性对关键字的部分函数依赖)

例:

学生(sno,cno,score,credit)是否属于2NF?

(sno,cno)-fScore

但(sno,cno)-pcredit

因此,学生∈1NF。

例:

S(sno,sname,age,dname,dtel)

因为每个非主属性对关键字S都是完全函数依赖的,S∈2NF.

由上例,2NF依然可有过多冗余(dtel)。

继续分解,提高条件。

四,第3范式(3NF)

如果R∈2NF,且每一个非主属性不传递依赖于任一候选关键字,则称R∈3NF.

(理解:

任一属性不依赖于其它非主属性)

例:

S(sno,sname,age,dname,dtel)

因为dtel属性对关键字sno是传递函数依赖的,S!

∈3NF.

分解:

S(sno,sname,age,dname)

D(dname,dtel)

注:

一个R∈3NF它个每个非主属性既不部分依赖也不传递依赖于候选关键字。

例:

S_C_G(U)是第几范式?

2NF

五,BCNF(Boyce-Codd)

在第3范式的基础上,设有R,及其函数依赖集F,X和A是R的属性集合,且A!

(X,如果只要R满足XA,X就包含R的一个候选关键字,则称R满足BCNF,记为:

理解:

表可不存在任何字段(主属性和非主属性)对任一候选关键字的完全函数依赖则符合BCNF.

(1)所有非主属性A对键都是完全函数依赖的(R∈2NF)。

(2)没有属性完全函数依赖于非键的任何属性组(R∈3NF)。

(3)所有主属性对不包含它的键是完全函数依赖的(新增加条件)。

例,模式S(NAME,SEX,BIRTH,ADDR,DNAME)的主属性为:

NAME,SEX,BIRTH和ADDR,候选关键字为:

(NAME,SEX)、(NAME,BIRTH)以及(NAME,ADDR)。

定义中的A为(ADDR,DNAME)。

显然有:

例6.13:

关系模式STC(SNO,TNO,CNO),SNO表示学号,TNO表示教师编号,CNO表示课程号。

每一个教师只教一门课,每门课有若干教师,某一个学生选定某门课,就对应一个固定教师。

试判断ST的最高范式。

解 由语义可得到如下的函数依赖:

(SNO,CNO)→TNO,(SNO,TNO)→CNO,TNO→CNO

这里(SNO,CNO),(SNO,TNO)都是侯选关键字。

因为没有任何非主属性对侯选关键字部分依赖,所以STC∈2NF。

没有任何非主属性对侯选关键字传递依赖,所以STC∈3NF。

但在F中有TNO→CNO,而TNO不包含侯选关键字,所以STC不是BCNF关系

这里我们可以将STC(SNO,TNO,CNO)分解成ST(SNO,TNO)和TC(TNO,CNO),它们都是BCNF。

范式之间的关系

例:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1