数据库三范式

1 什么是三范式

三范式其实就是在日常开发过程中针对数据库设计而提出的。因为我们知道,好的数据库设计可以起到节约数据库性能和方便开发人员操作的功效。
所以,三范式就是关系型数据库的设计规范。


第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。

第二范式:如果关系模式R满足第一范式,并且R的所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.

注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性

2 理解三范式

2.1 第一范式

  1. 每个列的属性都是不可以再分成子属性的,也就是说列属性具有原子性。
  2. 两个列的属性相近或者一样,尽量合并成一个列,不要产生冗余数据。

举例:

  1. 地址------>省、市、详细地址;
  2. 姓名1、姓名2、姓名3------>姓名、类型;

2.2 第二范式

要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
举例:

订单 商品 客户 电话
O0001 果汁 陈羽凡 13900687865
O0002 雪糕 陈羽凡 13900687865

应改成

订单 商品 客户ID
O0001 果汁 1
O0002 雪糕 1
ID 客户 电话
1 陈羽凡 13900687865

2.3 第三范式

任何非主属性不依赖于其它非主属性。也就是一个数据库表中不包含已在其他表中已包含的非主关键字信息。
举例:

订单 商品 客户ID 客户 电话
O0001 果汁 1 陈羽凡 13900687865
O0002 雪糕 1 陈羽凡 13900687865

上述表中,主属性客户ID已经作为主要依赖,其他非主属性客户、电话就不应该存在于表中。

注意:三范式只是建议,实际操作要具体情况具体分析,总体做到达到需求、优化性能、减少冗余。

你可能感兴趣的:(数据库三范式)