数据库的范式介绍
数据库的范式介绍
无规矩不成方圆,在数据库设计的时候遵守的规矩就是范式.即设计数据库必须满足不同的规则也就是满足不同的范式.关系数据库有六种范式,而常用的则是第一第二和第三范式。而其余的范式我们基本还用不到.
范式介绍
如果没有范式不仅会产生大量无用的表字段,而且会使得表结构非常难以维护。因为范式是递进的关系,所以引出了第一范式.
第一范式
第一范式就是在没有范式的基础上进行的改进,所谓第一范式就是指表中的所有字段都是原子的、不可再分的,第一范式是将没有范式中重复的字段抽取出来,作为表的数据,从而形成一个稳定的、冗余数据少得表结构。 www.zzzyk.com
此时,表的结构变得稳定了,而且表中的冗余信息相对没有范式也少了很多。可是,第一范式只是关系数据库设计的最低满足的范式,第一范式中仍然有很多的冗余信息,由此,需要第二范式 。
第二范式
第二范式是满足属性对主键是完全函数依赖的,因此,满足第二范式的表当然也是满足第一范式的,第二范式的目的就是消除表中的部分依赖。
几个概念要解释下,
1: 完全函数依赖
设有属性集A和S,若K中的所有属性共同能够推出S中的任意属性,且对于A的任何真子集,都不能推出P中的任意属性,则成A完全函数依赖S。
2: 部分函数依赖
与上相似,只是,A中存在真子集使得,该子集能推出S中任意属性.
不满足第二范式的表至少有以下几个缺点:
1:数据重复,浪费空间
2: 插入异常
3: 更新异常,删除异常等
d: 第三范式 www.zzzyk.com
第三范式是指在满足第二范式的情况下,消除表中的传递依赖。
所谓传递依赖,就是指x-->y,y-->z,那么可以得到y-->z.
传递依赖常发生在主键、外键、外键相关的属性上,例如,假设有这样的表
学生表(学生id,学生姓名,院系id,院系名) ,此处主键为(学生id),外键为(院系id)
院系表(院系id,院长名称),主键为 (院系id)
很明显,此处存在传递依赖,因为 学生id 可以唯一确定 院系id,而 院系id 可以唯一确定 院系名。
从上面的表数据易知,不满足第三范式的表至少有以下几个缺点:
1 : 数据重复,浪费空间
2: 插入异常
3: 更新异常,删除异常等