Три таблицы рекордов:

Учетные записи, пользователи и роли

Пользователи могут принадлежать к нескольким учетным записям с разными ролями.

В настоящее время у меня есть объединенная таблица:

Account_users_roles (с тремя столбцами для отношений FK для каждой таблицы PK.)

Первичный ключ в этой таблице (accounts.id, users.id, roles.id)

Есть ли более эффективный способ установить эти отношения?

РЕДАКТИРОВАТЬ: Роли и пользователи могут быть разделены учетными записями. Учетные записи назначают роли пользователей.

1
user1730452 15 Апр 2020 в 04:50

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, чтобы указать незаполненную роль.

1
Schwern 15 Апр 2020 в 02:35