什么是三范式呢?
1.第一范式(1NF):确保每一列的原子性(做到每列不可拆分)
2.第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个表只做一件 事)
3.第三范式(3NF):在第二范式的基础上,消除传递依赖
什么是反三范式?
反三范式是基于第三范式所调整的,没有冗余的数据库未必是好的数据库,有时为了提高运行效率,就必须降低 范式标准,适当保留冗余数据。基于业务的需要合理设计数据库
一范式表示图片:
这里的话就是违背了第一范式,因为中国和北京是可以拆分开的。并没有保证每一列的原子性
二范式表示图片:
第二范式表示一张表只做一件事,意思是只传递一个主线信息,比如下图,每张表都有唯一要表达的事情。
三范式表示图片:
三范式的话就是列与列之间,没有传递性,也就是说,如果其中一列可以通过其他列经过计算得到,那么就是违反了第三范式,也就是传递依赖。比如这里的总金额,可以通过单价和数量得到,所以就违背的第三范式。
反三范式:
那么在三范式的基础上,加入有这样两张表:
如果此刻需求是想查询某个用户的企业,那么就需要进行两次查询,此时虽然满足了三范式,但是无疑降低了我们的查询效率,让我们的操作变的复杂起来,那么在三范式的基础上,做适度的冗余,提升我们的查询效率,就是我们的反三范式:那么这样,上面的两张表就可以合成一张表:
那么这样,我们就可以很快的查询到用户的企业名称。