范式化设计和反范式化设计优缺点

我们先来看一下范式化的优点,从前面的内容中呢,可以发现,范式化有以下优点,首先范式化的表呢,只有很少的,

或者几乎是没有冗余数据的,其次呢范式化的更新操作呢,比反范式化要更快,最后呢范式化的表呢,通常要比反范式化的表呢

更小,从上面来看呢,其实第一个优点,在范式化设计中呢,表的冗余要少,可以说是其最根本的优点了,才会使表更新的更快,

由于没有冗余数据,所以表的大小通常也会更小,这些有点看上去很不错,如果只看其优点,就应该在表的设计中呢,对表进行完全的

范式化设计,但是在前面的例子中,我们看到,并不是这样,所以我们要看看范式化的缺点是什么

从之前的例子中呢,我们不难看出,范式化的主要缺点是在于对于查询区查询需要关联多个表,

在我们当前的应用中呢,对表对数据库进行读操作呢,肯定是要远远高于写操作的频率,那么这种情况下呢,

可以提高写操作的性能,但是会降低读操作的性能,进行表关联的成本就很高的,而范式化设计中呢,就算是

再简单的查询也要关联一次表才能够实现,所以我们对表要适当的反范式化操作,减少关联的数量,那么范式化设计

的第二个缺点呢,就是使我们更难的对查询进行索引的优化,比如范式化可能会将经常一起使用的列呢,分在不同的

表中,这些列如果是在同一个表中的话,本来是可以是同一个索引的,而在不同的表中呢,就无法把他放到同一个索引

中了,以上就是范式化设计的缺点

同样我们要看一下反范式化设计的优缺点,从前面的例子中大家可以看到,反范式化优化后呢,经常一起查询的

大部分数据呢,就会在一张表中,这样就可以很好的减少表的关联操作,而对于不需要关联的表呢,大多数情况下呢,

最差的性能,也就是会进行全表扫描,就算数据比内存要大了很多,无法在内存中缓存所有表数据的情况下呢,使用全表

扫描的时候呢,也比关联操作要好一些,因为如果我们使用的是innodb存储引擎,而对表的全表扫描呢,使用的是顺序的IO,

这比关联的很多关联操作呢,要好的就在于大部分情况下呢,是随机IO,而反范式化的第二优点呢,我们对查询可以更好的

优化,如果我们查询所使用的列呢,全在一张表中,我们就可以使用覆盖索引,以获得最好的查询性能,而如果查询锁使用的

列在多张表中,我们就无法使用这种优化方式了

那么反范式化的缺点呢,其实就是我们为什么要进行范式化设计的原因,主要有以下两点,第一点就是反范式化

的表结构呢,存在大量的数据冗余以及大量的数据维护异常,而第二点呢,对数据的修改需要修改多个地方,

所以对数据的修改成本会更高,这个成本呢是CPU时间,磁盘IO等等这种硬件资源,或者系统资源,因为反范式化设计

的表呢,修改数据时呢,通常要修改多个地方,也会浪费更多的资源了

所以完全的反范式化和完全的范式化设计呢,都不是最好的,我们在设计数据库结构时呢,结合使用范式化设计和

反范式化设计,只有这样,才能设计出,符合我们需求的高性能数据库结构

到了这里我们就完成了我们数据库逻辑设计的阶段,下面我们就要进行我们的物理设计阶段了

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值