Статья в разработке. Вы можете читать все, что написано ниже, но на свой страх и риск 😎
Компания подключает интернет в ресторанах, офисах, магазинах, салонах красоты. Много клиентов. У каждого из клиентов много объектов. У каждого объекта свои условия, тарифы и так далее.
Подробнее про бизнес-детали этого решения можно почитать в этой статье
После сбора требований с заказчика и анализа гугл-таблиц, которые клиент вел годами, начали думать над архитектурой базы данных, сущностями и их связями.
У нас есть базовый шаблон, который на первый взгляд подходил нам и для этого клиента:
В шаблоне упор делается на Cделки, которые связаны с Контрагентами.
Однако чуть больше изучив процессы клиента, стало понятно, что вся бизнес-логика строится вокруг Oбъектов - по сути, вокруг адресов клиентов. Сделка здесь — это промежуточный этап, связывающий контрагента и адрес.
Чтобы не плодить сущности, решили применить эту мысль на практике, исключив Сделки и перенеся необходимые поля из Сделки прямо в Объект(Адрес):
Доработали шаблон и получилась следующая схема:
С помощью панели администратора создаем все запланированные сущности. При создании таблиц можно обойтись без CREATE TABLE
-ов, все "накликивается" прямо в системе.
Мы разбили сущности на несколько схем, чтобы логически их разделить.
base
про Организации, Людей, их данные и их отношения друг с другом;bsn
- про Объекты, их типы и статусы, про их связи с клиентами и провайдерами;fin
- про деньги: Счета, Транзакции, Обязательства.Каждая сущность - таблица в базе данных.
Все "настройки" для сущности расположены на одной форме:
type
), обязательностью (is_nullable
), неизменяемостью (is_immutable
) и дефолтными значениями (default
)Если пользователь попробует создать Объект, в котором Контрагент-клиент, Контрагент-провайдер, Текущий статус и адресные поля будут совпадать с полями другого Объекта - система скажет ему об этом и не даст сохранить новую запись
true
)Например, поле "Тариф" должно быть обязательно заполнено для Объекта в статусе "Подключен". При остальных статусах объекта его заполнение необязательно
Как было раньше
Как хотелось бы в идеале
Как сделали
Я Кирилл Маркин, основатель компании Ozma Inc. Занимаюсь развитием партнерской сети платформы ozma.io: мы помогаем разработчикам, интеграторам освоить low-code платформу и собирать для своих клиентов красивые CRM и ERP системы. Моя цель — чтобы любой разработчик мог собрать решение для конечного клиента за несколько дней.
Чтобы попробовать собрать что-то на платформе ozma.io для своих клиентов, зарегистрируйтесь в партнерской программе: ozma.io/ru/partners/.
Или напишите мне в telegram: @kirmark.