第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→ageSno→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 −→−Snam e)(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为R的关键字。
K f−→一个包含了关键字的属性集合也能够函数决定( 但不是完全函数决定, 而是部分决定) 属性全集, 我们把这种包含了关键字的属性集合称为超关键字(Super Key)。
例如, 在上例的S( Sno, Sname, Dname, Age) 、C( Cno,Cname,Pre_cno) 、S_C( Sno, Cno, Score) 三个关系模式中, 存在以下关键字:SnameSnoSno f−→−Dname(Age,),,CnoCnameCno f−→e−,)(con_Pr,)(,−scoreCnoSno f−→因此, Sno、Cno和( Sno, Cno) 分别是关系模式S、C和S_C的关键字。
SnameDnameSno−(AgeSnameSno p−→,,,))(,DnameSnoSnameSno p−→(Age−Dname(,),,),因此, (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 →DtelF X →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 +为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→=+YZ YZ XYZ XYZ XYZ XZ XYZ XY XYZX Z YZ YZ XYZ YZ XZ YZ XY YZ X Y YZ XZ XYZ XZ XZ XZ XY XZX YZ XY XYZ XY XZ XY XY XY X YZ Y Z XYZ Z XZ Z XY Z X Z Y Y XYZ Y XZ Y XY Y X Z Z Y Y X XYZ X XZ X XY X X Z Y XYZ XZ XY X 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: 合并规则(The Union Rule){X→Y, X→Z}⊨X→YZ推论2: 分解规则(The Decomposition Rule)如果X→Y, Z ⊆Y, 则X→Z成立; ( X→YZ) , X→Y, X→Z 推论3: 伪传递规则(The Pseudo Transitivity Rule){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( 给定条件)。