Так же, как резюме в стороне, хотя на вопрос ответили очень хорошо, нужно отметить это, если мы рассматриваем это как a:
универсальный вопрос о SQL
тогда реализация SQL довольно проста, поскольку SQL '99 позволяет линейную рекурсию в спецификации (хотя я полагаю, что никакие RDBMSs не реализуют стандарт полностью), через WITH RECURSIVE
оператор. Таким образом с теоретической точки зрения мы можем сделать это прямо сейчас.
Кажется, что таблица сопоставления хранит все роли, членом которых является каждый пользователь. Если это верно, я бы назвал таблицу UserRoles
.
Это правильно (IMO) множественное число, а не UsersRoles
, что звучит странно.
Действительно, используйте псевдонимы таблиц и выберите столбцы с одинаковыми именами отдельно с помощью селектора AS.
например, SELECT user.id AS user_id
Вы можете украсть страницу у Microsoft и назвать ее UsersInRoles .
У меня есть соглашение, которое мне легко понять сразу:
User
Role
User2Role
У нас такая же структура, и мы вызываем таблицу ссылок UserRoles.
Пользователь
или Пользователи
? которые заканчиваются на S? и т. д. "(я бы изменил это сейчас, если бы вы только начали проект) Пользователь
, Роль
и таблица внешних ссылок : UserRole
. UserRole
имеет гораздо больше смысла, чем RoleUser
. User_X_Role
или UserXRole
, если вы например, дополнительная многословность Я бы назвал таблицу ссылок так:
Remove_The_Surrogate_Primary_Key_From_The_Link_Table_Unless_You_Can_Prove_That_You_Really_Need_One
Мы всегда использовали имена двух таблиц, за которыми следовало слово «Ссылки». Итак, в вашем примере имя нашей таблицы будет «UsersRolesLinks».
Я всегда использовал что-то вроде: rel_user_roles
или relUserRoles
. Какая таблица идет первой, обычно зависит только от ее положения в модели данных.
Я бы предложил просто UsersRoles , так как это то, что он содержит.
Я бы назвал таблицу пользователей User
, таблицу ролей Role
и таблицу соединений UserRoles
.
Кстати, pk Идентификатор
на самом деле не требуется в таблице соединения. Лучше объедините UserId
и RoleId
вместе с pk или просто uk (уникальный ключ), чтобы обеспечить уникальные отношения User
- Role
.