поместите логин и пароль в одну таблицу или в несколько таблиц для каждого типа пользователя?

У меня есть разные 3 типа пользователей, и каждый тип пользователя может иметь столбцы и отношения с таблицами, которых нет у другого типа, но все они имеют логин(уникальный) и пароль,
как бы вы поступили:

  • создать таблицу для каждого типа или
  • создать одну таблицу для всех из них или
  • создать таблицу для всех из них только для входа и пароля и отдельно для всех других вещей и связать их с FK
  • что-то иначе!--5-->

2 ответов


У меня был этот точный вопрос при создании недавней системы. Вот нить, которая была супер-полезной для меня:объектно-ориентированные структуры в реляционных базах данных.

Я пошел с решением непересекающихся подтипов, хорошо описанным здесь:полиморфизм в таблицах базы данных SQL?


номер 3-лучший из предложенных вами вариантов (слегка обновлен для уточнения):

  • создайте таблицу для всех из них для входа и пароля и все остальное, что общий и отдельная таблица для всех других вещей, которые не являются общими и связывают их с FK

за исключением не хранить пароль, хранить хэш-версию соленого пароля.

альтернативой может быть назначение групп и / или ролей вашим пользователи. Это может быть более гибким, чем фиксированная структура таблицы, что позволяет динамически добавлять новые роли. Но это зависит от ваших потребностей, полезно ли это для вас или нет.

Как Aaronaught указал, в основной таблице вам нужен AccountType чтобы убедиться, что пользователь может иметь только одну из ролей. Вы должны не забудьте проверить значение этого столбца при присоединении к таблицам, чтобы убедиться, что у пользователя активна только одна роль.

уникальное ограничение на внешний ключ гарантирует, что пользователь может иметь роль только один раз.