我的问题比一般情况更为笼统,但我正在使用一个例子来转移这个想法。
我有一个论坛,每次重播时都会显示用户拥有的消息数量。
假设在某些页面中有15个不同的用户,每个用户有超过20,000条消息,我应该通过计算用户拥有的消息表中的条目数来重新计算消息数量,还是更好地创建一个列包含此数据的users表,并在每次回复时更新列?
我知道它违反了数据库规范化规则,但每次计算它似乎都是一个很大的浪费。
我正在使用mySQL,如果重要的话。
答案 0 :(得分:1)
您在谈论denormalization。 Quoting wikipedia:
非规范化是尝试优化读取的过程 通过添加冗余数据或分组来实现数据库的性能 数据
保持“普通”代码中的非规范化数据不是一个容易的问题。请记住:
答案 1 :(得分:0)
你也可以在你的非规范化中走一半:有一个每个用户每月数据的表,由月工作填写,并通过计算自月1日以来的消息+每月的总和来计算动态消息的数量数据。或者,如果您不需要月度数据,您仍然可以在一个月内实时计算+每月更新EOM图像的过程。这将避免触发......
答案 2 :(得分:0)
我很惊讶没有人提到过具体化的观点。在出于性能原因维护数据聚合而不违反实际数据规范化的情况下,这些对象非常有用。 Find out more
答案 3 :(得分:0)
您是否尝试过计算行数的结果? 我建议你只是在视图中进行计算。通过你提出的非规范化,你只是让自己面临数据损坏的风险。然后,帖子计数列将以一些任意值结束,这与帖子数量的实际情况无关。