反规范化设计的前提

反规范化设计是规范化设计后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的

反规范化设计的优点

减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率

反规范化设计的缺点

带来数据的重复存储,浪费额外的磁盘空间,并且一份数据多处存储,增加了维护的复杂度

反规范化设计的方法
  • 添加冗余列:在多个表中保留相同的列,通过增加冗余减少或避免查询时的连接操作
  • 增加派生列:在表中增加可以由本表或其他表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数
  • 重新组表:将需要经常连接的表重新组合成为一个表,减少连接提高性能
  • 水平分割表:根据一列或者多列数据的值,将数据放到多个独立的表中
  • 垂直分割表:将表按照关系进行分割,将主键与部分列放到一个表中,主键与其他列放到另一个表中,在查询时减少IO次数。