一.范式:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。
1.第一范式
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。
例如,学生信息表有如下属性值:
学生标示符 |
---|
201433 cht |
该表不满足第一范式。因为该属性值可以再分割变为:
学号 | 姓名 |
---|---|
201433 | cht |
简而言之,第一范式就是属性值不可分割。
2.第二范式
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。
简而言之,第二范式就是非主属性非部分依赖于主关键字。
例如,选课信息表
学生 | 课程 | 教师 | 教材 | 教师职称 |
---|---|---|---|---|
cht | 数据库系统 | fjl | 《数据库管理系统原理与设计》 | 教授 |
(学生、课程)才能确定这张表的唯一行。所以它是主属性。但是教材只与课程有关。教材并不依赖选课人。所以不满足第二范式。
又例如,一个关系模式为Y(X1,X2,X3,X4),假定该关系存在着如下函数依赖:(X1,X2)→X3,X2→X4,则该关系属于( 第一范式 )。
因为(x1,X2)可以当做主属性,但是X4却不是完全依赖(X1,X2),而只是依赖一部分。所以不符合第二范式。
3.第三范式
满足第三范式(3NF)必须先满足第二范式(2NF)。3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说,如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
学生 | 课程 | 教师 | 教师职称 |
---|---|---|---|
cht | 数据库系统 | fjl | 教授 |
同样,主属性是(学生,课程),但是教师职称跟学生没关系。只和教师相关。因为(学生,课程)→教师,教师→教师职称,所以存在非主属性(教师职称)对于码的传递函数依赖,也就是非主属性(教师职称)依赖其他非主属性(教师),不满足第三范式。
某关系表有:员工(部门编号,部门名称,员工编号,姓名,性别,年龄),则其主码为(部门编号、员工编号)。
因为如果员工编号为主码,部门名称传递函数依赖于主属性,不满足第三范式。
简而言之,第三范式就是属性不依赖于其它非主属性。
4.BCNF
**BCNF范式是在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。
也就是说所有属性(包括非键属性与键鼠性)