ITPub博客

首页 > 数据库 > 数据库开发技术 > 数据库范式(Normal Form)

数据库范式(Normal Form)

原创 数据库开发技术 作者:FEMCwenlinn 时间:2007-10-29 16:57:02 0 删除 编辑
1、第一范式(1NF):属性不可再分
第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库[@more@]

第一范式:数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体的某个属性不能有多个值,或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多的关系。第一范式中,表的每一行只包含一个实例的信息。简言之,第一范式就是无重复的列。

2、第二范式(2NF):消除第一范式中的部分依赖
第二范式是在第一范式基础上建立起来的,即满足第二范式,必须先满足第一范式。
第二范式要求数据库表中的每个实例或行必须可以被唯一的区分。即通常为表加上一个列,以存储各个实例的唯一标识(一般为某种id)。这个唯一的属性列就是主关键字(主键、主码,注意主键可能不止包含一个列,可能是多个属性的复合体,即组合关键字)。
第二范式要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体是一对多的关系。简言之,第二范式就是非主属性非部分依赖于主关键字(注意这里说非部分依赖,而不说完全依赖,因为非主关键字完全依赖于主关键字,不能表示出非主关键字是依赖于主关键字的全体,还是部分,第二范式要求必须依赖主关键字全体)

3、第三范式(3NF):消除第二范式中的传递依赖
满足第三范式,必须先满足第二范式。
第三范式要求一个数据库表中不包含已在其他表中包含的非主关键字信息(注意可以包含其他表的主关键字信息,即是外键),简言之,第三范式就是属性不依赖于其它非主属性,如果有依赖于其它非主属性的属性存在,则应将这些属性与他们所依赖的非主属性分离出来,另外构件一个表,以它们所依赖的非主属性作为新表的主属性,新表实例与原表实例是一对多的关系

4、鲍依斯·科得范式(BCNF),也称修正的第三范式
在第三范式基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖,则符合鲍依斯·科得范式

一般数据库表设计能做到第三范式就足够了,实际上也有很多时候连这三个范式也是不能完全满足的,这是为了考虑效率问题,有些时候不符合范式反而是更加有效率更加合理的设计,范式只是一种理论指导,是用作参考的,但在效率允许的情况下,应尽量满足

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9874732/viewspace-979425/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    12
  • 访问量
    10836