私は投票システムを作成し、次のような行として投票テーブルに投票を記録しました。
post_id | user_id | votes | date
次に、この投票を次のような構造を持つuser-metaテーブルに追加します。
user_id | meta_key | meta_value
このテーブルでは、「votes」のmeta_keyを持つuser_idを指定して、post_idの配列をmeta_valueとして保存または取得できます。
私が2つのテーブルに1票を保存する理由は、
1.なぜ投票テーブルを使用するのですか?
すべての投稿でvote_totalとvote_popularityを計算する必要があります。これは、ユーザーのメタテーブルの配列の要素としてのみ保存する場合は簡単ではありません。
2.なぜユーザーメタテーブルを使用するのですか?
ユーザーがすでに投稿に投票したかどうかを確認する必要があります。ユーザーメタは、設定されるとキャッシュされます。したがって、in_array($ post_id、$ my_voted_posts)のチェックを行うだけで済みます。user-metaテーブルがない場合、ユーザーがアクセスする投稿ごとに、投票テーブルを確認する必要があります。
もっと良い方法はありますか?
私の投票システムはうまく機能していますが。しかし、どういうわけか、これはこれを行うための効率的な方法ではないと感じています。パフォーマンスを向上させるためにどのように改善できるかについて、専門家に相談したいと思います。ありがとう!