一、范式概述
范式,数据库设计范式,数据库的设计范式,是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式;
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了;
一般只学习前面三大范式;
二、三大范式详解
1、第一范式(1NF)
内涵:
每一列都是不可分割的原子数据项;
百科:
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
存在的问题:
①存在非常严重的数据冗余(重复);
②数据添加存在问题;
③数据删除存在问题;
2、第二范式
内涵:
在1NF的基础上,非码属性必须完全依赖于候选码(在1NF的基础上消除非主属性对主码的部分函数的依赖);
扩展概念:
①函数依赖:如果通过A属性(属性组)的值,可以确定B属性(属性组)的唯一值,则称B依赖于A;
例如:一个学生的姓名对应唯一的一个学号,那么学号依赖于学生的姓名;
②完全函数依赖:如果必须通过A属性组所有属性值,才能确定B属性(属性组)的唯一值,则称B完全依赖于A;
例如:一个学生的总成绩的确定,必须依赖所有成绩;
③部分函数依赖:如果需要通过A属性组一部分的属性值,来确定B属性(属性组)的唯一值,则称B部分依赖于A;
例如:要确定一个学生的姓名,只需要知道这个学生所在的学校以及他的学号;
④传递函数依赖:如果通过A属性(属性组)的值,可以确定B属性(属性组)唯一的值,再通过B属性(属性组)的值确定C属性(属性组)唯一的值,则称C传递依赖于A;
例如:通过学生(的学号)确定学院,通过学院确定学院院长,则院长传递依赖于学生;
⑤码:在一张表中,如果通过一个属性(属性组)可以确定其他所有的属性,则称这个属性(属性组)为该表的码;
例如:通过一个学生的所在学校和学号可以确定该学生的姓名、年龄、性别、各科成绩等信息,则学校和学号就是该表的码;
延伸:主属性:码属性组中的所有属性;非主属性:码属性组之外的属性;
百科:
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
3、第三范式
内涵:
在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF的基础上消除传递依赖);
百科:
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。