Возможно, вам потребуется создать некую таблицу «скидок», в которой будет содержаться базовая информация о скидке, например уникальный идентификатор и описание (это также может быть связано с правилами приемлемости, необходимыми для активации этой скидки - промо-код дляпример).
Эта таблица также должна содержать правила создания пакетов скидок для вашего примера, например, «количество продуктов, необходимых для запуска скидки» и «стоимость пакета» - для гибкости этих полейдолжно быть NULLable, чтобы у вас не было для использования пакетов;Вы можете использовать отдельные цены, определенные в таблице «скидка товара».
В качестве базового примера вы можете иметь таблицу скидок, например:
+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ... | ... | ... | ... | ... |
... и ссылку product_to_discount.Таблица типа:
+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ... | ... | ... | ... |
Затем вы связываете продукты со скидками, поэтому, если у вас есть что-то вроде «Купите 3 предмета из этого диапазона всего за 10 фунтов стерлингов», вам нужно будет связать весь ассортиментвозможные подходящие товары со скидкой и установите units_required
на 3 - тогда, если какие-либо 3 из этих предметов находятся в «корзине», примените bundle_price
.
Возможно, вам придется выполнить некоторую фильтрацию, чтобы отсортироватькакой пакет имеет преимущество, если существует более одной возможности (возможно, путем расчета, который дает наибольшую скидку).
Другая возможность с такой установкой заключается в том, что она также позволяет вам делать намного более простые скидки.Вы можете просто оставить units_required
и bundle_price
как NULL
и связать только один продукт со скидкой;потенциально много раз с разными ценовыми разрывами при разных значениях product_to_discount.units_required
- так что вы можете установить значение скидки для отдельного продукта или большую скидку на единицу для больших объемов.
Вы также можете добавить в поле, напримерproduct_to_discount.product_is_discount
, если вы хотите сделать что-то вроде «Купите X, Y или Z и получите Q БЕСПЛАТНО».
Это довольно расплывчатый план, но я надеюсь, что это поможет вам указать «правильное» направление...
О, еще одна вещь, которую следует иметь в виду, если ваша система ведет какие-либо учетные записи, вам нужно будет передать «линию дисконта», чтобы учесть расхождения между ожидаемой ценой продукта и дисконтированнойодин.