Fiyatlandırma Ürünleri için Veritabanı Şeması (paketler, promosyonlar, adet bazlı, sınırlı süreli teklif…)


11

Ürün karışımına bağlı olarak farklı fiyatlara ürün satan bir şirket için yeni bir satış noktası üzerinde çalışıyorum.

Tüm ürünlerin taban fiyatı vardır.

Sorunumu açıklamak için aşağıdaki bilgileri kullanacağım:

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

Şirketin Paketleri var, örneğin "Combo" Paketi: ürün A veya B için, Q veya R'den birini seçerseniz ve X, Y veya Z'den birini seçerseniz 20 $ indirim alırsınız.

Durum A: Bazen müşteriler sipariş verirken temel bir ürüne eklenirler, örneğin: Ürün A'dan birini istemezler ve indirimli fiyata sahip bir paket oluşturmak için Ürün Q ve Ürün P'yi eklerler. Daha sonra 1 R ve 1 Z ile 1 ürün B istediklerini ekleyebilirler.

Durum B: Bazen müşteriler 1 A ve 2 B, 2 Q, 1 S, 2 X ve 1 Z ekleyecektir. "Combo" Paketi tarafından belirtilen kurallara göre, S birleşik öğe olmadığı için sadece 2 kombinasyon kullanılabilir.

Diğer promosyonlar miktara bağlıdır, bu nedenle B'den 2 satın alırsanız% 20 indirim ve / veya zamana bağlı olursanız, yalnızca 5 PM'den sonra veya 10:00'dan önce% 10 indirimden önce geçerlidir. Başka bir promosyon, son satın alma işleminizin ne zaman gerçekleştiğine veya Y zaman diliminde X dolardan fazla satın alma işleminize bağlı olarak değişebilir.

Benim sorunlarım:

1) Tabloları nasıl yapılandırabilirim, böylece farklı paketler veya promosyonlar, farklı gereksinimlere sahip farklı promosyon türleri eklemek için çok esnek olacak şekilde oluştururum?

2) Durum B (veya Durum A ve Durum B'nin bir karışımı) gibi sipariş verdiklerinde, sorgumu nasıl yapılandırabilirim, böylece hangi ürün karışımlarının siparişte olduğunu görmek için test yapabilir ve fiyatları / açıklamaları buna göre güncelleyebilirim ? Nihayetinde, bu sorgu için en iyi sonuç, hangi paketlerin ve promosyonların müşteriye en fazla fayda sağlayan siparişlerin yerine getirildiği gereksinimleri döndürür (örneğin, sipariş ettikleri şey promosyon 1 ve 3 için gereksinimleri karşılar, ancak promosyon 3 daha ucuzdur. birden çok promosyonla çalışmalıdır).

Yardımınız için şimdiden teşekkür ederiz!

GÜNCELLEME # 1

Eldeki sorunları daha iyi tanımlamak ve bunları çözmek için şimdiye kadar yapılan çalışmaları güncellemek için , sorunu etkileyen varlıklar ve niteliklerle sınırlı bir Ürün Modeli ERD'si ekliyorum (yani envanter burada yürütülmüyor, bu nedenle envanter yok varlıklar var).

resim açıklamasını buraya girin

Ayrıca bu soruyu etkileyen varlıklardan ve niteliklerden örnek veriler de ekliyorum (verileri okumayı basitleştirmek için, Yabancı Anahtarlar yerine ad / açıklamaları koyuyorum):

Burada, tablo yapısını anlamanın hızlı ve görsel bir yolu olan birleşik bir örnek veren bir akış şemasına bağlantı verilmiştir.

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

Bu yüzden, toplumun bilinceye kadar sağladığı araştırma ve destekle, Sorun # 1'i çözebildim. Aslında bunu, sistemin ilk kurulumunda yapabileceğimi düşündüğümden daha fazla esneklikle yaptım.

Problem 2 ile ilgili ilerlemeler olmasına rağmen, memnuniyetle çözülmemiştir. Bunun nasıl yapılacağı hakkında bazı fikirler var, Neil McGuilgan İlişkisel Bölümü kullanarak olası bir çözüme doğru giden harika bir soru sordu (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- bir sorgu-ve-ne-bir-verimli-örnek) ve bu kitap (www.amazon.com/books/dp/0471380237) çok yardımcı oldu. Ancak şu anda bu çözüm ve anladığım kadarıyla, aynı anda sadece "bir" kayıt (combo) ile çalışır. Bir müşteri yürür ve 2 çizburger, 1 hamburger, 1 küçük elma suyu, 1 kola, 1 patates kızartması ve 2 soğan halkası istediğini söylüyorsa, karışımda sadece bir combo olduğunu tespit etmek ve diğerini eklemek için bir yola ihtiyacım var ürünleri temel fiyata. Birden fazla kombinasyon kombinasyonu varsa, ben

İkinci sorunu çözmek için bulduğum bir fikir, combo (yani hamburger) için ana ürün olan PRODUCT COMPONENT flag'ini eklemek ve atfetmek. Daha sonra fiyatlandırma işlemini çalıştırırken, siparişte hangi ürünlerin "pakette" ana ürünler olduğunu, sorguyu PRICE BİLEŞENİ tablosunda verilen indirimle ve bu değere göre sıralayarak (azalan) sorgulayın ve bu paket sırasını kontrol edin kalan ana olmayan ürünlerle bir sorgu ile bir "paket" oluşturup oluşturamayacağınızı görmek ve daha fazla ana ürün kalmayana veya geri kalanında artık ana olmayan ürün kalmayana kadar işlemi döngüye sokmak.


Şimdiye kadar ne yaptın ? Bize bazı ER diyagramı göster.
Tulains Córdova

@ user61852 ERD'lerimin çoğunu elle yapıyorum. Paylaşabilmem için bilgisayarda bir araç önerebilir misiniz? (umarım ücretsizdir :)
cml

@ user61852 Oldukça kullanışlı olduğunu kanıtlayan gliffy.com'u buldum. Sorumu güncellemek için üzerinde çalıştığım şeyleri bir araya getirmeye çalışıyorum.
cml

@ user61852 ERD'yi, akış şemasını, ilerlemeleri ve örnek tablo verilerini göstermek için 1 numaralı güncelleştirmeyi ekledim.
cml

Yanıtlar:


2

Bu karmaşık olabilir ...

1) Tabloları nasıl yapılandırabilirim, böylece farklı paketler veya promosyonlar, farklı gereksinimlere sahip farklı promosyon türleri eklemek için çok esnek olacak şekilde oluştururum?

