移动电话的用户每月都会查询自己的账单,账单信息一般包含用户的名字和本月消费的总额,设想一下,如果用户的姓名和属性信息存放到在一个表中,假设表名为A,而用户的编号和他对应的账单信息存放在另一个表B中,那么,用户每次查询自己的月账单时,数据库查询时都要进行表连接,因为账单B并不包含用户的名字,所以必须通过关联A表取过来,如果在数据库设计时考虑到这一点,就可以在B表增加一个冗余字段存放用户的名字,这样在查询账单时就不用再做表关联,可以使查询有更好的性能。
反规范的好处是降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,相应带来的问题是可能出现数据完整性的问题。加快查询速度,但会降低修改速度。因此决定做反规范时,一定要权衡利弊,仔细分析应用的数据存取需求和实际的性能特点,好的索引和其他的方法经常能够解决性能问题,而不必采用反规范这种方法。
在反规范之前,要充分分析考虑数据的存取需求、常用表的大小,一些特殊的计算、数据的物理存储位置等。常用的反规范技术有,增加冗余列、增加派生列、重新组表和分割表。