2

私は、製品の組み合わせに応じて異なる価格で製品を販売する会社の新しい販売時点管理に取り組んでいます。

すべての製品には基本価格があります。

私の問題を説明するために、次の情報を使用します。

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 テーブルによって与えられた割引に関連付け、その値による順序付け (降順) を行い、その順序でパッケージをチェックします。クエリを使用して残りの非主要製品を含む「パッケージ」を作成できるかどうかを確認し、主要製品がなくなるか、残りの非主要製品がなくなるまでプロセスをループします。

4

0 に答える 0