MySQL отношение таблицы «многие ко многим» с тремя объектами - PullRequest
1 голос
/ 15 апреля 2020

Три таблицы записей:

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

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

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

accounts_users_roles (с тремя столбцами для связей FK с каждой таблицей PK).

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

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

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

1 Ответ

1 голос
/ 15 апреля 2020

Из комментариев я понимаю, что бизнес-правила заключаются в том, что у пользователя много ролей для многих учетных записей. Джо является менеджером учетной записи ConHugeCo, а также обслуживает клиентов EvilIn c. Кэти является президентом парикмахерского клуба, а также клиентом.

Да, подходит один стол.

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 гарантирует, когда пользователь или учетная запись или роль удаляются, их запись в таблице присоединения удаляется. И мы избегаем повторяющихся записей, поскольку делает комбинацию пользователь / учетная запись / роль уникальной .

. Вы можете wi sh, чтобы позволить user_id быть нулевым для обозначения незаполненной роли.

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