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 メソッドに似ていますが、代わりに

各投稿が来るのを監視し、「それらをカウント」して、ルールの状態をユーザープロファイルに保存する単純なルールがあります。

「それらを数える」という言葉は、すべてを 1 つの表に記録する方がよいという意味ですか?

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_countusersます。の場合post_count > 30、を設定しhas_thirty_posts = trueます。

スキーマを保存する方法は他にもあります。これは非常に単純化したものですが、アイデアが得られるはずです。これは、非正規化(つまり、冗長データの保存)とも呼ばれます。

于 2011-03-03T02:06:04.583 に答える