10

我一直在看 SO 的开源克隆,

http://github.com/cnprog/CNPROG

我不知道 Python/Django,但我仍然可以阅读发生了什么,

开发人员似乎只授予 cron 工作的徽章,奖励是通过方法颁发的,是必须满足的标准的“规则”才能获得奖励。

这个文件中,这是标准,

然而,在对best-way-to-store-badge-criteria的回答中,它说不要运行类似的查询,

"select count(*) from posts where user = :user"// for every post.

这有点像 CNPROG 方法,但改为

有一个简单的规则来观察每个帖子,并“计算它们”,将规则状态存储在用户配置文件中。

因此,通过“计算它们”一词,这是否意味着将所有内容记录在一张表中会更好,例如,

class UserStats

      int voteUpCount
      int voteDownCount
      int score  
      int commentCount
      int viewCount
      int offensiveFlagCount
      int imageCount
      int feedbackCount
      int commentEditCount
      int commentDeleteCount
      int questionCount
      int questionEditCount
      int questionDeleteCount

然后根据这些数据制定规则if(commentCount > 10)...,对用户发布的每条评论进行简单的处理,然后执行 SQL 查询

Q如果有人可以进一步解释问题best-way-to-store-badge-criteria的答案,但举一个“规则”、“标准”和数据库设计的例子

这些将与一些“每个用户操作”和 cron 作业一起使用以提供徽章


4

1 回答 1

5

是的 - 你的直觉是正确的。这本质上就是数据库人们所说的物化视图。例如,要为帖子数 > 30 提供成就,请执行以下操作:

posts {
   id,
   user_id,
   content
}

users {
   user_id,
   post_count,
   has_thirty_posts
}

将帖子插入posts表格时,将 1 添加到post_count表格users中。如果post_count > 30,设置has_thirty_posts = true

还有其他存储模式的方法。这只是一个粗略的简化,但它应该给你的想法。这也称为非规范化(即存储冗余数据)。

于 2011-03-03T02:06:04.583 回答