положить логин и пароль в одной таблице или в нескольких таблицах для каждого типа пользователя? - PullRequest
8 голосов
/ 17 февраля 2010

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

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

Ответы [ 2 ]

11 голосов
/ 18 февраля 2010

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

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

За исключением случаев, когда пароль не сохраняется, сохраните хешированную версию соленого пароля.

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

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

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

2 голосов
/ 18 февраля 2010

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

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

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