1.反规范化设计的前提
反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。
2.反规范化设计的优点
能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。
3.反规范化设计的缺点
反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。
4.反规范化设计的方法
1.增加冗余列:
在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作。
2.增加派生列:
在表中增加可以由本表或其他表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数。
3.重新组表:
将需要经常连接的表重新组合成一个表,减少连接操作而提高性能。
4.水平分割表:
根据一列或多列数据的值,将数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
5.垂直分割表:
将表按照列的关系进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少I/O次数。
5.优缺点
好处
降低连接操作的需求:
减少表之间的连接操作,提高查询效率,特别是对于复杂查询而言。
降低外码和索引的数目:
减少了数据的索引和外键,降低了数据库的维护成本和存储开销。
可能减少表的数目:
通过重新组织数据,将原本分散的信息整合到一个表中,减少了表的数量,简化了数据库结构。
缺点
数据的重复存储:
增加了数据的冗余,浪费了磁盘空间,可能导致数据一致性的问题。
可能出现数据的完整性问题:
由于数据的冗余和重复存储,增加了数据维护的复杂性,可能导致数据一致性的问题。
降低修改速度:
数据的冗余和重复存储增加了数据的维护成本,可能会降低数据的修改速度。