设计出符合业务需求、高性能的程序对数据库的一种设计规范,称为数据库范式,遵循数据库范式能设计出逻辑清晰,且可扩展性高的程序系统数据库
1NF:属性不可再细分为更小粒度的字段,有类似或者相近含义的字段能够合并为一个字段。数据库设计
假设有这样一个业务场景,我须要一批用户的基础信息(包括姓名,年龄,电话,详细地址等,并按地址分类用户)性能
表A:设计
表B:3d
对比A、B两张表,很明显A表不足以知足业务需求,正确的表结构应该是表B。blog
2NF:一行数据应该只与一列相关,不该该存在冗余的数据。开发
假设有这样的业务场景,记录客户下单的酒店信息。基础
这里用一张表就来存储,能够见到每一行的数据都是对于“张”这个用户来言的,这个name列值就很是冗余,咱们能够根据2NF从新设计三张表来维护数据关系。(一张表用来存放用户信息,一张表用来存放酒店房间信息,第三张表用来关联用户与酒店房间信息)扩展
3NF:非主属性间不该该存在传递关系程序
假如我设计了以下这张表
这是张学生信息表,school表明学校名称,school_tel表明学校电话,可是从场景中分析可知,school_tel与school之间存在着传递关系,并且school_tel与id没有依赖关系,因此表结构设计不合理,正确的作法应该是设计3张表,另一张存放学校信息,还有一张表用来关联学生与学校的关系。
三大范式只是对设计数据库的建议,并不必定要彻底遵循,主要仍是要依赖于业务需求,良好的数据库结构不只能够下降开发人员的工做量和难度也能够增长程序的弹性,为后面的维护打下基础