三范式是一位英国数据库开发者提出来的,要求在设计数据库表结构过程中必须要遵守的规则。也可以说是一个约定或者约束。
第一范式:保证每列字段的原子性
这是为了我们操作方便的一个规范,假设一个字段叫“地址”,这个就很容易不符合第一范式,因为还可以拆分出“省份”“市”“区”“县”“门牌号”之类的,在修改地址的时候,只能统一全部编辑修改,或者用字符串分割的方式来修改,非常难受。
第二范式:每一列的字段都与该列主键相关
这个规范的意思是说比如我有一张订单表,那么我这张表记录的应该是跟订单详情有关的东西,比如“下单时间”“商品号”“用户编号”“配送时间”“实际金额”等等。而不能为了方便记录一些偏向于商品的东西,比如商品描述,商品生产日期,这些都不是订单表该记录的。就不应该出现,要用的话就通过商品号join连表查询。这个是有点类似职责单一原则。
简单一句话,不属于你这张表的东西你不能为了方便也放进这张表~~
第三范式:每一列的字段与该列主键不能是间接关联
这一范式是在基于满足第二范式基础上的,简单点说就是不能出现其他表的非主键字段,还是举例订单表,用户ID就是用户表的主键字段,那么用户地址就应该通过用户ID去join,而不能为了方便,重复在订单表中创建一个用户地址字段来存~~~
它与第二范式的区别点在于:
第二范式是在规范我们建表,不允许多个表的数据堆在一个表中
第三范式在规范我们的表字段,不允许我们出现重复的字段。不利于管理。