Как спроектировать базу данных?



@null_object

Здравствуйте! Сейчас пытаюсь спроектировать небольшую CRM. Есть следующие таблицы:

  • contacts — клиентская база
  • files — загруженные файлы
  • employees — список сотрудников
  • departments- список отделов, к которым привязаны сотрудники (по задумке тут должна быть древовидная структура подчинения)
  • employee_positions — справочник существующих должностей

Поля и связи приведены на скриншоте:
61312ceb07e04632366470.png

Собственно, вопросы вот в чем:

  1. Не избыточно ли делить таблицу клиентов и таблицу сотрудников, при том, что у них довольно много схожих атрибутов?
  2. Стоит ли делать доступ к аватарке или справочнику должностей через связь «один-к-одному», при условии, что у пользователя только 1 аватарка, либо 1 должность?
  3. Будет ли работать такая реализация дерева, как на скрине? Если нет, то как правильно такое можно реализовать? (чем-то это напоминает битрикс)61312fd6dfe3f167532761.png

Проект разрабатываю на Laravel 8 + PostgreSQL


Решения вопроса 1



@jazzus

Вместо contacts и employees таблицы users roles(там client, employee и тд)
связующие
user_role
user_department с pivot position_id
вместо avatar_id полиморфную связь images в документации прямой пример
если есть еще files то аналогично



5

комментариев


Ответы на вопрос 0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *