@I_suss

Хорошее ли решение разделение таблиц юзер и роли?

подскажите, делаю сайт (Spring), у сайта есть система ролей, юзеры и роли хранятся в бд(PostgreSQL), я разделил таблицы, юзеры в одной таблице, роли в другой, роли прикрепляются к юзерам при помощью их id которые хранятся в отдельной колонке в таблице "РОЛИ".
Подскажите, удачное такое решение или нет ? или лучше все сделать в одной таблице ? или же каким то другим способом ?
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
@alexalexes
Вы выделили в системе два класса сущностей. Одна - Пользователь, вторая - Роль.
Под каждый класс нужна отдельная таблица.
Как определить какие взаимоотношения между этими классами?
Нужно примерить следующие коммутативные гипотезы:
Первая пара гипотез:
"Один пользователь должен (может) иметь только одну роль."
"Одна роль должна (может) быть назначена многим пользователям."
Вторая пара гипотез:
"Один пользователь должен (может) иметь несколько ролей."
"Одна роль должна (может) быть назначена многим пользователям."
Если в вашей архитектуре системы справедлива первая пара гипотез, то вы строите взаимоотношение между классами Роль и Пользователь как "один ко многим". Это значит, что у таблицы Пользователь будет внешний ключ в виде идентификатора роли, тем самым вы каждому пользователю сможете назначить только одну роль. Но сами роли могут повторятся у разных пользователей.
Если в вашей архитектуре системы справедлива вторая пара гипотез, то вы строите взаимоотношение между классами Роль и Пользователь как "многим ко многим". Для этого нужно создать промежуточную таблицу, например Пользователь_и_роль, в которой будут два внешних ключа - идентификатор пользователя и идентификатор роли пользователя (можно, но технически нужно еще создать еще идентификатор первичного ключа, чтобы можно было корректно обращаться к записям этой таблицы, не путая их). В этом случае каждому пользователю можно выделить целый набор ролей, не ограничиваясь одной ролью.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
Судя по всему, вы пытаетесь реализовать RBAC, и да, они должны лежать в отдельной таблице, подробнее можно погуглить наиболее подходящее конкретно в вашем случае решение, или посмотреть готовые реализации на гитхабе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы