数据库的范式

来源:互联网 发布:mac oui ieee.org 编辑:程序博客网 时间:2024/05/16 12:04

                          数据库的范式


       无规矩不成方圆,在数据库设计的时候遵守的规矩就是范式.即设计数据库必须满足不同的规则也就是满足不同的范式.关系数据库有六种范式,而常用的则是第一第二和第三范式。而其余的范式我们基本还用不到. 

 范式介绍

      如果没有范式不仅会产生大量无用的表字段,而且会使得表结构非常难以维护。因为范式是递进的关系,所以引出了第一范式.

    第一范式

        第一范式就是在没有范式的基础上进行的改进,所谓第一范式就是指表中的所有字段都是原子的、不可再分的,第一范式是将没有范式中重复的字段抽取出来,作为表的数据,从而形成一个稳定的、冗余数据少得表结构。

        此时,表的结构变得稳定了,而且表中的冗余信息相对没有范式也少了很多。可是,第一范式只是关系数据库设计的最低满足的范式,第一范式中仍然有很多的冗余信息,由此,需要第二范式 

  第二范式

        第二范式是满足属性对主键是完全函数依赖的,因此,满足第二范式的表当然也是满足第一范式的,第二范式的目的就是消除表中的部分依赖。

      几个概念要解释下, 

      1完全函数依赖

      设有属性集AS,若K中的所有属性共同能够推出S中的任意属性,且对于A的任何真子集,都不能推出P中的任意属性,则成A完全函数依赖S

      2部分函数依赖

       与上相似,只是,A中存在真子集使得,该子集能推出S中任意属性.

           不满足第二范式的表至少有以下几个缺点:

             1:数据重复,浪费空间

             2:插入异常

             3  更新异常,删除异常等

           d: 第三范式

      第三范式是指在满足第二范式的情况下,消除表中的传递依赖。

      所谓传递依赖,就是指x-->y,y-->z,那么可以得到y-->z.

      传递依赖常发生在主键、外键、外键相关的属性上,例如,假设有这样的表

              学生表(学生id,学生姓名,院系id,院系名,此处主键为(学生id),外键为(院系id)

              院系表(院系id,院长名称),主键为(院系id

      很明显,此处存在传递依赖,因为学生id  可以唯一确定  院系id,而院系id可以唯一确定院系名。

      

从上面的表数据易知,不满足第三范式的表至少有以下几个缺点:

           1  数据重复,浪费空间

           2  插入异常

           3  更新异常,删除异常等