如何更快更准地理解数据库设计的三个范式
如何更快更准地理解数据库设计的三个范式
范式是契合某一种级别的联系形式的集合。关系数据库中的关系必须满意必定的需求,即满足不同的范式。当前联系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满意最低需求的范式是第一范式(1NF)。在第一范式的基础上进一步满意更多需求的称为第二范式(2NF),其他范式以次类比。一般说来,数据库只需满意第三范式(3NF)就行了。
一、范式的原理
(1)第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的根本数据项,同一列中不能有多个值,即实体中的某个特点不能有多个值或许不能有重复的特点。假如呈现重复的特点,就可能需求界说一个新的实体,新的实体由重复的特点构成,新实体与原实体之间为一对多联系。在第一范式(1NF)中表的每一行只包括一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
(2)第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满意第二范式(2NF)必须先满意第一范式(1NF)。第二范式(2NF)需求数据库表中的每个实例或行必须能够被专一地区别。为完成区别一般需要为表加上一个列,以存储各个实例的专一标识。
第二范式(2NF)需求实体的特点彻底依靠于主关键词。所谓彻底依靠是指不能存在仅依靠主关键词一有些的特点,假如存在,那么这个特点和主关键词的这一有些应当分离出来构成一个新的实体,新实体与原实体之间是一对多的联系。为完成区别一般需要为表加上一个列,以存储各个实例的专一标识。简而言之,第二范式即是特点彻底依靠于主键。
(3)第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)需求一个数据库表中不包括已在其它表中已包括的非主关键字信息。例如,存在一个部分信息表,其间每个部分有部分编号(dept_id)、部分称号、部分简介等信息。
那么在的职工信息表中列出部分编号后就不能再将部分称号、部分简介等与部分有关的信息再参加职工信息表中。假如不存在部分信息表,则依据第三范式(3NF)也应当构建它,不然就会有很多的数据冗余。简而言之,第三范式即是特点不依赖于其它非主特点。
二、通俗地理解三个范式
通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
没有冗余的数据库设计能够做到。可是,没有冗余的数据库未必是最好的数据库,有时为了进步运转功率,就必须下降范式规范,恰当保存冗余数据。具体做法是:在概念数据模型设计时恪守第三范式,下降范式规范的作业放到物理数据模型设计时思考。下降范式即是增加字段,允许冗余。
在现代数据库设计中,尤其是web 2.0的体系中的数据库设计,我能够断语,大多数都是违背2NF、3NF的,少量设计乃至是违背1NF的。数据库设计范式仅仅对数据库惯用设计的一些阐明,并不能定性为规范。
范式是契合某一种级别的联系形式的集合。关系数据库中的关系必须满意必定的需求,即满足不同的范式。当前联系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满意最低需求的范式是第一范式(1NF)。在第一范式的基础上进一步满意更多需求的称为第二范式(2NF),其他范式以次类比。一般说来,数据库只需满意第三范式(3NF)就行了。
一、范式的原理
(1)第一范式(1NF)无重复的列
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的根本数据项,同一列中不能有多个值,即实体中的某个特点不能有多个值或许不能有重复的特点。假如呈现重复的特点,就可能需求界说一个新的实体,新的实体由重复的特点构成,新实体与原实体之间为一对多联系。在第一范式(1NF)中表的每一行只包括一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
(2)第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满意第二范式(2NF)必须先满意第一范式(1NF)。第二范式(2NF)需求数据库表中的每个实例或行必须能够被专一地区别。为完成区别一般需要为表加上一个列,以存储各个实例的专一标识。
第二范式(2NF)需求实体的特点彻底依靠于主关键词。所谓彻底依靠是指不能存在仅依靠主关键词一有些的特点,假如存在,那么这个特点和主关键词的这一有些应当分离出来构成一个新的实体,新实体与原实体之间是一对多的联系。为完成区别一般需要为表加上一个列,以存储各个实例的专一标识。简而言之,第二范式即是特点彻底依靠于主键。
(3)第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)需求一个数据库表中不包括已在其它表中已包括的非主关键字信息。例如,存在一个部分信息表,其间每个部分有部分编号(dept_id)、部分称号、部分简介等信息。
那么在的职工信息表中列出部分编号后就不能再将部分称号、部分简介等与部分有关的信息再参加职工信息表中。假如不存在部分信息表,则依据第三范式(3NF)也应当构建它,不然就会有很多的数据冗余。简而言之,第三范式即是特点不依赖于其它非主特点。
二、通俗地理解三个范式
通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
没有冗余的数据库设计能够做到。可是,没有冗余的数据库未必是最好的数据库,有时为了进步运转功率,就必须下降范式规范,恰当保存冗余数据。具体做法是:在概念数据模型设计时恪守第三范式,下降范式规范的作业放到物理数据模型设计时思考。下降范式即是增加字段,允许冗余。
在现代数据库设计中,尤其是web 2.0的体系中的数据库设计,我能够断语,大多数都是违背2NF、3NF的,少量设计乃至是违背1NF的。数据库设计范式仅仅对数据库惯用设计的一些阐明,并不能定性为规范。
