什么是数据库范式
数据库的规范与要求,设计关系数据库时,遵从不同的规范要求,各种范式呈递次规范,越高的范式数据库冗余越小
分类
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。(一般数据库只用到这三种)
第一范式(原子性)
概念:在关系模型R中的每一个具体关系,如果每个属性值都是有不可分割的最小数据单位组成或者说每个属性的值必须是唯一的,则称R属于第一范式。
理解:对于表中的每一行,必须且仅仅有为唯一的行值,在一行中的每一列仅有唯一的值并且具有原子性,也就是说在关系每个元组的所有属性值都必须是原子值(所谓的原子值就是一行一列相交,没有合并单元格的形式,)
例如:一张学生基本资料表
如图所示,电话一列具有可分性,他是两个内容,一个固定电话号码、一个手机号码、可分割,不具有原子性,不符合第一范式。
我们把重复字段的值放到独立的表中,把这些表通过一对多关系连接到一起来消除重复,我们把上面的表改造成如下所示
如图 每个字段(表格)都具有了原子性,不可再分,所以这样就满足了第一范式。
第二范式(完全依赖)
概念:如果关系模式R为第一范式,并且R中每一个非主键属性完全依赖于R的某个候选关键字(通常为主键),即所有非主键列的值都完全依赖整个主键,则称关系R属于第二范式。
理解:第二范式是第一范式的基础上解决多对多的实体关系,即在表中的每一行数据只能完成一个任务,同时每一个非主键属性都要完全依赖于主键属性,也就是说非主键属性要由主键推导出来,消除部分依赖的情况。
例如:一张学生选课表
其中课程名、学生姓名、学年这三者形成了主键,决定了这个表当中记录的唯一的值,同时他们三个决定了了学分、课程所用教材、出版社、学生班级与性别(非主键);但是课程名决定了学分、课程所用教材、出版社,即学分、课程所用教材、出版社是依赖于课程名;同样,学生姓名决定了学生班级与性别,即学生班级与性别依赖于学生姓名,在这张表中我们可以看到,每一行透漏的消息很多, 其中非主键可以应主键里面的某些主键来决定,这样就不符合第二范式,怎么办,按照上述分析我们将表分为如下三个表
学生姓名只决定学生班级和性别
课程名只决定学分、课程所用教材及出版社
如图 我们可以看到每个表的每一行只交代了一件事,同时非主键也都完全依赖于主键,因此符合第二范式
第三范式(无传递性)
概念:属于第二范式,表中的任何一个非主属性都不传递函数依赖于任何关键字,则为第三范式,如果关系模型R中的所有非主属性对于任何候选关键字都不存在传递依赖,则称关系R属于第三范式
理解: 在第二范式的基础上,摆脱非主键列的传递依赖,比如一个表中有三列A、B、C,存在着A决定B,且B决定C的情况,那么这个表就不属于第三范式,因为A可以通过传递依赖决定C。
例如:一张学生基本信息表
分析表得学生的姓名决定班级、性别,而班级决定了系部、班主任、专业、班长,这样就有了传递关系,所以不符合第三范式,因此可以把上面的表拆分为如下两个表
如图 第一个表中学生姓名决定了学生班‘级与性别;第二个表中学生的班级决定了所属系部、班主任、所属专业以及班长,这样拆分就消除了表中的传递关系,即符合第三范式。