本章主要讨论如何判断一个关系模式是否是好的关系模式,以及如何将不好的关系模式分解成好的关系模式,并保证所得到的关系模式仍能表达原来的语义
一、关系模式设计的问题
数据冗余问题,数据更新问题,数据插入问题,数据删除问题
解决上述问题的方法就是进行模式分解,即把一个关系模式分解成两个或多个关系模式,在分解的过程中消除那些“不良”的函数依赖,从而获得良好的关系模式
二、函数依赖
1.基本概念
对学生关系模式Student(Sno,Sname,Sdept,Sage)有以下函数依赖关系
SnoSname,Sno
Sdept,Sno
Sage
对学生选课关系模式SC(Sno,Cno,Grade)有以下函数依赖关系
(Sno,Cno)Grade
2.一些术语和符号
如果XY,但Y不包含X,则称X
Y是非平凡的函数依赖
如果Y包含X,则 XY是平凡的函数依赖
Y不函数依赖于X,则记住X不决定Y
如果 XY,则称X为决定因子
如果XY ,且Y
X,则X
Y
如果XY,且对于X的一个任意真子集X‘都有X’不决定Y,则称Y 完全函数依赖于X,记X
Y;
如果X‘Y成立则称Y部分函数依赖于X,记X
Y
如果XY,Y
Z,则称Z传递函数依赖于X
关系模式SC(Sno,Sname,Cno,Credit,Grade),各属性分别为:学号,姓名,课程号,学分,成绩,主键为(Sno,Cno)
SnoSname 姓名函数依赖于学号
(Sno,Cno) Sname 姓名部分函数依赖于学号和课程号
(Sno,Cno)Grade 成绩完全函数依赖于学号和课程号
关系模式S(Sno,Sname,Sdept,Dept_master),各属性分别文:学号,姓名,所在系,系主任,主键为Sno
Sno Sname 姓名完全函数依赖于学号
由于有:
Sno Sdept 所在系完全函数依赖于学号
Sdept Dept_master 系主任完全函数依赖于所在系
因此:
SnoDept_master 系主任传递函数依赖于学号
三、函数依赖的推理规则
找到一种方法来减少函数依赖集合的规模,我们要讨论的是用一种方法来帮助确定关系的完整函数依赖集合,并讨论如何得到一个表示完整函数依赖的最小函数依赖集
1.Armstrong公理
(1)自反律
若YX
U,则 X
Y在R上成立。即一组属性决定它的所有子集。
例如,对关系模式SC(Sno,Sname,Cno,,Credit,Grade),有:
(Sno,Cno) Cno 和 (Sno,Cno)
Sno
(2)增广律
若 XY在R上成立,且Z
U,则XZ
YZ在R上也成立
(3)传递律
若 XY和 Y
Z在R上成立,则 X
Z在R上也成立
2.Armstrong公理推论
(1)合并规则
若 XY和 X
Z在R上成立,则 X
YZ在R上也成立
(2)分解规则
若 XY和 Z
Y在R上成立,则 X
Z在R上也成立
(3)伪传递规则
若 XY和 W
Z在R上成立,则 XW
Z在R上也成立
(4)复合规则
若 XY和 W
Z在R上成立,则 XW
YZ在R上也成立