私は、製品の組み合わせに応じて異なる価格で製品を販売する会社の新しい販売時点管理に取り組んでいます。
すべての製品には基本価格があります。
私の問題を説明するために、次の情報を使用します。
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 について、Q または R の 1 つと X、Y または Z の 1 つを選択すると、20 ドルの割引が適用されます。
ケース A:顧客が注文時にベース製品に追加する場合があります。たとえば、製品 A の 1 つではなく、それに製品 Q と製品 P を追加して、割引価格のパッケージを作成します。次に、1 つの R と 1 つの Z を持つ製品 B が 1 つ欲しいと付け加えるかもしれません。
ケース B:お客様は、A と B を 1 つ、Q を 2 つ、S を 1 つ、X を 2 つ、Z を 1 つ追加する場合があります。「コンボ」パッケージで定められた規則によれば、S はコンボ アイテムではないため、2 つのコンボのみが適用されます。
他のプロモーションは数量に依存するため、B を 2 つ購入すると 20% オフおよび/または時間に応じて、午後 5 時以降または午前 10 時前の場合は 10% オフの前にのみ有効です。別のプロモーションは、前回の購入がいつ行われたか、または Y 期間に $X 以上購入したかどうかによって異なります。
私の問題:
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 は進歩していますが、満足のいく解決には至っていません。これを行う方法についていくつかのアイデアがありました。Neil McGuilgan は Relational Divisionを使用した可能な解決策につながる素晴らしい質問をし、この本は大いに役立ちました。ただし、このソリューションは現在のところ、私が理解しているように、一度に「1」レコード (コンボ) でのみ機能します。顧客が近づいてきて、チーズバーガー 2 個、ハンバーガー 1 個、小さなアップル ジュース 1 個、コーラ 1 個、フライド ポテト 1 個、オニオン リング 2 個が欲しいと言った場合、ミックスにコンボが 1 つしかないことを検出し、もう 1 つを追加する方法が必要です。基本価格の製品。複数のコンボの組み合わせがある場合、最大の節約によってコンボの組み合わせに優先順位を付けることができる (理想的には SQL クエリの) 探しています。
問題 2 を解決するために私が思いついたアイデアの 1 つは、コンボの主な製品 (つまり、ハンバーガー) にフラグを立てることを PRODUCT COMPONENT に追加して属性を設定することです。次に、価格設定プロセスを実行するときに、注文のどの製品が「パッケージ」の主要製品であるかを照会し、その照会を PRICE COMPONENT テーブルによって与えられた割引に関連付け、その値による順序付け (降順) を行い、その順序でパッケージをチェックします。クエリを使用して残りの非主要製品を含む「パッケージ」を作成できるかどうかを確認し、主要製品がなくなるか、残りの非主要製品がなくなるまでプロセスをループします。