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