存储聚合数据是否违反数据库规范化?

BDu*_*elz 3 database normalization aggregation

在像SO这样的网站上,我确信绝对有必要存储尽可能多的聚合数据,以避免在每个页面加载时执行所有那些复杂的查询/计算.例如,存储每个问题/答案的投票计数的运行记录,或存储每个问题的答案数,或者查看问题的次数,以便不需要经常执行这些查询.

但这样做是否违反了数据库规范化或任何其他标准/最佳实践?这样做的最佳方法是什么,例如,每个表是否都有另一个聚合数据表,如果它存储在它所代表的同一个表中,何时应该更新聚合数据?

谢谢

Mit*_*eat 5

要记住的一句话是“归一化直到痛苦,反归一化直到起作用”

这意味着:规范您所有的域关系(至少为第三范式(3NF))。如果您测量到缺乏性能,请调查(并测量)非规范化是否会带来性能优势。

所以,是的。存储聚合数据“违背”规范化。

没有标准化的“最佳方法”。这取决于您对数据的处理方式。

非规范化应该与过早优化一样对待:除非您已经测量到性能问题,否则不要这样做。


nvo*_*gel 5

存储汇总数据本身并不违反任何正常表格.规范化仅涉及由于功能依赖性,多值依赖性和连接依赖性而导致的冗余.它不涉及任何其他类型的冗余.