数据库范式的目的是为了减少数据冗余,解除数据之间的业务耦合,提升灵活性。
范式的优点和缺点
优点
范式化的更新通常比反范式要快
当数据较好的范式化后,很少或者没有重复的数据
范式化的数据比较小,可以放在内存中,操作比较快
缺点
通常需要进行关联
反范式的优点和缺点
优点
所有的数据都在同一张表中,可以避免关联
可以设计有效的索引
缺点
表格内的冗余较多,删除数据时候会造成表有些有用的信息丢失
案例
在企业中很少能做到严格意义上的范式或者反范式,一般需要混合使用。
比如缓存衍生值,在论坛系统中我需要统计每个用户发了多少条消息,我们可以每次执行一个昂贵的子查询来计算并显示它,也可以在user表中新建一个num_messages列,每当用户新发消息或删除消息时来更新这个值。
在阿里巴巴的《深入MySQL实战》一书中,也指出可以适当荣誉,平衡范式,避免3 个以上表Join。