Hay muchas maneras de pelar este gato, algunas técnicas que se me ocurren:
1. Eliminar todos los papeles y vuelva a insertar
Este es un enfoque directo. Elimine todas las funciones para el usuario y simplemente vuelva a insertar. Normalmente, el usuario solo pertenece a algunas funciones (menos de 10). Además, existe una buena posibilidad de que ningún otro enlace de claves foráneas a esta tabla de muchos a muchos.
2. Realizar un seguimiento de los cambios y se aplican únicamente a los cambios
Esto es más trabajo pero más eficiente, aunque sólo ligeramente en este caso. Herramientas como ORMs
hacen que el seguimiento y la aplicación de este tipo de cambios sea muy fácil.
3. Aplicar los cambios a medida que el usuario realiza el cambio
En este caso Asumo que es aceptable para aplicar los cambios DB como los asociados de usuario final del usuario para roles. Quizás es una base de datos local y cada transacción es de corta duración. Pero creo que este es un escenario poco probable.
No creo que haya nada malo en este caso en particular para eliminar y volver a insertar.
es por eso que tenemos parámetros, pasa el ID de usuario y el ID de rol como un parámetro y luego lo hace: 'ELIMINAR FROM MyTable WHERE ID de usuario = @UIDID Y roleID = @ ID de rollo – JonH
Esto es realmente una mejor pregunta de lo que parece en la superficie. Si tiene una IU que le permite editar los muchos lados de la tabla y la actualiza en modo por lotes cuando el usuario acierta a guardar (en lugar de hacerlo de uno en uno), es posible que otro usuario modifique la tabla debajo de usted para que no esté 'seguro si, por ejemplo, otro usuario agregó roles mientras el usuario actual estaba editando en la interfaz de usuario – JohnFx