Три таблицы рекордов:
Учетные записи, пользователи и роли
Пользователи могут принадлежать к нескольким учетным записям с разными ролями.
В настоящее время у меня есть объединенная таблица:
Account_users_roles (с тремя столбцами для отношений FK для каждой таблицы PK.)
Первичный ключ в этой таблице (accounts.id, users.id, roles.id)
Есть ли более эффективный способ установить эти отношения?
РЕДАКТИРОВАТЬ: Роли и пользователи могут быть разделены учетными записями. Учетные записи назначают роли пользователей.
1 ответ
Из комментариев я понимаю, что бизнес-правила заключаются в том, что у пользователя много ролей для многих учетных записей. Джо является менеджером учетной записи ConHugeCo, а также обслуживает клиентов EvilInc. Кэти - президент Hair Club, а также ее клиент.
Да, уместна одна таблица.
account user role
ConHugeCo Joe Manager
EvilInc Joe CustomerService
HairClub Kathy President
HairClub Kathy Client
create table accounts_roles_users (
account_id integer not null references accounts(id) on delete cascade,
role_id integer not null references roles(id) on delete cascade,
user_id integer not null references users(id) on delete cascade,
unique(account_id, role_id, user_id)
);
on delete cascade
гарантирует, что пользователь, учетная запись или роль будут удалены , их запись в таблице соединения удаляется. И мы избегаем дублирования записей, делая комбинацию пользователя / учетной записи / роли уникальной.
Вы можете разрешить user_id иметь значение null, чтобы указать незаполненную роль.
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.