チェックボックスのリストへの変更をデータベースに保存するための最良の方法を探しています。これが私のセットアップです:
次のように、いくつかのデータベースエントリに基づいて、チェックボックスがオンまたはオフになっているチェックボックスのリストがあります。
Animals I like:
0 Cats
X Dogs
0 Birds
X Elefants
これで、ユーザーは自分の考えを完全に変更して選択Birds
および選択解除Dogs
できるようになりました。この変更をできるだけ効率的にデータベースに保存したいと考えています。
データベースが構造化されている方法では、ユーザー テーブル (user_id を持つ) と動物テーブル (animal_id を持つ) があります。「いいね」はピボット テーブルで追跡されます (多対多の関係であるため)。
ここに私が検討したいくつかのアプローチがありますが、他の/より良い/より効率的なものに興味があります:
1) 保存時に、このユーザーのピボット テーブル内のすべてのエントリを削除し、チェックしたエントリのみを入力します。
これには、前後の選択肢の多くを比較する必要がないという利点があります。欠点は、変更されていないエントリ (つまり、上記の例ではエレファント) を削除することです。たとえばエレファントのような作成タイムスタンプを付けると、その選択を変更しなくても毎回変更されます
2) 保存時に、データベースにクエリを実行して、すべてのオリジナルのいいね! のリストを取得します。このリストを新しいお気に入りと比較します。新しいリストにない元のいいねに遭遇するたびに、それを削除します。元のリストにない新しい類似品に遭遇した場合は、追加します。
これには、データベースへの変更のみを変更するという利点がありますが、非常に多くのクエリのようです。動物のリストが長く、多くの変更が加えられた場合、ループによって多くのデータベース トランザクションが発生する可能性があります。
したがって、この問題を解決するためのベスト プラクティスは何でしょうか。つまり、これは一般的な問題であるに違いなく、ここで車輪の再発明をしたくありません。