1. 本着尽可能精简的原则设计,也就是能不存就不存。
2. 根据产品需求、运营需要、商务策略、客户要求、技术复杂度等各种因素,综合评估确认需要冗余,再冗余。并且此时依然要考虑 1 里的描述。在效率和复杂度上把握平衡。
有些情况冗余字段的效果很好,有些则没多大意义。
例如简单的数学计算,递增递减,在每次数据变化时提前计算好结果放到冗余字段里,就比取出来一个再一个个算要合算。当然,也可以不冗余字段,客户端或前端显示时计算。但这样又会把业务逻辑放到前台,带来更新上的效率问题。
又例如每次计算冗余结果时,本身就要对数据库进行查询,当数据稍微多一些或关联多一些,性能就会急速下降,这种就不合适冗余字段来处理,可以上缓存。如果确定冗余时查询的内容复杂度不会变多,比如固定 200 条或 300 条,更改架构添加缓存较为复杂,那又可以冗余字段来处理。
总之,这是很依赖实际情况的,项目不同,技术选型不同,人也不同,做的选择和倾向性也会不同。
个人观点,供参考。
@
cingular #2