范式中涉及的概念问题:
① 部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
简单说:A——>(推出)B,如果A是一个属性组的话,则B属性只需要依赖A属性组中的某些属性就可以推出B,就是说B部分依赖于A
例子:学生信息表中有(学号,课程名称,姓名),学号可以推出,但是课程名称不能推出姓名,也就是说姓名部分依赖于(学号,课程名称)
②完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X
简单说:A——>B,如果A是一个属性组的话,则B必须依赖A属性组中的所有属性才可以推出B,就是说B完全依赖于A。
例子:学生表中有(学号,课程名称,分数),单一的学号并不能推出分数,单一的课程名称也不能推出分数,只有学号和 课程名称一起才能推出分数,所以说分数完全依赖于(学号,课程名称)
③传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X
简单说:A——>B,B——>C,如果A属性组可以确定唯一B属性的值,B属性组可以确定唯一C属性的值,则说C传递依赖于A
例子:学生表中有(学号,系主任,系名),学号可以推出系主任,系主任可以推出系名,所以说系名传递依赖于学号
范式以及表的设计规范:
一范式:表中属性都是单一属性,不可再分
下图就是不满足一范式的表
应该改为如下图所示:
二范式:在一范式的基础上,消除部分函数依赖
三范式:在一二范式的基础上,消除传递函数依赖
为什么需要满足范式:
不满足范式会出现数据冗余、数据插入异常、数据删除异常以及更新异常等问题
表的设计基本上满足第三范式就足够了