数据库设计是数据库应用领域中的主要研究课题,其任务是在给定的应用环境下,创建满足用户需求且性能良好的数据库模式,建立数据库及其应用系统,使之能有效地存储和管理数据,满足某公司或部门各类用户业务的需求。
数据库设计需要理论指导,关系数据库规范化理论就是数据库设计的一个理论指南。
本章主要讨论关系数据库规范化理论,讨论如何判断一个关系模式是否是好的关系模式,以及如何将不好的关系模式分解成好的关系模式,并保证所得到的关系模式仍能表达原来的语义。
9.1关系模式设计的问题
9.2函数依赖
9.3范式
9.4关系模式的分解准则
9.1关系模式设计的问题
通过例子说明问题
设有学生选课及选课情况的关系模式。
S—SC—C(Sno,Sname,Ssex,Sdept,Cname,Cno,Grade)
由这个表可以发现如下问题:
1.1数据冗余问题
学生基本信息有重复,一个学生修了多少门课,他的基本信息就重复多少遍。
1.2数据更新问题
1.3数据插入问题
若新成立了某个系,并且确定了该系学生的宿舍楼,即已经有了sdept信息,却不能将这个信息插入到S—SC—C表中,因为这个系还没有招生,其Sno和Cno列的值均为空,而Sno和Cno是这个表的主键,不能为空。
1.4数据删除问题
如果学生只选了一门课,之后放弃了,那么应该删除该学生选修此门课程的记录。但由于这个学生只选了一门课,所以删除此学生选课记录的同时也就删除了此学生的其他基本信息。
数据的增、删、改问题统称为操作异常。
如何改造这个关系模式并避免以上种种为题是关系规范化理论要解决的问题,也是我们讨论函数依赖的原因。
解决上述种种问题的方法就是进行模式分解,即把一个关系模式分解成两个或多个关系模式,在分解的过程中消除那些“”不良“的函数依赖,从而获得良好的关系模式。
9.2函数依赖
2.1基本概念
函数 Y=f(X)
例如:省=f(城市) 只要给出一个具体的城市值,就会有唯一的”省“值和它对应,如衡阳市在湖南省,这里”城市“是自变量X,”省“是因变量或函数Y。一般把X函数决定Y,或Y函数依赖于X表示为:X→Y
根据以上讨论可以写出较直观的函数依赖定义,即如果有一个关系模式R(A1,A2,…,An),X和Y为{A1,A2,…,An}的子集,r是R的任一具体关系,那么对于关系r中的任意一个X值,都只有一个Y值与之对应,则称X函数决定Y或Y函数依赖于X。
显然,函数依赖讨论的是属性之间的依赖关系,他说语义范畴的概念,也就是说关系模式的属性之间是否存在函数依赖只与语义有关。
2.2一些术语和符号
设有关系模式R(A1,A2,…,An),X和Y均为{A1,A2,…,An}的子集,则有以下结论:
(1)如果X→Y,但Y不包含与X,则称X→Y是非平凡的函数依赖。如不做特别说明,我们讨论的是非平凡的函数依赖。若Y包含于X,则称X→Y是平凡的函数依赖。
(2)如果X→Y,则称X为决定因子。
(3)如果X→Y,并且Y→X,则记作X⬅➡Y。
(4)如果是X→Y,并且对于X的一个任意真子集X‘都有X’不依赖于Y,则称Y完全函数依赖于X,记作X—f→Y;如果X‘→Y成立,则称Y部分函数依赖于X,记作X—p→Y。
(5)如果X→Y(非平凡函数依赖,并且Y不函数依赖于X)、Y→Z,则称Z传递函数依赖于X。
(6)设 K为关系模式R的一个属性或属性组,若满足:
K—f→A1,K—f→A2,…,K—f→An
则称K为关系模式R的候选键(或候选码)。
2.3函数依赖的推理原则
从已知的函数依赖可以推导出另一些新的函数依赖,这需要一系列推理原则。函数依赖的推理原则最早出现在1974年W.W.Armstrong论文中,因此称这些规则为Armstonrg公理。
1.Armstong公理
(1)自反律
若Y包含于X包含于U,则X→Y在R上成立。即一组属性函数决定它的所有子集。
(2)增广律
若X→Y在R上成立,且Z包含于U,则XZ→YZ在R上页成立。
(3)传递律
若X→Y和Y→Z在R上成立,则X→Z在R上页成立。
2.Armstong公理推论
(1)合并规则
若X→Y和X→Z在R上成立, 则X→YZ在R上也成立。
(2)分解规则
若X→Y和Z包含于Y在R上成立,则X→Z在R上也成立。
(3)伪传递规则
若X→Y和YW→Z在R上成立,则XW→Z在R上也成立。
(4)复合规则
若X→Y和W→Z在R上成立,则XW→YZ在R上也成立。
2.4闭包及候选键求解方法
1.函数依赖集的闭包
在关系模式R(U,F)中,U是R的属性全集,F是R上的一组函数依赖。设X、Y是U的子集,对于关系模式R的任一关系r,如果r满足F,则r满足X→Y,那么称F逻辑蕴涵X→Y,或称函数依赖X→Y可由F导出。
所有被F逻辑蕴涵的函数依赖的全集称为F的闭包,记作F加。
例题:已知关系模式R(A,B,C,D,E,G)及其函数依赖集F:
F={AB→C,C→A,BC→D,ACD→B,D→EG,BE→C,CG→BD,CE→AG}
判断BD→AC是否属于F加。
解:由D→EG,可推出:D→E,BD→BE…………(1)
又由BE→C,C→A,可推出:BE→A,BE→AC (2)
由(1)、(2),可推出BD→AC,因此BD→AC被F所蕴涵,即BD→AC属于F加。
对关系模式R(U,F),应用Armstrong公理系统系统计算F加的过程。
step1:初始,F加=F
step2:对F加中的每个函数依赖f,在f上应用自反性和增广性,将结果加入F加中;对F加中的一对函数依赖f1和f2,如果f1和f2可以使用传递律结合起来,则将结果加入F加中。
step3:重复step2,直到F加不再增大为止。
2.属性集闭包
3.候选键的求解方法
对于给定的关系模式R(A1,A2,…,An)和函数依赖集F,现将R的属性分为如下四类:
(1)L类:仅出现在函数依赖左部的属性。
(2)R类:仅出现在函数依赖右部的属性。
(3)N类:在函数依赖的左部和右部均不出现的属性。
(4)LR类:在函数依赖的左部和右部均出现的属性。
对R中的属性X,可有以下结论:
(1)若X是L类属性,则X一定包含在关系模式R的任何一个候选键中:如X加包含了R的全部属性,则X为关系模式R的唯一候选键。
(2)若X是R类属性,则X不包含在关系模式R的任何一个候选键中。
(3)若X是N类属性,则X一定包含在关系模式R的任何一个候选键中。
(4)若X是LR类属性,则X可能包含在关系模式R的某个候选键中。