Добрый вечер, подскажите или дайте совет кто-нибудь по части проектирования базы данных: делаю пет проджект – биллинговая платформа с услугами, управлением услуг, инвойсами и тд
Вопрос по части услуг: в проекте планируется возможность создавать свои собственные услуги, а так же заранее определенные услуги, такие как vps, domain, vds
Пример услуг:
VPS: VPS Micro | 1 CPU | 512mb ram | 20 SSD | trial days | daily | monthly | annually | и так далее перечисления возможных периодов оплаты
Но так же может быть услуга просто "Администрирование", которой нужно только поле "Наименование услуги" и стоимость одного из периодов
Думал сначала проектировать как "конструктор", соответственно было нечто подобное:
services: name | code | icon | trial | daily | monthly | и тд периоды
service_values: service_id | param | value
Но получается очень рутинная жопа т.к. заранее ничего не определено и каждый параметр нужно проверять на существование
Единственный вариант, который мне приходит на ум, это сделать единую таблицу services и добавить ей полиморфную связь many to many
Получится нечто вроде:
services: id | name | code | icon | trial | daily | monthly | и тд периоды
serviceable: id | serviceable_id | serviceable_type
vps: core | ram | ssd | active
Таким образом, мы будем биллить всю ту же таблицу services в которой будут все услуги, но при этом, у нас будут дополнительные таблицы для услуг, которым необходимы дополнительные "технические поля" + взаимодействие с услугой. Правильно ли мыслю или это все костыль и есть лучший способ?