函数依赖:
定义:R(U)是在属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能关系r,r中的不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或者Y函数依赖X,记作X--->Y。
单纯的概念有点难以理解,通过例子1:属性集U,关系模式R(U),子集X,Y,可能关系r1。
可以理解为X能唯一确定Y,则X--->Y。常用为主键------>其他属性
函数依赖和三范式
函数依赖的分类:完全依赖,部分依赖,传递依赖。
完全依赖和一范式
完全依赖:X--->Y。Y只能有X推到出来
例子2:选课关系(学号,课程号,成绩)
(学号,课程号)--->成绩
一范式:主要确定属性的原子性,每个属性不可再分。
例子3:职工号,姓名,电话号码组成一个表(电话号码有包括手机号,家庭号码)
修改方法:1、新建一个表,职工号为主键,添加手机号和家庭号码两个属性。
2、强制只能选择一个号码属性。
二范式消除部分依赖
部分依赖:X--->Y Y除了能有X推到出来外还可以有其他属性推到出来。
例子4:选课关系(学号,课程号,成绩,课程名)
(学号,课程号)--->课程名, 课程号--->课程名
二范式:非主键属性完全依赖主键,二范式的作用主要是消除部分依赖。
例子4可以改为两个关系模式:选课关系(学号,课程号,成绩,课程名)
课程关系(课程号,课程名)
主键是组合属性的时候容易出现部分依赖,主键是单个属性的时候只要符合第一范式就会符合第二范式。
三范式消除传递依赖
传递依赖:X--->Y 、Y--->Z 则X--->Z
例子5:选课关系(学号,姓名,专业号,专业名,所属学院号)
学号--->专业号,专业号--->专业名。
三范式:在符合二范式的基础上,没有非主属性传递依赖函数。
例子5解决方法:转换成两个关系模式,消除传递依赖。
选课关系(学号,姓名,成绩)
专业关系(专业号,专业名,所属学院号)
三范式作为数据库设计的一个标准,确保非主键属性都完全依赖主键属性。