#mysql #orm #relational-database #typeorm
#mysql #orm #реляционная база данных #typeorm
Вопрос:
Я довольно новичок в проектировании баз данных и мог бы использовать некоторые рекомендации по проекту, над которым я работаю.
У меня есть три существующие таблицы accounts
, users
, и таблица соединений, представляющая вызываемое отношение «многие ко многим accounts_users
» .
Как вы можете догадаться, accounts_users
таблица выглядит следующим образом:
| accountId | userId |
| --------- | ------ |
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
Мне нужно добавить роли для пользователей, где пользователь может иметь отдельную роль для каждой учетной записи, к которой он принадлежит.
Я создал таблицу ролей (содержащую id
и name
), но ищу указания относительно того, каким будет следующий шаг, чтобы создать связь между таблицами roles
и accounts_users
.
Должен ли быть добавлен дополнительный столбец в accounts_users
таблице, содержащий roleId
или должна быть добавлена другая таблица соединений?
Спасибо!
Комментарии:
1. Я бы добавил столбцы ролей в таблицу соединений с внешним ключом к таблице ролей, которая содержит данные об обогащении ролей (например, описание). Вы также можете подумать, истекает ли время ролей (например, временная доверенность)
Ответ №1:
Вполне нормально хранить дополнительные данные в вашей таблице соединений. Однако вы можете использовать разные подходы, в зависимости от реального значения вашей сущности «роль».
- Если с каждой парой учетная запись-пользователь связана своя уникальная роль (соотношение 1: 1), вы можете создать
name
столбец непосредственно вaccounts_users
таблице. - Если одна единственная роль разделяется между несколькими парами учетная запись-пользователь (отношение 1: N), вы должны использовать отдельную
roles
таблицу и соединить таблицы, добавивroleId
внешний ключ вaccounts_users
таблицу (так же, как вы написали сами).
Второе решение также подходит, когда объект роли содержит большой объем информации (не только несколько столбцов name
), поэтому нежелательно портить таблицу соединений несвязанными и, возможно, ненужными данными.
Комментарии:
1. Второй пункт — это то, что я имел в виду, поэтому я пойду по этому пути. Большое вам спасибо!