Я пытаюсь создать общую модель данных, которая позволит определенному продукту (указанному FK product_id в приведенной ниже таблице ниже) указать 0 или более факторов цены (я определяю "коэффициент" как единицу от цены, добавленной или вычитаемой, чтобы получить общее количество).
Так скажите, что есть эта таблица:
===============================
price
===============================
price_id (PK)
product_id (FK)
label
operation (ENUM: add, subtract)
type (ENUM: amount, percentage)
value
Книжная цена может быть представлена следующим образом:
====================================================================
price_id | product_id | label | operation | type | value
====================================================================
1 | 10 | Price | add | amount | 20
2 | 10 | Discount | subtract | percentage | .25
3 | 10 | Sales Tax | add | percentage | .1
Это в основном означает:
Price: $20.00
Discount: - $5.00 (25%)
--------------------
Sub Total: $15.00
Sales Tax: $1.50 (10%)
------------------------
Total: $16.50
Несколько вопросов:
- Что-то явно не так с первоначальным дизайном?
- Что делать, если я хотел создать "шаблоны" (например, шаблон "общий товар", который имеет поля "цена", "скидка" и "налог с продаж" ), "роскошный товар", который имеет "цену", "скидку", поля "налог на роскошь" ) - как бы я смоделировал это?
- Вышеупомянутая модель работает, если каждая запись относится к общей сумме предшествующей записи. Таким образом, в примере "налог с продаж" применяется к разнице "цена" и "скидка". Что, если бы сумма не была рассчитана так просто? Например: A + B + (A + 10%) - (B - 5%). Как бы я смоделировал это?
- Кроме того, что, если тип "процент" не применяется к непосредственно предшествующей строке (как это подразумевается под вопросом № 3) и применяется к более чем одной строке? Нужна ли мне другая таблица, чтобы указать, какая цена- > цена_ид, к которой относится процент?