価格設定製品のデータベーススキーマ(パッケージ、プロモーション、数量ベース、期間限定オファー…)


11

製品ミックスによって価格が異なる会社の新しい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のいずれかを選択し、X、Y、またはZのいずれかを選択すると、20ドルの割引が適用されます。

ケースA:注文時にベース商品に追加する場合があります。たとえば、商品Aではなく、商品Qと商品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時以降または午前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個、コーラ1個、フライドポテト1個、オニオンリング2個が欲しいと言った場合、ミックスにコンボが1つしかないことを検出し、もう1つを追加する方法が必要です基本価格の製品。複数のコンボの組み合わせがある場合、私は

問題2を解決するために思いついたアイデアの1つは、コンボの主な製品(つまりハンバーガー)をPRODUCT COMPONENTフラグを付けて追加することです。次に、価格設定プロセスを実行するときに、注文のどの商品が「パッケージ」内の主な商品であるかを照会し、PRICE COMPONENTテーブルで指定された割引にクエリを関連付けて、その値(降順)で並べ替え、パッケージの順序で確認します。クエリを使用して残りの非メイン製品で「パッケージ」を作成できるかどうかを確認し、メイン製品がなくなるか、残りに非メイン製品がなくなるまでプロセスをループします。


これまでに何をしましたか?ER図を見せてください。
TulainsCórdova2013

@ user61852私は自分のERDのほとんどを手作業で行っています。共有できるように、コンピューターでそれらを実行するためのツールを推奨できますか?(うまくいけば無料のもの:)
cml 2013

@ user61852 gliffy.comを見つけました。私は私の質問を更新するために私が取り組んだことをまとめるのに取り組んでいます。
cml 2013

@ user61852 ERD、フローチャート、アドバンス、サンプルテーブルデータを表示するために、更新#1を追加しました。
cml 2013

回答:


2

これは複雑になる可能性があります...

1)さまざまな要件を持つさまざまなタイプのプロモーションを追加するのに非常に柔軟な方法で、さまざまなパッケージまたはプロモーションを作成できるように、テーブルをどのように構成しますか?

最初に、packaged_withどの製品をグループ化してパッケージ化できるかを決定するための表から始めることができます。

パッケージ
-------
  id(PK)
  名前

package_group
-------------
  package_id(package.idへのFK)
  名前

packaged_with
-------------
  package_group_id(package_group.idへの外部キー)
  product_id(product.idへの外部キー)
  can_be_packaged_with(product.idへの外部キー)

package_groupを参照しますpackagepackaged_withとを参照しproductsているpackage_groupsので、の行はpackaged_with、製品をパッケージ化できる製品を示し、パッケージは複数のグループで構成できます。

データは次のようになります。

パッケージ
-------
ID | 名前
------------
1 | コンボ

package_group
------------
ID | 名前
---------
1 | QRグループ
2 | XYZグループ

packaged_with
-------------
package_group_id | product_id | can_be_packaged_with
----------------------------------------------
1 | A | Q
1 | A | R
2 | A | バツ
2 | A | Y
2 | A | Z
1 | B | Q
1 | B | R
2 | B | バツ
2 | B | Y
2 | B | Z

これは、製品パッケージ自体を支援します。あなたの質問の残りの部分についてはいくつかのアイデアがありますが、今この答えを完了する時間はありません...


プロモーション

多くの種類のプロモーションをリストします。ある種のルールエンジンを調べたいと思うかもしれませんが、私はそれよりも単純なものにしようと試みますが、それでも...これ複雑になります。

価格が特定の割合で割り引かれる単純なプロモーションから始めましょう。

percent_discount
----------------
  id(PK)
  名前
  percent_amount

product_promotions
------------------
  id(PK)
  product_id(product.idへの外部キー)
  Promotion_id(FKからpercent_discount.idへ)
  開始日
  終了日

ここに、製品の割引率を格納するテーブルがあります。別の表は実際に製品を割引率にリンクし、開始日と終了日も含まれているため、特定の日付に割引が適用されるかどうかを確認できます。

後で来る他のプロモーションのアイデア...


時間があれば、残りの回答を読んでくれることを楽しみにしています。ご協力いただきありがとうございます。
cml 2013

私は間違いなく「ルールエンジン」を調べます!良いリソースリンクがある場合は、私の方法で送信してください。私が知っている最大の問題は、注文アイテムの順序付けされていない、グループ化されていないリストに適用するプロモーションを決定することです(ケースB)。
cml 2013

@cml:おそらく必要な機能をすでに備えている商用製品があることは知っています。私が知っているのはハイブリスと呼ばれるものですが、非常に洗練されたプロモーションシステムがあると聞きました。
FrustratedWithFormsDesigner 2013

アップデート#1を追加
2013

1

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%の割引を発行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.