3

私はバッジシステムに取り組んでいます。これまでのところ、次のアイデアがあります。

基準で使用されるデータを格納する UserMeta テーブルを作成します。

UserMeta
===========================
user_id | posted_comment_count | flagged_comment_count | reputation | etc.

基準として使用するメタを追加する必要がある場合、列を追加する必要があるので、シリアル化されたオブジェクトをjsonなどで使用すると思います。 .

Badge という別のテーブル:

badge_id | badge_name | badge_criteria

バッジ基準は、次のようなオブジェクトを格納する json またはその他のシリアル化された形式です。

{
  'posted_comment_count': '>= 20',
  'flagged_comment_count': '=10',
}

ユーザーをバッジに関連付ける別のテーブル (単純な関連付けテーブル)

私は Doctrine2 を使用していますが、Event を使用して UserMeta を更新します。

フィードバック、推奨事項はありますか?

4

1 に答える 1

3

ゲーミフィケーション用の私のデータベースは非常にシンプルです。名前という単一のフィールドを持つ「通貨」のテーブルがあります。「UserCurrency」のテーブルがあります。これには、ユーザーの ID、獲得した通貨の ID、および獲得した金額の整数が含まれています。もちろん、User テーブルがあります。

以上です。

私は Django を使用しているため、意味をなさないものもあるかもしれませんが、基本的にはデータベース上のイベントをリッスンするイベント リスナーがあります。ユーザーがデータベースへのヒットにつながる何かを行うと、イベント リスナーは関数の配列をロールスルーします。各関数には、バッジが授与される可能性があるターゲット言語の簡単な基準が含まれています。ユーザーがその基準を満たした場合、バッジが授与されます。(「通貨」は、「投稿数」、「応答数」、さらには「ポケ数」の場合もあります。金銭的価値と間違えないでください。追跡したいものの集計にすぎません。 .

これは、追跡している特定のものに関する詳細でデータベースのスキーマを混乱させることなく、スコアを維持するための非常にシンプルで完全に拡張可能なアカウンティング メカニズムです。プロファイルなど、他のユーザー追跡の詳細からは完全に独立しています。新しい通貨を追加したい場合、何か新しいものを追跡し、関連付けてバッジを授与する場合は、その名前を通貨テーブルに追加します。これには、通貨が授与される方法に関する一連のルール、しきい値に関する一連のルールが含まれます。ユーザーが何らかの確認を受け取り、それをユーザーに表示する方法と、賞の結果がどうなるかを決定するのはあなた次第です。

また、ルールは相互に関連付けることができます。Stack Overflow はこれを非常に (非常に!) うまく行っています。たとえば、サイトにアクセスすると、トリガーされたルールは通貨ではなく、「愛好家」バッジの訪問日数をカウントします。評判を得るたびに、スコアが 200 を超えた場合、コードは通貨カウンター「レジェンダリー」を 1 だけ更新し、その通貨が 150 に達すると、別のトリガーが「レジェンダリー」バッジを授与します。デカップリングと独立性は、ゲーミフィケーション デザインの強力なツールです。

于 2011-09-02T05:16:42.123 に答える