ユーザーのアクティビティがポイントで報われるアプリケーションがあります。特定のアクションに対して一定量のポイントを割り当てるポイント チャートがあります。
私の質問は、どちらのアプローチが優れているか、そして最も重要なのはなぜですか?
アプローチ 1 : - mysql で userPoints テーブルを作成し、ユーザー アクションごとにそこにポイントを挿入します。ユーザーが自分のプロファイルにアクセスしたら、データベースにポイント数を照会して表示します。
例:
ユーザーがアイテムを購入する
データベースをクエリする: ユーザー 2 の userPoints に 5 ポイントを挿入する ユーザー
が場所に従う
データベースをクエリする: ユーザー 2 の userPoints に 7 ポイントを挿入する
ユーザーがアイテムを販売
する データベースをクエリする ユーザー 2 の userPoints に -5 ポイントを挿入する
アプローチ 2 : - ポイントをテーブルに保存するのではなく、ユーザーが完了したアクションの数をカウントし (データベースからカウントとタイプを取得します)、実行時にアクションのタイプごとに一定量のポイントを掛けます。ポイント数が必要なときはいつでも(たとえば、プロフィールにアクセスしたときなど)
例:
ユーザーは自分のプロフィールにアクセスして
、データベースにクエリを実行し、所有しているアイテム、フォローされている場所、友情をカウントしてから、アイテム数x5、フォロー数x7、友情数x10を掛けて、その数を表示します
スティーブンの編集:
はっきりさせておきますが、これは私が取るべき行動の年表ですか?これを強化してクエリの数を減らすにはどうすればよいですか?
- アイテムの購入の actionId は 1 で、報酬ポイントは 5 です (これはデータベースのアクション テーブルで指定されています)。
- Kylie (ユーザー ID: 1) がアイテムを購入します。
- クエリ DB: ユーザー ID1 の userItems テーブルにアイテムを追加します。
- Query DB: userActions テーブルにアクションを登録 - userId: 1, actionId: 1
- Query DB SET userPointsTotal = userPointsTotal + ポイントが与えられます (次のように 2 つのクエリを 1 つにネストします: set userPointsTotal = userPointsTotal + (actuionid= 1 のアクションからポイントを選択))
- DB をクエリして userPointsTotal を取得し、Kylie のプロファイルに値を表示します
- 将来的には、テーブル userActions を参照して、特定のタイプのアクティビティ (社会的ステータスまたは所持ステータス) に応じて、ユーザーがステータス タイトルを取得できるようにします。