一、引言
函数依赖是关系模式中属性与属性之间存在的一种重要数据依赖
1、将关系模式R的模式结构改为
R(SNO,CNO,SN,SD,DD,GRADE)
并对属性列进行重命名
R(学生学号,课程编号,学生姓名,所在院,院长,成绩)
2、创建表R
create table r(
sNo char(12),
cNo char(3),
sN varchar(6),
sD varchar(16),
dD varchar(6),
grade decimal(3,1),
primary key(sNo,cNo)
);
3、插入数据
insert into r
select s.sNo,sC.cNo,sN,sD,dD,grade
from s,d,sC
where s.sNo=sC.sNo and s.sD=d.dN
select 学生学号=sNo,课程编号=cNo,学生姓名=sN,所在院=sD,院长=dD,成绩=grade
from r
4、新的关系模式R依旧存在着数据冗余、更新异常、数据不一致问题
(1)数据冗余
- 存在学生姓名、所在学院、院长信息的冗余
(2)更新异常
- 无法插入一个学生的信息、一个院的信息
- 无法删除学生的选课信息,或同时把该学生的信息也删除掉
(3)数据不一致
- 修改学生所在院和院长的信息,会出现院相同院长不同,或不同的院有相同的院长
5、属性与属性之间的函数依赖
二、函数依赖的定义
设有关系模式R,其属性集为 U, 。对于R中的任意一个可能的关系实例r(R)及
其中任意两个元组,若,则,称Y函数依赖于X,或X函数决定Y,
记为。
若,,记为。
若Y不函数依赖于X,记为。
三、关系模式R中的函数依赖
学生选课数据库数据间的关系是:
- 每名学生有一个学号,并属于一个学院
- 每个院有多名学生,只有一名院长
- 一个学生可以选修多门课程,每门课程可以由多名学生选修
- 每名学生选修每一门课程有一个成绩
F是R的属性集中的一组函数依赖
四、平凡函数依赖
例如:以下三个表达式都是平凡函数依赖
(学生学号,学生姓名)学生姓名
(学生学号,所在院)学生学号
(学生学号,所在院)所在院
二、完全与部分函数依赖
四、传递函数依赖
五、候选键
1、定义
2、使用完全函数依赖对关系模式中的候选键进行定义:
六、 总结
关系模式中的属性间的部分依赖和传递依赖才是导致关系模式出现数据冗余、更新异常及数据不一
致问题的根源,为解决这一问题,Codd提出了范式的概念