Вы можете решить эту проблему с помощью одной «общей» таблицы пользователей, содержащей информацию, доступную для всех пользователей, и 1 таблицы для каждого конкретного типа пользователя. В вашем примере вам понадобятся 3 таблицы.
Пользователи: в этой таблице хранится только информация, общая для всех типов пользователей, т.е. ИД пользователя, имя, адрес и т. Д.
GeneralUsers: эта таблица «расширяет» таблицу Users, предоставляя первичный ключ UserId, который ссылается на таблицу Users. Кроме того, информация, характерная для обычных пользователей, хранится здесь, fx. Адрес электронной почты и т. Д.
AdminUsers: как и в случае с GeneralUsers, эта таблица также «расширяет» таблицу Users, предоставляя внешний ключ UserId, ссылающийся на таблицу Users. Кроме того, информация, специфичная для пользователей-администраторов, хранится здесь, fx. WorkstationId и т. Д.
При таком подходе вы можете добавлять дополнительные «специализации», если возникает необходимость, просто добавляя новые таблицы, которые «расширяют» таблицу Users, используя ссылку на внешний ключ. Вы также можете создать несколько уровней специализации. Если, например, пользователи-администраторы являются обычными пользователями, а также пользователями-администраторами, то AdminUsers могут «расширять» GeneralUsers вместо Users, просто используя ключ доступа к GeneralUsers вместо Users.
Когда вам нужно получить данные из этой модели, вам нужно, к какому типу пользователей обращаться. Если, например, вам нужно запросить GeneralUser, вам нужно что-то похожее на:
SELECT * FROM GeneralUsers
СЛЕДУЮЩИЙ ПРИСОЕДИНЯЙТЕСЬ К ПОЛЬЗОВАТЕЛЯМ НА GeneralUsers.UserId = Users.UserId
Или при запросе пользователя с правами администратора
SELECT * FROM AdminUsers
СЛЕДУЮЩИЙ ПРИСОЕДИНЯЙТЕСЬ К ПОЛЬЗОВАТЕЛЯМ НА AdminUsers.UserId = Users.UserId
Если у вас есть дополнительные уровни специализации, например, если пользователи-администраторы также являются обычными пользователями, вы просто возвращаетесь.
SELECT * FROM AdminUsers
СЛЕДУЮЩИЙ ПРИСОЕДИНЯЙТЕСЬ к GeneralUsers ON AdminUsers.UserId = GeneralUsers.UserId
СЛЕДУЮЩИЙ ПРИСОЕДИНЯЙТЕСЬ К ПОЛЬЗОВАТЕЛЯМ НА GeneralUsers.UsersId = Users.UserId