Обновление в отношениях многих ко многим - PullRequest
7 голосов
/ 18 февраля 2012

У меня есть таблица «многие ко многим», в которой хранится запись для каждой разрешенной роли, которую может иметь пользователь. Если пользователь обновляет свои роли (добавляет и удаляет) роли, как мне справиться с этим?

Должен ли я сначала удалить все роли пользователей, а затем добавить выбранные? Или сделать какое-то совпадение?

Ответы [ 2 ]

7 голосов
/ 18 февраля 2012

Есть много способов снять кожу с этой кошки, несколько техник, о которых я могу подумать:

1. Удалить все роли и повторно вставить
Это простой подход. Удалите все роли для пользователя и просто вставьте заново. Обычно пользователю принадлежат только несколько ролей (менее 10). Кроме того, существует большая вероятность того, что никакие другие внешние ключи не ссылаются на эту таблицу «многие ко многим».

2. Следите за изменениями и применяйте только изменения
Это больше работы, но более эффективно, даже если в этом случае немного. Такие инструменты, как ORMs, упрощают отслеживание и применение таких изменений.

3. Примените изменения, когда пользователь вносит изменения
В этом случае я предполагаю, что допустимо применять изменения БД, поскольку конечный пользователь связывает пользователя с ролями. Возможно, это локальная база данных, и каждая транзакция недолговечна. Но я думаю, что это маловероятный сценарий.

Не думаю, что в данном конкретном случае есть что-то неправильное для удаления и повторной вставки.

1 голос
/ 18 февраля 2012

Если человек удаляет роль, почему бы не передать userID и roleID и удалить эту одну запись?Почему вы хотите удалить все roleID для определенного userID, а затем снова их прочитать?

Из моего комментария выше введите два параметра: UserID и RoleID

Затем выможет удалить / извлечь этот единственный кортеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...