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

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

  • составьте таблицу для каждого типа или
  • составьте одну таблицу для всех них или
  • составьте таблицу для всех них только для входа в систему и пароля и отдельный для всех других вещей и свяжите их с FK
  • что-то еще
9
задан Omu 17 February 2010 в 20:59
поделиться

2 ответа

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

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

2
ответ дан 4 December 2019 в 15:18
поделиться

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

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

Только не храните пароль, храните хэшированную версию соленого пароля.

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

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

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

11
ответ дан 4 December 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: