Я работаю над новой точкой продаж для компании, которая производит товары по разным ценам в зависимости от ассортимента.
Все товары имеют базовую цену.
Чтобы объяснить мою проблему, я буду использовать следующую информацию:
Product Category Price
A 1 45
B 1 70
Q 2 20
R 2 27
S 2 15
X 3 17
Y 3 22
Z 3 16
У компании есть Пакеты, например, Пакет «Комбо»: для продукта A или B, если вы выберете 1 из Q или R и 1 из X, Y или Z, вы получите скидку в 20 долларов.
Случай A: Иногда клиенты добавляют к базовому продукту при размещении заказа, например: они не относятся к одному из продуктов A и добавляют к нему продукт Q и продукт P, чтобы создать пакет со сниженной ценой. Затем они могут добавить, что они хотят 1 продукта B с 1 R и 1 Z.
Случай B: иногда клиенты добавляют 1 A и 2 B, 2 Q, 1 S, 2 X и 1 Z. В соответствии с правилами, установленными в пакете «Combo», будут применяться только 2 комбинации, поскольку S не является комбинированным элементом.
Другие акции зависят от количества, поэтому, если вы покупаете 2 из B, вы получаете скидку 20% и / или зависит от времени, это действует только после 17:00 или до 10%, если до 10:00. Другая акция может зависеть от того, когда произошла ваша последняя покупка, или если вы приобрели более $ X в течение периода Y.
Мои проблемы:
1) Как мне структурировать таблицы, чтобы я мог создавать различные пакеты или рекламные акции таким образом, чтобы можно было очень гибко добавлять различные типы рекламных акций с различными требованиями?
2) Когда они заказывают, например, случай B (или сочетание случая A и случая B), как мне структурировать свой запрос, чтобы я мог проверить, какие товарные позиции находятся в заказе, и соответственно обновить цены / описания ? В конечном счете, лучший результат для этого запроса будет возвращать, какие пакеты и рекламные акции соответствуют требованиям, и в этом случае клиент получает наибольшую выгоду (т. Е., Возможно, то, что он заказал, соответствует требованиям для рекламной акции 1 и 3, но рекламная акция 3 обходится дешевле. должен работать с несколькими акциями).
Заранее спасибо за помощь!
ОБНОВЛЕНИЕ № 1
Чтобы лучше описать имеющиеся проблемы и обновить проделанную до сих пор работу по их решению, я включаю ERD модели продукта, ограниченную сущностями и атрибутами, которые влияют на проблему (т. Е. Инвентарь здесь не задействован , поэтому нет инвентаря сущности присутствуют).
Я также включаю примеры данных от сущностей и атрибутов, которые влияют на этот вопрос (чтобы упростить чтение данных, я помещаю имя / описание вместо внешних ключей):
PRODUCT
---------
ID Name
================================
1 Hamburger
2 Cheeseburger
3 Bacon Hamburger
4 Bacon Cheeseburger
5 Orange Juice
6 Apple Juice
7 Coffee
8 Coke
9 French Fries
10 Onion Rings
11 Soup du Jour
12 Hamburger Combo
13 CheeseBurger Combo
14 Bacon Hamburger Combo
15 Bacon Cheeseburger Combo
16 Combo Side
17 Combo Beverage
18 Small Orange Juice
19 Large Orange Juice
20 Small Apple Juice
21 Large Apple Juice
22 Add Extra Patty
23 Add Avocado
PRODUCT COMPONENT
------------------
productFrom productTo
===================================================
Hamburger Combo Hamburger
Hamburger Combo Combo Side
Hamburger Combo Combo Beverage
CheeseBurger Combo Cheeseburger
CheeseBurger Combo Combo Side
CheeseBurger Combo Combo Beverage
Bacon Hamburger Combo Bacon Hamburger
Bacon Hamburger Combo Combo Side
Bacon Hamburger Combo Combo Beverage
Bacon Cheeseburger Combo Bacon Cheeseburger
Bacon Cheeseburger Combo Combo Side
Bacon Cheeseburger Combo Combo Beverage
PRODUCT FEATURE
----------------
ID Description
=======================
1 Combo Side Option
2 Combo Beverage
3 Juice
4 Orange Juice Size
5 Apple Juice Size
6 Extras
PRODUCT FEATURE APPLICABILITY
------------------------------
product productFeature ProductFeatureApplicabilityType
============================================================================
Hamburger Combo Combo Side Required
Hamburger Combo Juice Flavor Required
Cheeseburger Combo Combo Side Required
Cheeseburger Combo Juice Flavor Required
Bacon Hamburger Combo Combo Side Required
Bacon Hamburger Combo Juice Flavor Required
Bacon Cheeseburger Combo Combo Side Required
Bacon Cheeseburger Combo Juice Flavor Required
PRODUCT FEATURE APPLICABILITY
------------------------------
productFeature product ProductFeatureApplicabilityType
============================================================================
Combo Side Hamburger Combo Required
Combo Beverage Hamburger Combo Required
Extras Hamburger Combo Optional
Combo Side Cheeseburger Combo Required
Combo Beverage Cheeseburger Combo Required
Extras Cheeseburger Combo Optional
Combo Side Bacon Hamburger Combo Required
Combo Beverage Bacon Hamburger Combo Required
Extras Bacon Hamburger Combo Optional
Combo Side Bacon Cheeseburger Combo Required
Combo Beverage Bacon Cheeseburger Combo Required
Extras Bacon Cheeseburger Combo Optional
OPTIONAL FEATURE
------------------
productFeatureFrom Product ProductFeatureTo
=============================================================
Combo Side Option French Fries
Combo Side Option Onion Rings
Combo Side Option Soup du Jour
Combo Beverage Juice
Combo Beverage Coffee
Juice Orange Juice Size
Juice Apple Juice Size
Orange Juice Size Orange Apple Juice
Orange Juice Size Orange Apple Juice
Apple Juice Size Small Apple Juice
Apple Juice Size Large Apple Juice
Extras Add Extra Patty
Extras Add Avocado
Таким образом, благодаря исследованиям и поддержке, предоставленной сообществом, пока я не узнал, я смог решить проблему № 1. На самом деле, я сделал это с большей гибкостью, чем я думал, что смог сделать при первом развертывании системы.
Несмотря на то, что были проблемы с проблемой 2, она не решается к удовлетворению. Были некоторые идеи о том, как это сделать, Нил МакГилган задал отличный вопрос, ведущий к возможному решению с использованием реляционного подразделения (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- примера запроса и того, что является эффективным), и эта книга (www.amazon.com/books/dp/0471380237) очень помогла. Однако это решение в настоящее время, и, насколько я понимаю, работает только с «одной» записью (комбо) за раз. Если клиент заходит и говорит, что хочет 2 чизбургера, 1 гамбургер, 1 маленький яблочный сок, 1 колу, 1 картофель фри и 2 луковых кольца, мне нужен способ обнаружить, что в миксе есть только одно комбо, и добавить другое продукты по базовой цене. Если есть несколько комбинаций комбо, я
Одна идея, которую я пришёл для решения второй проблемы, заключается в добавлении атрибута PRODUCT COMPONENT и присвоении ему основного продукта для комбо (т. Е. Гамбургера). Затем при запуске процесса ценообразования запросите, какие продукты в заказе являются основными продуктами в «пакете», связав запрос со скидкой, указанной в таблице PRICE COMPONENT, и упорядочив по этому значению (по убыванию), и в этом порядке пакетов проверьте чтобы узнать, можете ли вы создать «пакет» с оставшимися неосновными продуктами с помощью запроса и выполнить цикл, пока не останется больше основных продуктов или не останется неосновных продуктов в оставшейся части.