Как лучше организовать хранение пользователей в БД?

Ситуация такая:
Есть таблица с пользователями, есть таблица с компаниями. У компании может быть много пользователей, у пользователя одна компания. Связь по полю company_id в таблице пользователей.
Вся система заточена под работу именно с такой структурой: пользователь->компания
Но встала необходимость ввести новый тип пользователя: фрилансеры.
Тоесть это такие же пользователи, но без компании.
Как лучше организовать хранение и работу с таким раскладом, если по логике у фрилансера нет компании, но есть часть полей, к примеру "Реквизиты", которые у обычных пользователей привязаны к компании, а у фрилансера привязаны к пользователю?
Выносить такие поля в отдельную таблицу? или не смотря на логику создавать для фрилансера компанию, и хранить их там?

UPD: Если рассматривать таблицу компаний для фрилансера, то только наименование компании и юридический адрес, являются избыточными по отношению к фрилансеру, всё остальное применимо к нему
  • Вопрос задан
  • 408 просмотров
Решения вопроса 1
mitaichik
@mitaichik
Тут по сути обычное наследование: есть абстрактный класс User, от него наследуются CompanyUser и FreelanceUser, у которых есть свои особенности (у CompanyUser - связь с компанией, у FreelanceUser - реквизиты).

Как такое можно сделать в Yii: https://github.com/samdark/yii2-cookbook/blob/mast...

Но вообще способов реализации здесь куча: schema-less базы данных, разные таблицы, EAV и прочее.

Я бы сделал 3 таблицы: user, company, freelance_requesite. В CompanyUser сделал бы релейшен на company, в FreelanceUser - на реквизиты, и воспользовался бы механизмом из cookbook'a.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы