2012-02-17 22 views
7

私は、ユーザーが持つことができる許可された各ロールのレコードを格納する多対多テーブルを持っています。ユーザーが自分の役割を更新(追加、削除)した場合、どのように対処すればよいですか?多対多リレーションシップでの更新

まず、すべてのユーザーロールを削除してから、選択したロールを追加する必要がありますか?または、何らかのマッチングをしますか?

+0

私たちがパラメータを持っている理由は、あなたはuserIDとroleIDをパラメータとして渡してから、次のようにします: 'MyTable WHERE userID = @UserID AND roleID = @ RoleID' – JonH

+1

これは実際には表面。ユーザがテーブルの多くの面を編集し、一度に1つずつ行うのではなく、保存をヒットしたときにバッチモードで更新できるUIを持っていると、別のユーザがあなたの下にあるテーブルを変更できる可能性がありますたとえば、現在のユーザーがUIで編集している間に他のユーザーがロールを追加した場合などはどうでもよい – JohnFx

答えて

6

この猫を肌には多くの方法、私は考えることができるいくつかのテクニックがあります。

1.このストレートなアプローチであるすべてのロールを削除し、再挿入
。ユーザーの役割をすべて削除して、再度挿入します。通常、ユーザーは少数のロール(10未満)にしか属しません。また、他の外部キーがこの多対多のテーブルにリンクしていない可能性もあります。

2.変更のキープトラックとこれだけでも少しこのケースであれば、より多くの仕事が、より効率的であるだけ変化
を適用します。 ORMsのようなツールは、これらのタイプの変更を追跡して適用しやすくします。

3.ユーザは、私は、エンドユーザがロールにユーザを関連付けるように、DBの変更を適用するために許容可能であると仮定し、この場合の変化
を行うように変更を適用します。おそらくそれはローカルデータベースであり、各トランザクションは短命です。しかし、これはありそうもないシナリオだと思います。

私はこの特定のケースが削除して再挿入するのに間違っているとは思わない。

1

人が役割を削除すると、なぜuserIDroleIDを渡してそのレコードを削除しないのでしょうか? 特定のuserIDのロールIDをすべて削除してから、もう一度それらのIDを再度読み込みたいのですが?上記の私のコメントから

、パス2のparams: UserID

RoleIDは、その後、あなたが/削除するには、その一つのタプルを抽出することができます。

+0

UIの設定方法はチェックボックスを使用して設定されます。 – chobo

+0

@choboをチェックしたり、あなたは 'IN'などを使うことができます。どちらの方法でもたくさんの役割がない場合は、単にすべてを削除し、チェックしたものだけを読み込むことができます。 – JonH

+0

@JonH:おしゃべりしていて、ちょっと? – micahhoover

関連する問題