我应该从表中重新计算大量数据,还是应该将其保存在我的数据库中?

时间:2012-09-22 19:57:30

标签: mysql sql database database-design database-normalization

我的问题比一般情况更为笼统,但我正在使用一个例子来转移这个想法。

我有一个论坛,每次重播时都会显示用户拥有的消息数量。

假设在某些页面中有15个不同的用户,每个用户有超过20,000条消息,我应该通过计算用户拥有的消息表中的条目数来重新计算消息数量,还是更好地创建一个列包含此数据的users表,并在每次回复时更新列?

我知道它违反了数据库规范化规则,但每次计算它似乎都是一个很大的浪费。

我正在使用mySQL,如果重要的话。

4 个答案:

答案 0 :(得分:1)

您在谈论denormalizationQuoting wikipedia

  

非规范化是尝试优化读取的过程   通过添加冗余数据或分组来实现数据库的性能   数据

保持“普通”代码中的非规范化数据不是一个容易的问题。请记住:

  • 您可以使用触发器保留冗余数据。
  • 如果您的架构包含 ORM ,则更容易保留冗余数据。

答案 1 :(得分:0)

你也可以在你的非规范化中走一半:有一个每个用户每月数据的表,由月工作填写,并通过计算自月1日以来的消息+每月的总和来计算动态消息的数量数据。或者,如果您不需要月度数据,您仍然可以在一个月内实时计算+每月更新EOM图像的过程。这将避免触发......

答案 2 :(得分:0)

我很惊讶没有人提到过具体化的观点。在出于性能原因维护数据聚合而不违反实际数据规范化的情况下,这些对象非常有用。 Find out more

答案 3 :(得分:0)

您是否尝试过计算行数的结果? 我建议你只是在视图中进行计算。通过你提出的非规范化,你只是让自己面临数据损坏的风险。然后,帖子计数列将以一些任意值结束,这与帖子数量的实际情况无关。