Skema Basis Data untuk Produk Harga (paket, promosi, berdasarkan jumlah, penawaran waktu terbatas ...)


11

Saya sedang mengerjakan titik penjualan baru untuk perusahaan yang produknya dengan harga yang berbeda tergantung pada bauran produk.

Semua produk memiliki harga dasar.

Untuk menjelaskan masalah saya, saya akan menggunakan info berikut:

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

Perusahaan memiliki Paket, misalnya Paket "Combo": untuk produk A atau B, jika Anda memilih 1 dari Q atau R dan 1 dari X, Y atau Z Anda mendapatkan diskon $ 20.

Kasus A: Kadang-kadang pelanggan menambahkan ke produk dasar ketika melakukan pemesanan, misalnya: Mereka bukan salah satu dari Produk A, dan mereka menambahkan Produk Q dan Produk P untuk itu untuk membuat paket yang memiliki harga diskon. Kemudian mereka dapat menambahkan bahwa mereka menginginkan 1 produk B dengan 1 R dan 1 Z.

Kasus B: Kadang-kadang pelanggan akan menambahkan 1 A dan 2 B, 2 Q, 1 S, 2 X dan 1 Z. Menurut aturan yang ditetapkan oleh Paket "Combo", hanya 2 combo yang akan berlaku karena S bukan item kombo.

Promosi lainnya tergantung pada kuantitas, jadi jika Anda membeli 2 B, Anda mendapat diskon 20% dan / atau tergantung pada waktu, itu hanya berlaku setelah pukul 17:00 atau sebelum diskon 10% jika sebelum pukul 10:00. Promosi lain mungkin bergantung pada kapan pembelian terakhir Anda terjadi atau jika Anda telah membeli lebih dari $ X dalam jangka waktu Y.

Masalah saya:

1) Bagaimana cara menyusun tabel sehingga saya dapat membuat paket atau promosi yang berbeda dengan cara yang sangat fleksibel untuk menambahkan berbagai jenis promosi dengan persyaratan yang berbeda?

2) Ketika mereka memesan seperti Kasus B (atau campuran Kasus A dan Kasus B) bagaimana saya menyusun permintaan saya sehingga saya dapat menguji untuk melihat bauran produk apa yang ada dalam pesanan, dan memperbarui harga / deskripsi yang sesuai ? Pada akhirnya, hasil terbaik untuk kueri ini akan mengembalikan paket dan promosi mana yang memiliki persyaratan terpenuhi yang memberikan manfaat paling besar kepada pelanggan (yaitu mungkin apa yang mereka pesan memenuhi persyaratan untuk promosi 1 dan 3, tetapi promosi 3 lebih murah. Ini harus bekerja dengan beberapa promosi).

Terima kasih sebelumnya atas bantuannya!

PEMBARUAN # 1

Untuk lebih menjelaskan masalah yang dihadapi dan untuk memperbarui pekerjaan yang dilakukan sejauh ini untuk menyelesaikannya, saya menyertakan ERD Model Produk terbatas pada entitas dan atribut yang mempengaruhi masalah (yaitu inventaris tidak berperan di sini, jadi tidak ada inventaris entitas hadir).

masukkan deskripsi gambar di sini

Saya juga memasukkan data sampel dari entitas dan atribut yang memengaruhi pertanyaan ini (untuk mempermudah membaca data, saya memasukkan nama / deskripsi sebagai pengganti Foreign Keys):

Berikut adalah tautan ke diagram alur yang memberikan contoh kombo, cara cepat dan visual untuk memahami struktur tabel.

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

Jadi, dengan penelitian dan dukungan yang diberikan oleh komunitas hingga tahu, saya telah mampu memecahkan Masalah # 1. Bahkan, saya telah melakukannya dengan lebih banyak fleksibilitas daripada yang saya pikir bisa saya lakukan dalam penyebaran sistem yang pertama.

Semua meskipun telah ada kemajuan dengan Soal 2, itu tidak diselesaikan dengan memuaskan. Ada beberapa ide tentang bagaimana melakukan ini, Neil McGuilgan mengajukan pertanyaan besar menuju kemungkinan solusi menggunakan Divisi Relasional (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- of-query-dan-apa-adalah-efisien-contoh) dan buku ini (www.amazon.com/books/dp/0471380237) banyak membantu. Namun solusi ini saat ini, dan seperti yang saya pahami, hanya bekerja dengan "satu" catatan (kombo) pada suatu waktu. Jika seorang pelanggan berjalan dan berkata ia menginginkan 2 burger keju, 1 hamburger, 1 Jus Apel kecil, 1 Coke, 1 Kentang Goreng, dan 2 Cincin Bawang, saya perlu cara untuk mendeteksi bahwa hanya ada satu kombo dalam campuran dan menambahkan yang lain produk dengan harga dasar. Jika ada beberapa kombinasi kombo, saya

Satu ide yang saya buat untuk memecahkan masalah kedua adalah menambahkan dan atribut ke PRODUCT COMPONENT flaggin produk utama untuk combo (yaitu hamburger). Kemudian ketika menjalankan proses penetapan harga, kueri produk apa dalam pesanan adalah produk utama dalam "paket", menghubungkan kueri dengan diskon yang diberikan oleh tabel KOMPONEN HARGA dan memesan dengan nilai itu (menurun), dan dalam urutan paket itu memeriksa untuk melihat apakah Anda dapat membuat "paket" dengan produk-produk non-utama yang tersisa dengan kueri dan loop proses sampai tidak ada lagi produk utama atau tidak ada lagi produk-produk non-utama dalam sisanya.


