【数据库】业务设计——范式(三大范式和反范式化设计)

目录

一、数据库设计的第一大范式

二、数据库设计的第二大范式

三、数据库设计的第三大范式

四、反范式化设计


一、数据库设计的第一大范式

  • 数据库表中的所有字段都只具有单一属性
  • 单一属性的列是由基本数据类型所构成的
  • 设计出来的表都是简单的二维表

 

name-age列具有两个属性,一个name,一个 age不符合第一范式,把它拆分成两列

 

二、数据库设计的第二大范式

  • 要求表中只具有一个业务主键,也就是说符合第二范式的表不能存在非主键列只对部分主键的依赖关系

 

有两张表:订单表,产品表

 

一个订单有多个产品,所以订单的主键为【订单ID】和【产品ID】组成的联合主键,这样2个组件不符合第二范式,而且产品ID和订单ID没有强关联,故,把订单表进行拆分为订单表与订单与商品的中间表

 

三、数据库设计的第三大范式

  • 指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上相处了非主键对主键的传递依赖

其中

客户编号 和订单编号管理 关联

客户姓名 和订单编号管理 关联

客户编号 和 客户姓名 关联

 

如果客户编号发生改变,用户姓名也会改变,这样不符合第三大范式,应该把客户姓名这一列删除

 

四、反范式化设计

什么叫反范式化设计

  • 反范式化是针对范式化而言得,在前面介绍了数据库设计得范式
  • 所谓得反范式化就是为了性能和读取效率得考虑而适当得对数据库设计范式得要求进行违反
  • 允许存在少量得冗余,换句话来说反范式化就是使用空间来换取时间