1

stackoverlow 数据库结构在某处可用吗?

我正面临这样一种情况,即我有 Table1 与有关某事的信息和 Table2 与有关 Table1 的数字信息的 1:n 关系。就像我们在这里有关于堆栈溢出的用户和答案。

我需要快速访问数字信息的总和(比如 SO 可以快速访问用户的声誉总和),我想知道是否在 Table1 上添加一列来存储总和并在每次更新 table2 时更新它每次需要该信息时,我都会汇总 table2 上的所有记录。

SO也有同样的情况,而且似乎处理得很好。我想知道他们使用哪种方法。

4

2 回答 2

1

是的,我们将其非规范化为我们随时间更新的数据库字段。我们过去常常通过执行连接/求和来进行重新计算(它偶尔会漂移),但这很痛苦——而且我们一开始不喜欢它不同步。所以现在,我们保留了一个特定的商店来记录随着时间​​的推移而发生的声誉变化——更直接和准确的历史记录。

于 2012-05-03T11:23:09.617 回答
0

您的情况不是由帖子、回复和代表之间的 SO 关系定义的。您有一个完全通用的数据库情况,您需要对与标题记录关联的值求和。

你有两种常用的方法来解决这个要求

  1. 当您需要值时,使用 SQL 可用的聚合方法对值求和
  2. 添加新行时对值求和,并将其存储在标题中

两者各有利弊,但主要考虑1个权衡

  1. 保持数据完整性 (pro),性能受阻 (con)
  2. 可能的数据损坏(con),性能不受阻碍(pro)
于 2012-05-03T11:24:53.003 回答