У меня есть различные 3 типа пользователей, и каждый тип пользователя может иметь столбцы и отношения с таблицами, которые не делает другой тип, но у всех них есть (Уникальный) вход в систему и пароль,
как был бы Вы делать:
У меня был именно такой вопрос при создании недавней системы. Вот тема, которая мне очень помогла: Объектно-ориентированные структуры в реляционных базах данных.
Я выбрал решение с разделяющимися подтипами, хорошо описанное здесь: Полиморфизм в таблицах баз данных SQL?
Номер 3 - лучший из предложенных вами вариантов (немного обновлен для уточнения):
Только не храните пароль, храните хэшированную версию соленого пароля.
Альтернативой может быть назначение групп и/или ролей для ваших пользователей. Это может быть более гибким, чем фиксированная структура таблиц, позволяя динамически добавлять новые роли. Но это зависит от ваших потребностей, будет ли это полезно для вас или нет.
Как указал Aaronaught, в главной таблице вам нужен AccountType
, чтобы гарантировать, что пользователь может иметь только одну из ролей. Вы должны не забыть проверить значение этого столбца при соединении таблиц, чтобы убедиться, что у пользователя активна только одна роль.
Уникальное ограничение на внешний ключ гарантирует, что пользователь может иметь роль только один раз.