私は、ユーザーが持つことができる許可された各ロールのレコードを格納する多対多テーブルを持っています。ユーザーが自分の役割を更新(追加、削除)した場合、どのように対処すればよいですか?多対多リレーションシップでの更新
まず、すべてのユーザーロールを削除してから、選択したロールを追加する必要がありますか?または、何らかのマッチングをしますか?
私は、ユーザーが持つことができる許可された各ロールのレコードを格納する多対多テーブルを持っています。ユーザーが自分の役割を更新(追加、削除)した場合、どのように対処すればよいですか?多対多リレーションシップでの更新
まず、すべてのユーザーロールを削除してから、選択したロールを追加する必要がありますか?または、何らかのマッチングをしますか?
この猫を肌には多くの方法、私は考えることができるいくつかのテクニックがあります。
1.このストレートなアプローチであるすべてのロールを削除し、再挿入
。ユーザーの役割をすべて削除して、再度挿入します。通常、ユーザーは少数のロール(10未満)にしか属しません。また、他の外部キーがこの多対多のテーブルにリンクしていない可能性もあります。
2.変更のキープトラックとこれだけでも少しこのケースであれば、より多くの仕事が、より効率的であるだけ変化
を適用します。 ORMs
のようなツールは、これらのタイプの変更を追跡して適用しやすくします。
3.ユーザは、私は、エンドユーザがロールにユーザを関連付けるように、DBの変更を適用するために許容可能であると仮定し、この場合の変化
を行うように変更を適用します。おそらくそれはローカルデータベースであり、各トランザクションは短命です。しかし、これはありそうもないシナリオだと思います。
私はこの特定のケースが削除して再挿入するのに間違っているとは思わない。
人が役割を削除すると、なぜuserID
とroleID
を渡してそのレコードを削除しないのでしょうか? 特定のuserID
のロールIDをすべて削除してから、もう一度それらのIDを再度読み込みたいのですが?上記の私のコメントから
UserID
と
RoleID
は、その後、あなたが/削除するには、その一つのタプルを抽出することができます。
UIの設定方法はチェックボックスを使用して設定されます。 – chobo
@choboをチェックしたり、あなたは 'IN'などを使うことができます。どちらの方法でもたくさんの役割がない場合は、単にすべてを削除し、チェックしたものだけを読み込むことができます。 – JonH
@JonH:おしゃべりしていて、ちょっと? – micahhoover
私たちがパラメータを持っている理由は、あなたはuserIDとroleIDをパラメータとして渡してから、次のようにします: 'MyTable WHERE userID = @UserID AND roleID = @ RoleID' – JonH
これは実際には表面。ユーザがテーブルの多くの面を編集し、一度に1つずつ行うのではなく、保存をヒットしたときにバッチモードで更新できるUIを持っていると、別のユーザがあなたの下にあるテーブルを変更できる可能性がありますたとえば、現在のユーザーがUIで編集している間に他のユーザーがロールを追加した場合などはどうでもよい – JohnFx