数据库三范式

三范式是一位英国数据库开发者提出来的,要求在设计数据库表结构过程中必须要遵守的规则。也可以说是一个约定或者约束。

第一范式:保证每列字段的原子性

这是为了我们操作方便的一个规范,假设一个字段叫“地址”,这个就很容易不符合第一范式,因为还可以拆分出“省份”“市”“区”“县”“门牌号”之类的,在修改地址的时候,只能统一全部编辑修改,或者用字符串分割的方式来修改,非常难受。

第二范式:每一列的字段都与该列主键相关

这个规范的意思是说比如我有一张订单表,那么我这张表记录的应该是跟订单详情有关的东西,比如“下单时间”“商品号”“用户编号”“配送时间”“实际金额”等等。而不能为了方便记录一些偏向于商品的东西,比如商品描述,商品生产日期,这些都不是订单表该记录的。就不应该出现,要用的话就通过商品号join连表查询。这个是有点类似职责单一原则。
简单一句话,不属于你这张表的东西你不能为了方便也放进这张表~~

第三范式:每一列的字段与该列主键不能是间接关联

这一范式是在基于满足第二范式基础上的,简单点说就是不能出现其他表的非主键字段,还是举例订单表,用户ID就是用户表的主键字段,那么用户地址就应该通过用户ID去join,而不能为了方便,重复在订单表中创建一个用户地址字段来存~~~
它与第二范式的区别点在于:
第二范式是在规范我们建表,不允许多个表的数据堆在一个表中
第三范式在规范我们的表字段,不允许我们出现重复的字段。不利于管理。

但是!凡事无绝对,这个范式,只是规范,在业务开发特殊场景下还是要打破的。

例如下单的场景,每张订单除了用户ID,还会存一下用户地址,有的人就说怎么就打破了第三范式了,可是我们是为了区别用户存在多个收货地址的情况,帮别人代购的情况,这样的情况下就会在用户表有地址字段,订单表也会有地址字段~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值