首页 > 何谓反范式?什么情况需要做反范式设计?

何谓反范式?什么情况需要做反范式设计?

何谓反范式?什么情况需要做反范式设计?
另外,遵循范式的意义又是什么?我看书上解释是解决插入异常,删除异常,读取异常等,减少数据冗余,那么反范式是否会导致出现这种异常?


反范式也并不是完全不遵守范式。个人感觉就是可以适度的增加冗余,来提高查询速度。完全来遵照范式,那么可能会导致数据库表的增加,查询效率可能会下降。但是如果直接插入一条看起来冗余的数据,一个简单的单表查询就解决了,速度必然比多表联查快很多。


反范式,denormalization,字面上就是做范式的反义词,事实上也是。遵循范式总体上来说是为了保证数据的integrity和减少冗余,但是,从直觉上我们就可以知道,一个完全按照范式设计的冗余极低的数据库,很可能在性能上会输给冗余相对多一些的数据库(比如说3NF的数据库,表多,关系复杂,数据库的IO次数很多,性能会收到影响)。增加冗余而提高性能,这便是denormalization的意义。至于说很多可能的异常,规避或者减轻的的手段有很多,是否遵循范式并不是唯一因素,denormalization也并不会导致出现异常。


在问出这个的时候我假设你已经了解关系型数据库的三范式。
做范式的目的在于:

范式等级与复杂度是递进的
通过范式的不断升级,我们会发现应用的范式等级越高,则表越多。表多会带来很多问题:

而现在的情况,磁盘空间成本基本可以忽略不计,所以数据冗余所造成的问题也并不是应用数据库范式的理由。

小tips,如果你确定需要反范式化设计,那么我推荐你在第三范式的基础下进行反范式,这样无论数据组织还是可读性都可以选择一个折中

【热门文章】
【热门文章】