Я разрабатываю базу данных, в которой будут храниться пользователи разных типов. В настоящее время существует всего два типа пользователей, клиенты и агенты. В дальнейшем, возможно, будет добавлен тип “организация”, которая будет создавать и управлять агентами. Так же в системы присутствуют администраторы, реализованные через роли.
Идея состоит в том, чтобы иметь users таблицу, отвечающую в значительной степени исключительно за вход на сайт ( email и password, token и другие технические поля), и дополнительные таблицы для каждого из соответствующих типов пользователей, которые имеют свой собственный уникальный набор столбцов. Например, у агентов в дальнейшем появятся поля специальность, опыт, дипломы и тд. У клиентов в данный момент нет уникальный полей, но об этом дальше. Однако, поскольку я раньше не управлял базой данных такой сложности, мне интересно, как организовать пару аспектов:
- Во-первых, пользователями могут быть любой из вышеперечисленных типов. Например, если пользователь авторизован как агент, он все равно должен иметь возможность оформить заказ.
- Во-вторых, необходимо предусмотреть возможность создания клиентов или агентов без создания учетной записи пользователя. Например, если клиент связался с компанией по телефону или отправил электронное письмо, не зарегистрировавшись на сайте. Также возможно добавление типа "организация", где администратор организации сможет создавать агентов с возможностью или без возможности входа в систему (сохранение записи в таблице agent, без записи в user).
- В-третьих, прошу обратить внимание на таблицу “appointment”. В таблице содержаться FK для клиентов и агентов, а не user.
Основные проблемы, которые у меня возникают
- Дублирование основных данных ( first_name, last_name ) у клиента и агента, так как эти данные хранятся в user, а мне нужно иметь возможность создавать клиента и агнета без user
- Сомнения в надобности таблицы “клиент”, так как в данный момент в ней нет дополнительных полей и это усложняет систему.
Вот что получилось на данный момент