范式
第一范式(1NF) 列不可分
一个列表的值不能再分割。
例如,假设表中有一个列表示用户的爱好
这个列的值可是:足球 篮球 乒乓球
但是这个值是可以再分割的,分成三个值,分为:足球、篮球、乒乓球
第二范式(2NF) 要有主键
表中非主键列都必须依赖于主键列
例如,订单表中有订单编号,并且该列是主键列
注意,这几个非主键列中,产品生产地是不依赖于订单编号的,所以这个列不应该出现在订单表中
第三范式(3NF) 不可传递依赖
直接依赖于主键列,不能间接依赖于,不能依赖传递
例如,订单表中有订单编号,并且该列是主键
注意,顾客编号依赖于订单编号,顾客姓名依赖于顾客编号,从而顾客姓名间接的依赖于订单编号,那么这里产生了依赖传递
反范式设计(第三范式)
本质上:就是用磁盘(空间)来换取效率(时间),把数据冗余在多个表中,当查询时可以减少或者避免表之间的关联。
比如
ID | NAME | AGE | LEVEL | XUEYUAN |
---|---|---|---|---|
1 | 一只小小狗 | 21 | 大三 | 软件学院 |
这样的一个表明明 学院信息和你的等级 就应该采用范式分隔开,但是反范式的写法会有更多的可读性,增加了一点冗余以空间换取时间,对磁盘的消耗可以接受。