一.首先,范式是什么?
范式是数据库规范化的一个手段, 是设计数据库表结构时的原理,用于减少数据的冗余和增强数据的一致性。
什么是规范化?
1.规范化通常是指将大表分成较小的表,并且定义他们之间的关系。
例子(范式):
上图依次是课程表,学生表,以及学生课程关系表。
我们可以通过三张表的join得出这个学生上的是什么课程。
规范化的目的是什么?
1.避免冗余(重复)存放数据。
例子(反范式):
设想一下,在范式的情况下,张三和李四要上英语数学课是这样的(这是没有重复的):
而在反范式的情况下是这样的(是存在重复的,性别,课程,名称都存在了重复):
数据规范化(范式)的实质可以归纳为:简单写,复杂读。
简单写:对于不同的信息,只要修改不同的表即可。(比如我想修改学生信息,或者新增课程,只要修改对应的一张表即可)
复杂读:反范式的情况下,我们只要查找一张表就能得出我们想要的结果。而范式得情况下我们需要join另外的两张表才能知道张三上的什么课,如果连接的表很多,将会导致很多随机I/O,那么查询可能会非常慢。
二.反范式是什么?
反范式是试图通过增加冗余数据来优化数据库读取性能的过程。
就像上面的例子,你读一张表快,还是join两张表那?
反范式的实质可以归纳为:简单读。
三.总结
在最初的表结构设计时应该按照范式的来,这样写代码会比较简单一些,因为更加的清晰明了,但是随着数据量的增长或者访问量的上升时应该考虑到使用反范式(也就是冗余一些字段),来提升读的性能。