2012-02-17 14 views
7

Ho una tabella molti-a-molti che memorizza un record per ogni ruolo consentito che un utente può avere. Se un utente aggiorna i ruoli (aggiungi e rimuove) i ruoli come devo gestirlo?Aggiornamento in relazione molti-a-molti

Devo cancellare prima tutti i ruoli degli utenti e poi aggiungere quelli selezionati? O fai qualche tipo di abbinamento?

+0

ecco perché abbiamo i parametri, si passa l'ID utente e il ruoloID come parametro e quindi si esegue: 'ELIMINA DA MyTable WHERE userID = @UserID AND roleID = @ RoleID' – JonH

+1

Questa è in realtà una domanda migliore di quella che sembra la superficie. Se hai un'interfaccia utente che ti consente di modificare i molti lati della tabella e aggiornarla in modalità batch quando l'utente fa clic su Salva (anziché eseguirli uno alla volta) è possibile che un altro utente possa modificare la tabella sotto di te in modo da non dover Sono sicuro che, ad esempio, un altro utente ha aggiunto dei ruoli mentre l'utente corrente stava modificando nell'interfaccia utente – JohnFx

risposta

6

Ci sono molti modi per la pelle questo gatto, alcune tecniche che posso pensare:

1. Eliminare tutti i ruoli e reinserire
Questo è un approccio diretto. Rimuovi tutti i ruoli per l'utente e reinserisci. Normalmente l'utente appartiene solo a pochi ruoli (meno di 10). Inoltre, ci sono buone probabilità che nessun'altra chiave esterna si colleghi a questa tabella molti-a-molti.

2. Tieni traccia dei cambiamenti e applicare solo le modifiche
questo è più lavoro, ma più efficiente, anche se solo leggermente in questo caso. Strumenti come ORMs rendono il rilevamento e l'applicazione di questo tipo di modifiche un gioco da ragazzi.

3. Applicare le modifiche come l'utente effettua la variazione
In questo caso suppongo che è accettabile applicare i cambiamenti dB come utente finale associa l'utente ai ruoli. Forse è un database locale e ogni transazione è di breve durata. Ma immagino che questo sia uno scenario improbabile.

Non penso che ci sia qualcosa di sbagliato in questo caso particolare da eliminare e reinserire.

1

Se una persona rimuove un ruolo per cui non passa il userID e roleID e rimuovere che un record? Perché dovresti voler cancellare tutti i roleID per uno specifico userID e poi riadattarli?

Dal mio commento di cui sopra, passare due params: UserID e RoleID

Quindi è possibile eliminare/estrarre quel singolo tupla.

+0

Il modo in cui l'interfaccia utente è impostato i ruoli sono impostati tramite caselle di controllo in cui è possibile selezionare o deselezionare più – chobo

+0

@chobo - quindi inviare più parametri , puoi usare 'IN' ecc. In entrambi i casi, se non ci sono troppi ruoli puoi semplicemente rimuovere tutti e solo quelli controllati. – JonH

+0

@JonH: grosso oltre loquace, giusto? – micahhoover

Problemi correlati