Apa yang telah kamu lakukan sejauh ini ? Tunjukkan pada kami beberapa diagram ER.
Tulains Córdova

@ user61852 Saya melakukan sebagian besar ERD saya dengan tangan. Dapatkah Anda merekomendasikan alat untuk melakukannya di komputer agar saya dapat membagikannya? (semoga yang gratis :)
cml

@ user61852 Saya menemukan gliffy.com yang terbukti agak berguna. Saya sedang mengerjakan menyusun apa yang telah saya kerjakan untuk memperbarui pertanyaan saya.
cml

@ user61852 Saya telah menambahkan pembaruan # 1 untuk menampilkan ERD, diagram alir, uang muka dan data tabel sampel.
cml

Jawaban:


2

Ini bisa jadi rumit ...

1) Bagaimana cara menyusun tabel sehingga saya dapat membuat paket atau promosi yang berbeda dengan cara yang sangat fleksibel untuk menambahkan berbagai jenis promosi dengan persyaratan yang berbeda?

Anda bisa mulai dengan packaged_withtabel untuk menentukan produk mana yang dapat dikelompokkan dan dikemas bersama:

paket
-------
  id (PK)
  nama

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

packaged_with
-------------
  package_group_id (FK ke package_group.id)
  product_id (FK ke product.id)
  can_be_packaged_with (FK to product.id)

package_groupmengacu pada a package. packaged_withmerujuk ke productsdan package_groups, sehingga baris dalam packaged_withmenunjukkan produk mana yang dapat dikemas dengan suatu produk, dan satu paket dapat terdiri dari beberapa kelompok.

Data akan terlihat seperti ini:

paket
-------
ID | nama
------------
1 | Combo

package_group
------------
ID | nama
---------
1 | Grup QR
2 | Grup 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

Ini akan membantu Anda dengan paket produk itu sendiri. Saya punya beberapa ide untuk sisa pertanyaan Anda, tetapi saya tidak punya waktu untuk menyelesaikan jawaban ini sekarang ...


Promosi

Anda mencantumkan banyak jenis promosi. Anda mungkin ingin melihat semacam aturan-mesin, tapi saya akan mencoba untuk menjaga hal-hal lebih sederhana dari itu, tapi tetap saja ... Ini akan menjadi rumit ..

Mari kita mulai dengan promosi sederhana di mana harga diskon persentase tertentu:

persen_diskon
----------------
  id (PK)
  nama
  persen_jumlah

promosi produk
------------------
  id (PK)
  product_id (FK ke product.id)
  promotion_id (FK ke persen_discount.id)
  mulai tanggal
  end_date

Di sini kami memiliki tabel yang menyimpan persentase yang Anda dapatkan untuk produk. Tabel lain sebenarnya menautkan produk ke tingkat diskonto, dan juga menyertakan tanggal mulai dan berakhir sehingga Anda tahu jika diskon tersebut berlaku pada tanggal tertentu.

Gagasan untuk promosi lainnya akan datang kemudian ...


Saya berharap dapat membaca jawaban Anda yang lain ketika Anda punya waktu untuk menuliskannya. Terima kasih atas bantuan Anda.
cml

Saya pasti akan melihat ke "mesin aturan"! Jika Anda memiliki tautan sumber daya yang bagus, kirimkan dengan cara saya! Masalah terbesar yang saya ketahui adalah menentukan promosi apa yang berlaku untuk daftar item pesanan yang tidak diurutkan dan tidak dikelompokkan (Kasus B).
cml

@cml: Saya tahu ada produk komersial yang mungkin sudah memiliki kemampuan yang Anda inginkan. Yang saya tahu bernama Hybris, saya pernah mendengar memiliki sistem promosi yang sangat canggih.
FrustratedWithFormsDesigner

Saya menambahkan pembaruan # 1
cml

1

Meskipun utasnya berumur 3 tahun, saya tetap membalasnya dengan berpikir bahwa itu mungkin bermanfaat bagi seseorang.

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

Untuk membangun offerDetails, Anda harus memberikan mandatory, a mixgropu1 dan amixGropu2. Jadi caseB, hanya memiliki 2 penawaran sebagai berikut:

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.

Penawaran lain didasarkan pada logika bisnis: Untuk diskon penawaran kuantitas: buat kueri untuk menemukan jumlah B dalam penawaran untuk pelanggan. sebut saja QTYB. temukan QTYB% 2 dan kalikan dengan nilai quantityOffer (yaitu $ 20)

Untuk penawaran statistik, Cukup tambahkan bit lain yang disebut EarnPoint untuk pembelian pelanggan. dan setel EarnPoint suatu tanggal kedaluwarsa. Poin yang didapat bisa sama dengan jumlah yang dibeli. Periksa apakah jumlah yang dibeli> = $ X, mereka mengeluarkan diskon sesuai kebijakan.

Serupa adalah perbandingan waktu pemesanan jika sebelum 17:00 dan setelah 10:00 kemudian mengeluarkan 5% lagi mengeluarkan diskon 10%.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.