一、表设计遵循的三大范式
1.1、第一范式
定义:必须不包含重复组的关系,即每一列都是不可拆分的原子项。
假设有这样一个业务场景,我需要一批用户的基础信息(包括姓名,年龄,电话,详细地址等,并按地址分类用户)
表A:

表B:

对比A、B两张表,很明显A表不足以满足业务需求,正确的表结构应该是表B。
1.2、第二范式
定义:第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中
举例如关系模型(职工号,姓名,职称,项目号,项目名称)中,职工号->姓名,职工号->职称,而项目号->项目名称。显然依赖关系不满足第二范式,常用的解决办法是差分表格,比如拆分为职工信息表和项目信息表。
1.3、第三范式
定义:第三范式的条件是关系模型满足第二范式,所有非主属性对任何候选关键字都不存在传递依赖。即每个属性都跟主键有直接关系而不是间接关系,像:a-->b-->c。一般数据库设计中,一般要求达到3NF,第四第五较少涉及。
假如设计如下表结构:

这是张学生信息表,school代表学校名称,school_tel代表学校电话,但是从场景中分析可知,school_tel与school之间存在着传递关系,而且school_tel与id没有依赖关系,所以表结构设计不合理,正确的做法应该是设计3张表,另外一张存放学校信息,还有一张表用来关联学生与学校的关系。
三大范式只是对设计数据库的建议,并不一定要完全遵循,主要还是要依赖于业务需求,良好的数据库结构不仅可以降低开发人员的工作量和难度也可以增加程序的弹性,为后面的维护打下基础。
二、表字段及类型设计规范
参考:https://blog.csdn.net/lijinzhou2017/article/details/85684175
二、实际项目中标结构设计
2.1、通常在满足三大范式的前提下,适当添加冗余字段。
2.3、日期字段使用注意(https://blog.csdn.net/qq1137623160/article/details/80677810)
网友评论