数据库三范式详解(定义作用及例子图解)

数据库三范式详解(定义作用及例子图解)-mikechen

什么是范式?

简言之就是,在进行数据库设计时,建立科学的数据库规范,用来优化数据数据存储方式,在关系型数据库中这些规范就可以称为范式。

 

第一范式

第一范式(First Normal Form),简称1NF,强调的是列的原子性,即列不能够再分成其他几列。

举一个例子,如下图所示:

数据库三范式详解(定义作用及例子图解)-mikechen

上图的地址列就不是原子性的,还可以细分,细分后,如下图所示(绿色部分):

数据库三范式详解(定义作用及例子图解)-mikechen

地址列,被拆解为国家和城市两个列,这样的改造就符合了第一范式。

一句话总结:第一范式强调的是列的原子性,即列不能够再分成其他几列,比如:上图的国家Country,城市 City,已经不可再分割,则满足第一范式1NF。

 

第二范式

第二范式(Second Normal Form),简称2NF,就是指每个表必须有主关键字Primary key,而且每个非主属性完全依赖于主键,而不是仅依赖于其中一部分属性。

还是举例说明,这样更加容易理解第二范式,如下图所示:

数据库三范式详解(定义作用及例子图解)-mikechen

上图的订单表就不满足第二范式,因为第二范式要求每个表必须有主关键字Primary key,而且每个非主属性完全依赖于主键,上图红色标识出现了2个主关键字。

所以上图订单表,还可以拆分为两张独立的表:订单表和商品表,拆分后如下图所示:

订单表:

数据库三范式详解(定义作用及例子图解)-mikechen

商品表:

数据库三范式详解(定义作用及例子图解)-mikechen

简要总结:第二范式就是每张表只描述一件事情,先满足第一范式,另外包含两部分内容,一是表必须有一个主键,二是每个表都强依赖于其主关键字,而不能只依赖于主键的一部分。

 

第三范式

第三范式(Third Normal Form),简称3NF,就是指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的传递依赖关系。

第三范式具有如下特征:

  • 每一列只有一个值每一行都能区分;
  • 每一个表都不包含其他表已经包含的非主关键字信息。

如下图所示:

数据库三范式详解(定义作用及例子图解)-mikechen

上图的订单表中的顾客名称,就不符合第三范式,因为它存在了对非主键顾客编号的依赖,每一个表都不包含其他表已经包含的非主关键字信息。

改进后,去掉顾客名称,就符合第三范式了,如下图所示:

数据库三范式详解(定义作用及例子图解)-mikechen

简要总结:第三范式满足第二范式,并且表中的列不存在对非主键列的传递依赖。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法