基本概念
1.数据依赖
在计算机科学中,数据依赖是指一种状态,当程序结构导致数据引用之前处理过的数据时的状态。其中最重要的是函数依赖和多值依赖。
2.函数依赖
设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X。
3.平凡函数依赖
当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。
4.非平凡函数依赖
当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
5.完全函数依赖
设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
6.部分函数依赖
设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
7.传递函数依赖
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
举例
如下表
学号 | 课程号 | 成绩 |
上面是一个典型的选课表,主键是“学号+课程号”,这个表示符号第三范式的。
下表对表的设计进行一下变换
学号 | 课程号 | 成绩 | 是否及格 |
这里加了一个“是否及格”的字段,不符合“第三范式”了,因为是否及格依赖于成绩,索引存在传递函数依赖。
成绩(Y) | 是否及格(Z) | |
文字表达 | 课程号+学号→成绩 | 成绩→是否及格 |
数学表达 | X→Y | Y→Z |
传递依赖 | 无 | 有 |