在数据库中建表原则上必须遵守三大范式!

                1.首先我们得知道三大范式是干什么用的?

                2.什么是三大范式?

        

       如果有一张这样的表:

数据库之三大范式详解!_数据库

        

    我们该如何将它存入数据库?

        如果产品名字字段同时存下两件商品那是典型的“非规范化”的建表!

      因此我们需要将它拆分!

数据库之三大范式详解!_数据库_02

 

数据库之三大范式详解!_数据库_03

注意:这个时候表3的主键是订单号,而表4的主键是(订单号、产品编码)是一个复合主键!

  这样拆分的话,一个表就只有一个值,那么这就是 “第一范式“!

 

但是我们思考一个问题,如果我们添加一个商品,比如说添加 ”蜡烛“ ,但是我们发现产品名称和单价并不依赖订单号,

因此我们没法将这根”蜡烛“加入到这张表中。

因此如果要有添加的操作就必须再拆分!

数据库之三大范式详解!_数据库_04

数据库之三大范式详解!_数据库_05

 

图4.1还是复合主键,而图4.2则拆分出来了。

这种所有属性仅仅依赖于主键的情况就是第二范式!

图3本身就是第二范式了,但是我们这里发现 订单号能决定用户id,id决定用户的名称,这里就出现了依赖传递的现象:

订单号>用户id>用户名称,这里的用户信息无法单独管理。

因此继续拆分!

数据库之三大范式详解!_数据库_06

 

数据库之三大范式详解!_数据库_07

 

当表中没有依赖传递的时候,我们就可以称之为”第三范式“!

 

  总结:当我们在建表的时候,如果不遵循三大范式原则,就是违反了规范化建表,虽然到了第三大范式整个表都被拆分的很小,

但是整个逻辑是会比较清楚的,因为第三范式的目的是要消除传递依赖,当这个表拆分成了多个表的时候我们 ”join“ 起来是非常

耗时的,因此当需要兼顾查询效率的时候字段可以考虑反第三范式,特别是在高查询低修改的时候。