SQL的范式理论

还说七期的师哥师姐给我们讲课。当时说到了数据库的三范式理论,听得时候听明白了,课下自己总结了一下。
        其实,数据库的范式理论无非是为了节省资源,就是在保证数据完整性的前提下最大程度上减小数据的冗余程度。而数据库三范式也是前人经过多次的经验总结出来的,觉得数据库在这样的设计规则下会在数据完整性和占用数据资源两者之间取得一个较好的平衡。
        下面通过例子来认识一下数据库三范式理论:
第一范式:
        第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列的中不能哟多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。第一范式包括下面的指导性原则:
1、 数组的每个属性只能包含一个值
2、 关系中的每个数组必须包含相同数量的值
3、 关系中的每个数组一定不能相同
        例如下面的这个关系就是不符合第一范式的

 
 

        大家看上边的图是不是觉得很别扭呢,对,第三行里面有两个学生姓名。不必担心,因为我们在sql server中建表的时候绝对不会出现这种情况的,所以你大可不必担心自己设计出来的表不符合第一范式。那么正确的表的关系应该是下面这样的:

 
 

第二范式:
        如果一个数据表已经满足第一范式,而且该数据表中的任何一个非主键字段的数值都依赖于该数据表的主键字段,那么该数据表满足第二范式。
        例如下面的表:

 
 


        我们一个一个的来看,项目编号显然是主键字段,根据项目编号可以推出项目名称,可以推出项目负责人,但是根据项目编号不能推出项目负责人部门,所以上面的表是不符合第二范式的。接下来我们把上面的表拆成两个符合第二范式的表

 
 


第三范式
        如果一个数据表已经满足第三范式,而且该数据表中的任何两个非主关键字段的数据值之间不存在函数信赖关系,那么该数据表满足第三范式,即3NF。
大家可以看下面的表格

 
 


        假如公司有这样的规定:工资的百分之十作为奖金发放给员工,那么上面的表的设计就不符合第三范式了。
        从第三范式的定义我们可以看出,根据工资可以推出奖金的多少,所以工资和奖金之间是存在函数信赖关系的。但是可能就有这样的疑问了,我要是根据姓名还能推出性别呢,这怎么办呢?试想一下,如果没有员工的基本信息表你能根据姓名推出性别吗?也就是说我们数据的根源信息都不知道,你怎么推出其他的信息,也可以理解为上面的表格就是我们刚刚说到的“根源信息”。
我是这么理解的,不知道大家对上面的理解有什么疑问,请多多指教!

本文来自于 王伯仙的博客

--转自http://www.2cto.com/database/201203/123040.html

10.26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值