packaged_withHangi ürünlerin birlikte gruplanıp paketlenebileceğini belirlemek için bir tabloyla başlayabilirsiniz :

paket
-------
  id (PK)
  isim

package_group
-------------
  package_id (FK to package.id)
  isim

packaged_with
-------------
  package_group_id (FK ile package_group.id arasında)
  product_id (FK to product.id)
  can_be_packaged_with (FK to product.id)

package_groupBir ifade eder package. packaged_withanlamına gelir productsve package_groupsbu nedenle de bir satır packaged_withgösteren ürünler ürün, paketlenebilir ve bir paket birden fazla gruba kadar yapılabilir.

Veriler şöyle görünecektir:

paket
-------
ID | isim
------------
1 | kombo

package_group
------------
ID | isim
---------
1 | QR grubu
2 | XYZ grubu

packaged_with
-------------
package_group_id | ürün_kimliği | can_be_packaged_with
----------------------------------------------
1 | A | S
1 | A | R,
2 | A | X
2 | A | Y
2 | A | Z
1 | B | S
1 | B | R,
2 | B | X
2 | B | Y
2 | B | Z

Bu, ürün paketlerinde size yardımcı olacaktır. Sorunuzun geri kalanı için bazı fikirlerim var, ancak şu anda bu cevabı bitirmek için zamanım yok ...


Promosyonlar

Birçok promosyon türünü listeliyorsunuz. Sen kurallara motor çeşit içine bakmak isteyebilirsiniz, ama bunun daha basit şeyleri tutmaya çalışacağım, ama yine de ... Bu olacak karmaşık hale geldiğini ..

Bir fiyatın belirli bir yüzde olarak indirildiği basit promosyonlarla başlayalım:

PERCENT_DISCOUNT
----------------
  id (PK)
  isim
  percent_amount

product_promotions
------------------
  id (PK)
  product_id (FK to product.id)
  promosyon_kimliği (FK - yüzde_discount.id)
  Başlangıç ​​tarihi
  bitiş tarihi

Burada, ürün için kaç yüzde indirim yaptığınızı gösteren bir tablo var. Başka bir tablo aslında ürünleri indirim oranına bağlar ve ayrıca bir başlangıç ​​ve bitiş tarihi içerir, böylece indirimin herhangi bir tarihte geçerli olup olmadığını bilirsiniz.

Daha sonraki promosyonlar için fikirler ...


Yazarken vaktiniz olduğunda geri kalan cevabınızı okumak için sabırsızlanıyorum. Yardımın için teşekkürler.
cml

Kesinlikle "kural motorları" nı inceleyeceğim! Herhangi bir iyi kaynak bağlantınız varsa, bunları yoluma gönderin! Benim bildiğim en büyük sorun, sıralanmamış, gruplanmamış sipariş kalemleri için hangi promosyonların uygulanacağının belirlenmesidir (Durum B).
cml

@cml: Muhtemelen istediğiniz özelliklere sahip ticari ürünler olduğunu biliyorum. Bildiğim biri Hybris, çok gelişmiş bir promosyon sistemi olduğunu duydum.
Sinirli

Güncelleme 1'i ekledim
cml

1

Her ne kadar onun 3 yaşında bir iş parçacığı, hala birileri için yararlı olabileceğini düşünerek cevap veriyorum.

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             

Teklif Detayları ------------

 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

Bir teklif oluşturmak içinAyrıntılar için zorunlu bir mixgropu1 ve amixGropu2 sağlamalısınız. Yani caseB, aşağıdaki gibi sadece 2 teklife sahiptir:

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.

Diğer teklifler iş mantığına dayanır: Miktar teklifi indirimi için: bir müşteri için bir teklifte B sayısını bulmak için sorgu oluşturun. QTYB diyelim. QTYB% 2'yi bulun ve quantityOffer değeriyle (20 $ olan) çarpın

İstatistik teklifi için, bir müşterinin satın alması için sadece kazanılmış puan adı verilen başka bir bit ekleyin. ve kazanılan noktaya bir son kullanma tarihi ayarlayın. kazanılan puan, satın alınan tutarla aynı olabilir. Satın alınan tutarın> = X $ olup olmadığını kontrol edin, politikaya göre indirim yapın.

Benzer şekilde sipariş süresinin karşılaştırılması, 5PM'den önce ve 10:00'dan sonra,% 5 başka bir sorun% 10 indirim verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.