Добрый день. Подскажите как лучше составить структуру продукта и его декораторов.
Под декораторами тут понимается, например:
1) Упаковочная бумага (FK на соотв. справочник)
2) Упаковочная лента (просто как услуга, есть или нет)
3) Гравировка продукта - нанесение текста (нескольких текстов) на продукт
и другие.
С одной стороны, все декораторы вынесены в справочник, имеют свой ключ и свою стоимость:
Decorators
id name price
1 Бумага 10
2 Лента 5
3 Текст 2
Напрашивается сводная табличка между продуктом и несколькими его декораторами
ProductDecorators
id product_id decorator_id decorator_price
И эта структура прекрасно бы работала, если бы не разные типы декораторов.
Так, для бумаги надо указывать внешний ключ на справочник, который для всех остальных декораторов необязательный.
Для текстов нужно дополнительно указывать параметры (сам текст, положение на продукте) + текстов может быть несколько для одного продукта..
Как лучше поступить в таком случае?
Можно, например, вынести декораторы вроде "Упаковочная бумага", "Текст" в отдельные сущности с FK на продукт, а однотипные и "линейные" декораторы оставить в ProductDecorators.
Однако в этом случае получаем зависимость - часть декораторов разнесена в одни таблички (и должна обрабатываться на уровне кода), часть подчиняется общей логике ... что уже совсем нехорошо.