第四章_关系数据库的模式设计
一、关系模式的设计问题(识记)
关系数据库是以关系模型为基础的数据库,它利用关系来描述现实世界。一个关系既可以用来描述一个实体及其属性,也可以用来描述实体间的联系。关系实质上就是一张二维表,表的行称为元组,列称为属性。
关系模式是用来定义关系的,这里的关系模式我们可以简单地理解为一个表的结构,一个关系数据库包含一组关系,也就是包含一组二维表,这些二维表结构体的集合就构成数据库的模式(也可以理解为数据库的结构)。
关系数据库设计理论包括三个方面内容:数据依赖、范式、模式设计方法。核心内容是数据依赖。
泛关系模式:把现实问题的所有属性组成一个关系模式R(U),这个关系模式就称为泛关系模式。
数据库模式:把泛关系模式用一组关系模式的集合ρ来表示时,这个ρ就是数据库模式。
下面我们总结一下关系模式的相关内容从"大"到"小"的排列
泛关系模式→数据库模式→关系数据库→表结构→关系模式实例(表)→记录(行、列.)
关系模式的存储异常:数据冗余、更新异常、插入异常和删除异常
二、函数依赖(FD)
1、函数依赖的定义(领会):设有关系模式R(A1,A2,...An)或简记为R(U),X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X] 导致t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X,记为X→Y。X→Y为模式R的一个函数依赖。
这个定义可以这样理解:有一张设计好的二维表,X,Y是表的某些列(可以是一列,也可以是多列),若在表中的第t1行,和第t2行上的X值相等,那么必有t1行和t2行上的Y值也相等,这就是说Y函数依赖于X。如下图所示:
A1A2A3栏目名(X)课程A6A7网站名(Y)
……………………
t1晓津专栏数据库原理计算机自考
………自考试卷………计算机自考
t2晓津专栏数据结构计算机自考
………自考试卷………计算机自考
t3晓津专栏面向对象计算机自考
………自考试卷………计算机自考
在表中,凡栏目名相同的,对应的网站名也必是相同的,则此时说
栏目名函数决定网站名,或"网站名"函数依赖于"栏目名"。但是反过来不一定,网站名相同时并不一定栏目名相同,所以这里的Y→X是不成立的。
要特别注意的是,在这张表中,任何一行的关系均应符合上述条件,如果有一行不符合函数依赖的条件,则函数依赖对于这个关系就不成立。
还有应该了解的是,函数依赖是否成立是不可证明的,只能通过属性的含义来判断,上述表是一个关系实例,可以一条条进行验证,但是对于模式设计来说,开始时并没有数据插入,我们只能从属性的含义出发,如这个关系模式不仅是指一个站点,而是包括所有站点,则有可能出现相同的栏目名而网站名不是一样的情况,那么"栏目名→网站名"这个函数依赖就不成立了。
上述例子可对照课本理论进行领会。
2、函数依赖的逻辑蕴涵(识记)
设F是关系模式R的一个函数依赖集,X,Y是R的属性子集,如果从F中的函数依赖能够推出X→Y,则称F逻辑蕴涵X→Y,记为F|=X→Y.
如前面的例子,如果还有一属性"网址(Z)",且网站名是唯一的,那么,"网站名→网址" 成立,同时已知
"专栏名→网站名"成立,根据我们对事实的掌握,可知 "专栏名→网址" 也是成立的。所以在这里,设F={网站名(Y)→网址(Z),专栏名(X)→网站名(Y)},则F逻辑蕴涵
"专栏名(X)→网址(Z)"。
而函数依赖的闭包F+是指被F逻辑蕴涵的函数依赖的全体构成的集合。
3、键和FD的关系(领会)
键是唯一标识实体的属性集。对于键和函数依赖的关系:有两个条件:设关系模式R(A1,A2...An),F是R上的函数依赖集,X是R的一个子集,
(1)X→A1A2...An∈F+ (它的意思是X能够决定唯一的一个元组)
(2)不存在X的真子集Y,使得Y也能决定唯一的一个元组,则X就是R的一个候选键。(它的意思是X能决定唯一的一个元组但又没有多余的属性集)
包含在任何一个候选键中的属性称为主属性,不包含在任何键中的属性为非主属性(非键属性),注意主属性应当包含在候选键中。
4、函数依赖(FD)的推理规则(简单应用)
前面我们举的例子中是以实际经验来确定一个函数依赖的逻辑蕴涵,但是我们需要一个推理规则才能完全确定F或F+的所有函数依赖。
设有关系模式R(U),X,Y,Z,W均是U的子集,F是R上只涉及到U中属性的函数依赖集,推理规则如下:
自反律:如果Y X U,则X→Y在R上成立。
增广律:如果X→Y为F所蕴涵,Z U,则XZ→YZ在R上成立。(XZ表示X∪Z,下同)
传递律:如果X→Y和Y→Z在R上成立,则X→Z在R上成立。
合并律:如果X→Y和X→Z成立,那么X→YZ成立。
伪传递律:如果X→Y和WY→Z成立,那么WX→Z成立。
分解律:如果X→Y和Z Y成立,那么X→Z成立。
5、函数依赖推理规则的完备性(识记)
函数依赖推理规则系统(自反律、增广律和传递律)是完备的。由推理规则的完备性可得到两个重要结论:
属性集X+ 中的每个属性A,都有X→A被F逻辑蕴涵,即X+是所有由F逻辑蕴含X→A的属性A的集合。
F+是所有利用Amstrong推理规则从F导出的函数依赖的集合
6、函数依赖集的等价和覆盖(识记)
在关系模式R(U)上的两个函数依赖集F和G,如果满足F+=G+,则称F和G是等价的,称F和G等价也称F覆盖G或G覆盖F。
每个函数依赖集F都可以被一个右部只有单属性的函数依赖集G所覆盖。
如果函数依赖集合F满足:
(1)F中每一个函数依赖的右部都是单属性;
(2)F中的任一函数依赖X→A,其F-{X→A}是不等价的;
(3)F中的任一函数依赖X→A,Z为X的子集。(F-{X→A})∪{Z→A}与F不等价。
则称F为最小函数依赖集合。
如果函数依赖集F和G等价,并且G是最小集,那么称G是F的一个最小覆盖。
这一段并不要求掌握最小集的求法,但是应当通过其求法理解最小集的概念。
三、关系模式的分解特性
1、模式分解中存在的问题:(识记)
模式分解就是将一个泛关系模式R分解成数据库模式ρ,以ρ代替R的过程。它不仅仅是属性集合的分解,它是对关系模式上的函数依赖集、以及关系模式的当前值分解的具体表现。
分解一个模式有很多方法,但是有的分解会出现失去函数依赖、或出现插入、删除异常等情况,而有的分解则不出现相关问题。
衡量一个分解的标准有三种:分解具有无损联接;分解要保持函数依赖;分解既要保持依赖,又要具有无损联接。
那么什么是无损联接呢?什么又是保持依赖?
2、无损联接的定义和性质(识记)
设R是一关系模式,分解成ρ={R1,R2,...,Rk},F是R上的一个函数依赖集。无损联接就是指R中每一个满足F的关系r(也就是一个关系实例)都有r=πR1(r)|X|πR2(r)...|X|πR3(r),即r为它在Ri上的投影的自然联接。
最简单的理解,也就是说,分解后的关系自然连接后完全等于分解前的关系,则这个分解相对于F是无损联接分解。
设R的分解为ρ={R1,R2},F为R所满足的函数依赖集,则分解ρ具有无损联接性的充分必要条件是:
R1∩R2→(R1-R2)
R1∩R2→(R2-R1)
也就是说,分解后的两个模式的交能决定这两个模式的差集,即R1、R2的公共属性能够函数决定R1或R2中的其他属性,这样的分解就必定是无损联接分解。
3、保持函数依赖的分解(识记)
在分解过程中,要求模式分解的无损联接是必要的,只有无损联接分解才能保证任何一个关系能由它的那些投影进行自然联接得到恢复。
同时,分解关系模式时还应保证关系模式的函数依赖集在分解后仍在数据库模式中保持不变,这就是保持函数依赖的问题。也就是所有分解出的模式所满足的函数依赖的全体应当等价于原模式的函数依赖集。只有这样才能确保整个数据库中数据的语义完整性不受破坏。
四、关系模式的范式(领会)
1、1NF、2NF、3NF、BCNF的定义:
1NF:第一范式。
即关系模式中的属性的值域中每一个值都是不可再分解的值。如果某个数据库模式都是第一范式的,则称该数据库模式是属于第一范式的数据库模式。
比如有一个关系 串讲笔记={作者,课程},若有这样几行记录:
作者课程
晓津数据结构、数据库原理
阿猫网络与通信
这时的第一条记录就表示本关系模式不是1NF的,因为课程中的值域还是可以分解的,它包括了两门课程,如分
为:
作者课程
晓津数据结构
晓津数据库原理
就成为第一范式的关系模式。
2NF:第二范式。
如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称为第二范式模式。
在这里要先了解"非主属性"、"完全函数依赖"、"候选键"这三个名词的含义。
候选键就是指可以唯一决定关系模式R中某元组值且不含有多余属性的属性集。
非主属性也就是非键属性,指关系模式R中不包含在任何建中的属性。
设有函数依赖W→A,若存在X W,有X→A成立,那么称W→A是局部依赖,否则就称W→A是完全函数依赖。
在分析是否为第2范式时,应首先确定候选键,然后把关系模式中的非主属性与键的依赖关系进行考察,是否都为完全函数依赖,如是,则此关系模式为2NF。如果数据库模式中每个关系模式都是2NF的,则此数据库模式属于2NF的数据库模式。
3NF:第三范式。
如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R为第三范式的模式。
这里首先要了解传递依赖的含义: 在关系模式中,如果Y→X,X→A,且X不决定Y和A不属于X,那么Y→A是传递依赖。
注意的是,这里要求非主属性都不传递依赖于候选键。
BCNF:这个范式和第三范式有联系,它是3NF的改进形式。若关系模式R是第一范式,且每个属性都不传递依赖于R的候选键。这种关系模式就是BCNF模式。
纵观四种范式,可以发现它们之间存在如下关系:
BCNF 3NF 2NF 1NF
1NF
↓消去非主属性对键的部分函数依赖
2NF
↓消去非主属性对键的传递函数依赖
3NF
↓消去主属性对键的传递函数依赖
BCNF
5、分解成BCNF模式集的算法(识记)
对于任一关系模式,可找到一个分解达到3NF,且具有无损联接和保持函数依赖性。而对于BCNF分解,则可以保
证无损联接但不一定能保证保持函数依赖集。
无损联接分解成BCNF模式集的算法:
(1)置初值ρ={R};
(2)如果ρ中所有关系模式都是BCNF,则转(4);
(3)如果ρ中有一个关系模式S不是BCNF,则S中必能找到一个函数依赖集X→A有X不是S的键,且A不属于X,设S1=XA,S2=S-A,用分解S1,S2代替S,转(2);
(4)分解结束。输出ρ。
在这个过程中,重点在于(3)步,判断哪个关系不是BCNF,并找到X和A。这里,S的判断用BCNF的定义,而X不是S的键则依靠分析。
6、分解成3NF模式集(识记)
算法:
(1)如果R中的某些属性在F的所有依赖的左边和右边都不出现,那么这些属性可以从R中分出去,单独构成一个关系模式。
(2)如果F中有一个依赖X→A有XA→R,则ρ={R},转(4)
(3)对于F中每一个X→A,构成一个关系模式XA,如果F有有X→A1,X→A2...X→An,则可以用模式XA1A2...An代替n个模式XA1,XA2...XAn;
(4)w分解结束,输入ρ。
这个过程的重点是这一句"对于F中每一个X→A,构成一个关系模式XA",这使我们的分解十分容易,然后依据合并律(合并律:如果X→Y和X→Z成立,那么X→YZ成立)将有关模式合并即得到所需3NF模式。
7、模式设计方法的原则(识记)
关系模式R相对于函数依赖集F分解成数据库模式ρ={R1,R2...Rk},一般具有下面四项特性:
ρ中每个关系模式Ri上应具有某种范式性质(3NF或BCNF)
无损联接性。
保持函数依赖集。
最小性,即ρ中模式个数应最少且模式中属性总数应最少。
一个好的模式设计方法应符合下列三条原则:
表达性
分离性
最小冗余性
8、多值依赖。简单了解一下。