製品ミックスによって価格が異なる会社の新しいPOSに取り組んでいます。
すべての製品に基本価格があります。
私の問題を説明するために、次の情報を使用します。
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ではなく、商品を追加します。 QとProduct Pを組み合わせて、割引価格のパッケージを作成します。次に、1つのRと1つのZを持つ1つの製品Bが必要であることを追加します。
ケースB:顧客は1 Aと2 B、2 Q、1 S、2 Xと1 Zを追加する場合があります。 「コンボ」パッケージ。Sはコンボアイテムではないため、2つのコンボしか適用されません。
他のプロモーションは数量に依存しているため、Bを2つ購入すると20%オフまたは時間に依存します。または、5 PMまたは午前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(dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- of-query-and-what-is-an-efficient-example)とこの本(www.Amazon.com/books/dp/0471380237)は大いに役立ちました。ただし、現在このソリューションは、私が理解しているように、一度に1つのレコード(コンボ)でのみ機能します。お客様が歩いて来て、チーズバーガー2個、ハンバーガー1個、小1個Appleジュース、コーラ1個、フライドポテト1個、オニオンリング2個が欲しいと言った場合、私はそれだけがあることを検出する方法が必要です組み合わせの1つのコンボと基本価格で他の製品を追加します。複数のコンボの組み合わせがある場合、最大の節約でコンボの組み合わせを優先できる(理想的にはSQLクエリ)を探しています。
問題2を解決するために思いついたアイデアの1つは、コンボ(つまりハンバーガー)の主な製品をPRODUCT COMPONENTフラグを付けて追加することです。次に、価格設定プロセスを実行するときに、注文のどの商品が「パッケージ」内の主な商品であるかをクエリし、PRICE COMPONENTテーブルで指定された割引にクエリを関連付けて、その値(降順)で並べ替え、パッケージの順序でチェックします。クエリで残りの非メイン製品で「パッケージ」を作成できるかどうかを確認し、メイン製品がなくなるか、残りに非メイン製品がなくなるまでプロセスをループします。
これは複雑になる可能性があります...
1)テーブルをどのように構成すれば、さまざまなパッケージやプロモーションを、さまざまな要件を持つさまざまなタイプのプロモーションを追加するのに非常に柔軟な方法で作成できますか?
packaged_with
テーブルから開始して、どの製品をグループ化してパッケージ化できるかを判断できます。
パッケージ ------- id(PK) name package_group - ------------ package_id(FKからpackage.id) name packaged_with --- ---------- package_group_id(FKからpackage_group.idへ) product_id(FKからproduct.idへ) can_be_packaged_with(FKからproduct.idへ)
package_group
はpackage
を指します。 packaged_with
はproducts
およびpackage_groups
を参照するため、packaged_with
の行は、製品をパッケージ化できる製品を示し、パッケージは複数のグループで構成できます。
データは次のようになります。
パッケージ ------- ID |名前 ------------ 1 |コンボ パッケージグループ ------------ ID |名前 --------- 1 | QRグループ 2 | XYZグループ packaged_with ------------- package_group_id | product_id | can_be_packaged_with -------------------------------------------- - 1 | A | Q 1 | A | R 2 | A | X 2 | A | Y 2 | A | Z 1 | B | Q 1 | B | R 2 | B | X 2 | B | Y 2 | B | Z
これは、製品パッケージ自体を支援します。あなたの質問の残りについていくつかのアイデアがありますが、今この答えを完了する時間はありません...
プロモーション
多くの種類のプロモーションをリストします。ある種のルールエンジンを調べたいと思うかもしれませんが、私はそれよりも単純なものにしようと試みますが、それでも...これはwill複雑になる.
価格が特定の割合で割り引かれる単純なプロモーションから始めましょう。
percent_discount ---------------- id(PK) name percent_amount product_promotions ------------------ id(PK) product_id(FK to product.id) Promotion_id(FK to percent_discount.id) start_date end_date
ここに、製品の割引率を格納するテーブルがあります。別の表は、実際に製品を割引率にリンクし、開始日と終了日も含まれているため、特定の日付に割引が適用されるかどうかを確認できます。
後で来る他のプロモーションのアイデア...
3年前のスレッドですが、誰かに役立つかもしれないと思って返信しています。
Table Structure
Table_Offer
--------
ID FK
Name
start time
end time
MandatoryGroup
--------
ProductId (FK to product)
MixGroup1
--------
ProductId (FK to product)
MixGroup2
--------
ProductId (FK to product)
Table_offerDetails
------------------
ID PK
offerId (FK to table_offer)
MandatoryProduct(FK to MandatoryProducts.productID
firstProduct ( fk to MixGroup1.productId)
secondProduct (FK to MixGroup2.productId)
Offer
----
ID name startDate EndDate
--- ---- -------- ------
1 COMBO
MandatoryGroup
-------------
ID name
--- ----
1 A
2 B
MixGroup1
---------
ID name
--- ----
3 P
4 Q
MixGroup2
---------
ID name
--- ----
5 x
6 Y
7 Z
OfferHeader
-------------
ID Customer count(B) B_disc time_disc stat_disc DiscTotal orderPayableTotal
-- --------- ------- ---- -------- --------- -------- ------------
1 BOB 2 20 5 2
OfferDetails ------------
ID offerID MandatoryProduct 1stProduct 2ndProduct
---- ------- --------------- ---------- ----------
1 1 A P X
2 1 A P Y
3 1 A P Z
4 1 A Q X
5 1 A Q Y
6 1 A Q Z
7 1 B P X
8 1 B P Y
9 1 B P Z
10 1 B Q X
11 1 B Q Y
12 1 B Q Z
OfferDetailsを作成するには、必須の、mixgropu1およびamixGropu2を提供する必要があります。したがって、caseBには次の2つのオファーしかありません。
1 A and 2 B, 2 Q, 1 S, 2 X and 1 Z
2B 2Q and 2X =2 offers
1A 1Q and 1X=1st offer
1B 1Q and 1X=2nd Offer ... etc other combinations are vivid.
その他のオファーはビジネスロジックに基づいています。数量オファーの割引の場合:顧客のオファーのBの数を見つけるクエリを作成します。 QTYBと呼びましょう。 QTYB%2を見つけて、それをquantityOffer値($ 20)で乗算します
統計情報の提供については、顧客の購入に対して獲得ポイントと呼ばれる別のビットを追加するだけです。そして獲得したポイントに有効期限を設定します。獲得ポイントは購入金額と同じにすることができます。購入金額> = $ Xであるかどうかを確認し、ポリシーに従って割引を発行します。
午後5時前と10時後の注文時間の比較も同様で、5%を発行し、それ以外は10%の割引を発行します。