在数据库中建表原则上必须遵守三大范式!
1.首先我们得知道三大范式是干什么用的?
2.什么是三大范式?
如果有一张这样的表:
我们该如何将它存入数据库?
如果产品名字字段同时存下两件商品那是典型的“非规范化”的建表!
因此我们需要将它拆分!
注意:这个时候表3的主键是订单号,而表4的主键是(订单号、产品编码)是一个复合主键!
这样拆分的话,一个表就只有一个值,那么这就是 “第一范式“!
但是我们思考一个问题,如果我们添加一个商品,比如说添加 ”蜡烛“ ,但是我们发现产品名称和单价并不依赖订单号,
因此我们没法将这根”蜡烛“加入到这张表中。
因此如果要有添加的操作就必须再拆分!
图4.1还是复合主键,而图4.2则拆分出来了。
这种所有属性仅仅依赖于主键的情况就是第二范式!
图3本身就是第二范式了,但是我们这里发现 订单号能决定用户id,id决定用户的名称,这里就出现了依赖传递的现象:
订单号>用户id>用户名称,这里的用户信息无法单独管理。
因此继续拆分!
当表中没有依赖传递的时候,我们就可以称之为”第三范式“!
总结:当我们在建表的时候,如果不遵循三大范式原则,就是违反了规范化建表,虽然到了第三大范式整个表都被拆分的很小,
但是整个逻辑是会比较清楚的,因为第三范式的目的是要消除传递依赖,当这个表拆分成了多个表的时候我们 ”join“ 起来是非常
耗时的,因此当需要兼顾查询效率的时候字段可以考虑反第三范式,特别是在高查询低修改的时候。