使用其他数据库值计算的Field的数据库设计

时间:2010-09-22 15:46:42

标签: database-design

对于依赖于投票等因素的评级系统,他们如何存储声誉?例如。计算器。

  1. 他们每次加载页面时都会计算出来吗?例如。搜索所有帖子并添加和倍增?
  2. 将其存储在用户表的信誉字段中,并在每次投票时将其递增?
  3. 实现这样的事情最有效的方法是什么?

2 个答案:

答案 0 :(得分:3)

有一种方法可以解决所有情况,而不仅仅是这个。

首先,您了解您的数据以及它的使用方式比任何人都好。您必须在设计中应用这些知识。这就是为什么几乎每个数据库问题都正确回答“依赖”,就像这个问题一样。

你在其他时间交易时间。

您可以花时间保持每次更改的计算值。选项2。

每次需要将值返回到报表/页面/服务调用时进行计算。选项1。

如果您对该值进行了大量查询,但它只是经常更改...您真的只想缓存该值。您将存储计算而不是不断重新查询。

如果它变化很快,但你每天报告一次......维持该值所需的所有开销和它所引入的争用(读取:可扩展性限制)比每天计算一次更加繁重。

在该示例中,您有一组定义明确的有限操作,这些操作可能会影响用户的代表。这些枚举函数中的每一个都可以轻松地调用一个函数,该函数获取user_ID和数量并更新该列/属性。这些行动的发生频率低于报告的数量;因为读取超过写入...

对您来说重要的是什么? 这也取决于对你来说重要的事情。

让我们说在SO的情况下,他们想要预先计算数字,但报告一个稍微不正确的数字的惩罚很低。 (你觉得Jon Skeet为最近的一个upvote出汗了吗?)但是这些更新确实减慢了网站的速度......例如。由于页面加载速度是业务值高于其他所有值的,因此您可以违反上述准则。

同样,只有您可以决定您的业务的真实性。

答案 1 :(得分:2)

2号 - 为什么将其链接到页面加载?