函数依赖
设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称Y函数依赖于X,记作X→Y。
例如:姓名可以推出年龄,则年龄函数依赖于姓名,但是当出现两个同名人的情况时,函数依赖就不成立了。
完全依赖
在R(U)中,如果X→Y,并且对于X的任意真子集,都没有X→Y。则说Y完全依赖于X
部分依赖:
在R(U)中,如果X→Y,并且对于X的一个真子集,有X→Y。则说Y部分依赖于X
传递依赖:
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y,(Y !→X),Y→Z,则称Z传递函数依赖于X。
如果X→Y,Y→X实际上是X→Z,是Z对X的直接函数依赖。
规范化
一范式
即实体中的某个属性不能有多个值。
1、数据冗余太大(每一个系的系主任名字重复出现)
2、更新异常(某个系更换系主任之后,必须将该系学生有关的每一个元组)
3、插入异常(如果一个系刚成立,尚无学生,就无法将老师存入到数据库中)
4、删除异常(如果学生都毕业了,在删除学生时,把这个系的系主任的所有信息都删除了)
二范式
第二范式建立在第一范式的基础上,非主属性完全依赖于码。
简单说:不存在非主属性对码的部分依赖
三范式
满足第二范式的条件下不存在传递函数依赖。
简单的说:不存在非主属性对码的传递依赖。
BC范式
一个满足BCNF的关系模式的条件:
1.所有非主属性对每一个码都是完全函数依赖。
2.所有的主属性对每一个不包含它的码,也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。
简单的说:不存在主属性对码的部分依赖和传递依赖