数据库---三范式

一、概述

一般来说的数据库三范式都是指的关系型数据库,范式指的就是规范的意思,三范式指的就是利用关系型数据库进行建表时候普遍需要遵循的三个规范(即1NF,2NF,3NF);

三范式的最重要的核心思想是:数据冗余

 

二、第一范式(属性的原子性)

  在任何一个关系型数据库中,第一范式(1NF)是对关系模型的基本要求,不满足第一范式(1NF)的数据库不是关系数据库。

  所谓的第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值, 即实体中的某一个属性不能有多个值或者不能有重复的属性。

如果出现重复的属性,就可能需要定义个新的实体,新的实体有重复的属性构成,新实体与旧实体之间为一对多关系。

  在第一范式(1NF)中表的每一行只包含一个实例的信息。例如不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;

简而言之。第一范式就是无重复的列,列不可再拆分

 

三、第二范式(属性完全依赖主键)

第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式,第二范式要求数据库的每个实例或行必须可以被唯一的区分,

即表中要有一列属性可以将实体完全区分,这个属性就是主键,即每一个属性完全依赖于主键,在员工管理中,员工可以通过员工编号进行唯一区分,

完全依赖概念:即非主属性不能依赖于主键的部分属性,必须依赖于主键的所有属性。


比如一个酒店订单,应该由 订单编号、房间号、联系人姓名、联系人手机、联系人身份证号码;

 

 

 

作为主键订单编号,其他非主键属性并不是

所有的都是强依赖订单编号, 姓名、手机号码、身份证号码属于客户实体的共性数据,所以一张表中如果包含了上述的字段,那么就不满足第二范式

表字段设计应该如下:

 

 

 

 

四、第三范式(传递依赖)

满足第三范式必须先满足第二范式,第三范式要求一个数据库表中不包含已在其他表中已包含的非主关键字信息。

例如 存在一个课程表,课程表中有课程号(Cno),课程名(Cname),学分(Ccredit),那么在学生信息表中就没必要再把课程名,学分再存储到学生表中,

这样会造成数据的冗余, 第三范式就是属性不依赖与其他非主属性,也就是说,如果存在非主属性对于码的传递函数依赖,则不符合第三范式。

第三范式需要确保数据库表中的每一列数据都和主键直接相关,而不能间接相关。是在第二范式的基础上更进一步。

不能存在传递依赖。即:除了主键外,其他字段必须依赖主键。

 

posted @ 2020-07-20 14:56  花碎梦亦寒  阅读(658)  评论(0编辑  收藏  举报