Schema ฐานข้อมูลสำหรับราคาผลิตภัณฑ์ (แพ็คเกจ, โปรโมชั่น, ตามจำนวน, ข้อเสนอเวลา จำกัด ... )


11

ฉันกำลังทำงานในจุดขายใหม่สำหรับ บริษัท ที่ผลิตภัณฑ์ในราคาที่แตกต่างกันขึ้นอยู่กับส่วนผสมของผลิตภัณฑ์

ผลิตภัณฑ์ทั้งหมดมีราคาฐาน

เพื่ออธิบายปัญหาของฉันฉันจะใช้ข้อมูลต่อไปนี้:

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

บริษัท มีแพ็คเกจเช่นแพ็คเกจ "Combo": สำหรับผลิตภัณฑ์ A หรือ B หากคุณเลือก 1 จาก Q หรือ R และ 1 จาก X, Y หรือ Z คุณจะได้รับส่วนลด $ 20

กรณี A:บางครั้งลูกค้าเพิ่มไปยังผลิตภัณฑ์พื้นฐานเมื่อทำการสั่งซื้อตัวอย่างเช่นพวกเขาไม่ได้เป็นหนึ่งในผลิตภัณฑ์ A และพวกเขาเพิ่มผลิตภัณฑ์ Q และผลิตภัณฑ์ P ไปที่การสร้างแพคเกจที่มีราคาลดราคา จากนั้นพวกเขาอาจเพิ่มว่าพวกเขาต้องการ 1 ของผลิตภัณฑ์ B ที่มี 1 R และ 1 Z

กรณี B:บางครั้งลูกค้าจะเพิ่ม 1 A และ 2 B, 2 Q, 1 S, 2 X และ 1 Z ตามกฎที่กำหนดโดยแพ็คเกจ "Combo" จะมีคอมโบเพียง 2 ตัวเท่านั้นเนื่องจาก S ไม่ใช่รายการคำสั่งผสม

โปรโมชั่นอื่น ๆ ขึ้นอยู่กับปริมาณดังนั้นหากคุณซื้อ 2 of B คุณจะได้รับส่วนลด 20% และ / หรือขึ้นอยู่กับเวลาจะสามารถใช้งานได้หลังเวลา 17.00 น. เท่านั้นและก่อนที่จะลดราคา 10% หากก่อน 10 โมง การส่งเสริมการขายอื่นอาจขึ้นอยู่กับว่าการซื้อครั้งล่าสุดของคุณเกิดขึ้นหรือหากคุณซื้อมากกว่า $ X ในช่วงเวลา Y

ปัญหาของฉัน:

1) ฉันจะจัดโครงสร้างตารางอย่างไรฉันจึงสร้างแพ็คเกจหรือโปรโมชั่นต่าง ๆ ในแบบที่ยืดหยุ่นมากในการเพิ่มประเภทโปรโมชั่นต่าง ๆ ที่มีข้อกำหนดต่างกัน?

2) เมื่อพวกเขาสั่งซื้อเช่น Case B (หรือการผสมผสานของ Case A และ Case B) ฉันจะจัดโครงสร้างคิวรีของฉันอย่างไรเพื่อให้ฉันสามารถทดสอบเพื่อดูว่ามิกซ์ผลิตภัณฑ์ (es) ใดบ้างในการสั่งซื้อและอัปเดตราคา / คำอธิบายตาม ? ในที่สุดผลลัพธ์ที่ดีที่สุดสำหรับการค้นหานี้จะส่งคืนแพคเกจและโปรโมชั่นที่มีความต้องการในการสั่งซื้อเพื่อให้เกิดประโยชน์สูงสุดแก่ลูกค้า (นั่นคือสิ่งที่พวกเขาสั่งให้ตอบสนองความต้องการสำหรับโปรโมชัน 1 และ 3 จะต้องทำงานกับการส่งเสริมการขายหลายรายการ)

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ!

อัปเดต # 1

เพื่ออธิบายปัญหาในมือให้ดีขึ้นและเพื่อปรับปรุงงานที่ทำไปแล้วเพื่อแก้ไขปัญหาเหล่านี้ฉันกำลังรวบรวม ERD ของรุ่นผลิตภัณฑ์ที่ จำกัด เฉพาะเอนทิตีและคุณลักษณะที่มีผลต่อปัญหา (เช่นไม่มีสินค้าคงคลังอยู่ที่นี่ดังนั้นไม่มีสินค้าคงคลัง ปัจจุบัน)

ป้อนคำอธิบายรูปภาพที่นี่

ฉันยังรวมถึงข้อมูลตัวอย่างจากเอนทิตีและแอตทริบิวต์ที่มีผลกับคำถามนี้ (เพื่อให้การอ่านข้อมูลง่ายขึ้นฉันกำลังใส่ชื่อ / คำอธิบายแทน Foreign Keys):

นี่คือลิงค์ไปยังแผนภูมิการไหลที่ให้ตัวอย่างของคำสั่งผสมวิธีที่รวดเร็วและมองเห็นได้เพื่อทำความเข้าใจโครงสร้างของตาราง

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-an-effective- ตัวอย่าง) และหนังสือเล่มนี้ (www.amazon.com/books/dp/0471380237) ช่วยได้มาก อย่างไรก็ตามการแก้ปัญหานี้ในปัจจุบันและในขณะที่ฉันเข้าใจมันทำงานได้เฉพาะกับบันทึก "หนึ่ง" (คำสั่งผสม) ในแต่ละครั้ง หากลูกค้าเดินเข้ามาและบอกว่าเขาต้องการชีสเบอร์เกอร์ 2 ตัวแฮมเบอร์เกอร์ 1 แก้วน้ำแอปเปิ้ลเล็ก 1 แก้วโค้ก 1 เฟรนช์ฟราย 1 และแหวนหอมใหญ่ 2 ชิ้นฉันต้องการวิธีการตรวจสอบว่ามีคำสั่งผสมเพียงคำเดียวในส่วนผสม ผลิตภัณฑ์ในราคาฐาน หากมีการรวมกันหลายคำสั่งผสมฉัน

แนวคิดหนึ่งที่ฉันคิดขึ้นเพื่อแก้ไขปัญหาที่สองคือการเพิ่มและแอตทริบิวต์ให้กับการทำเครื่องหมายส่วนประกอบของผลิตภัณฑ์เป็นผลิตภัณฑ์หลักสำหรับคอมโบ (เช่นแฮมเบอร์เกอร์) จากนั้นเมื่อเรียกใช้กระบวนการกำหนดราคาให้สอบถามว่าผลิตภัณฑ์ใดในการสั่งซื้อคือผลิตภัณฑ์หลักใน "แพ็คเกจ" ซึ่งเกี่ยวข้องกับการค้นหาส่วนลดที่ได้รับจากตารางส่วนประกอบราคาและการสั่งซื้อตามค่านั้น (มากไปหาน้อย) และในการตรวจสอบลำดับ เพื่อดูว่าคุณสามารถสร้าง "แพ็คเกจ" ด้วยผลิตภัณฑ์ที่ไม่ใช่ผลิตภัณฑ์หลักที่เหลือด้วยแบบสอบถามและวนรอบกระบวนการจนกว่าจะไม่มีผลิตภัณฑ์หลักเพิ่มเติมหรือไม่มีผลิตภัณฑ์ที่ไม่ใช่ผลิตภัณฑ์หลักเพิ่มเติมในส่วนที่เหลือ


คุณทำอะไรไปแล้ว แสดงแผนภาพ ER บางอย่างให้เราดู
Tulains Córdova

@ user61852 ฉันทำ ERD ส่วนใหญ่ด้วยมือ คุณสามารถแนะนำเครื่องมือในการทำสิ่งเหล่านี้บนคอมพิวเตอร์เพื่อให้ฉันสามารถแบ่งปันได้หรือไม่? (หวังว่าจะเป็นของฟรี :)
cml

@ user61852 ฉันพบ gliffy.com ซึ่งพิสูจน์แล้วว่ามีประโยชน์มากกว่า ฉันกำลังพยายามรวบรวมสิ่งที่ฉันได้ทำเพื่ออัปเดตคำถามของฉัน
cml

@ user61852 ฉันได้เพิ่มการอัปเดต # 1 เพื่อแสดง ERD, โฟลว์แผนภูมิ, ความก้าวหน้าและข้อมูลตารางตัวอย่าง
cml

คำตอบ:


2

สิ่งนี้อาจซับซ้อน ...

1) ฉันจะจัดโครงสร้างตารางอย่างไรฉันจึงสร้างแพ็คเกจหรือโปรโมชั่นต่าง ๆ ในแบบที่ยืดหยุ่นมากในการเพิ่มประเภทโปรโมชั่นต่าง ๆ ที่มีข้อกำหนดต่างกัน?

คุณสามารถเริ่มต้นด้วยpackaged_withตารางเพื่อพิจารณาว่าผลิตภัณฑ์ใดบ้างที่สามารถจัดกลุ่มและบรรจุรวมกันได้:

บรรจุภัณฑ์
-------
  id (PK)
  ชื่อ

package_group
-------------
  package_id (FK ไปยัง package.id)
  ชื่อ

packaged_with
-------------
  package_group_id (FK ถึง package_group.id)
  product_id (FK ถึงผลิตภัณฑ์. id)
  can_be_packaged_with (FK ถึงผลิตภัณฑ์. id)

package_grouppackageหมายถึง packaged_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 | X
2 | A | Y
2 | A | Z
1 | B | Q
1 | B | R
2 | B | X
2 | B | Y
2 | B | Z

สิ่งนี้จะช่วยให้คุณมีแพ็คเกจผลิตภัณฑ์ด้วยตนเอง ฉันมีความคิดบางอย่างสำหรับคำถามที่เหลือของคุณ แต่ฉันไม่มีเวลาตอบคำถามนี้ในตอนนี้ ...


โปรโมชั่น

คุณมีรายการโปรโมชั่นมากมาย คุณอาจต้องการตรวจสอบกฎเครื่องยนต์บางอย่าง แต่ฉันจะพยายามทำให้สิ่งต่าง ๆ ง่ายกว่านั้น แต่ยัง ... สิ่งนี้จะซับซ้อน ...

เริ่มด้วยโปรโมชั่นง่าย ๆ ที่ลดราคาเป็นเปอร์เซ็นต์:

PERCENT_DISCOUNT
----------------
  id (PK)
  ชื่อ
  percent_amount

product_promotions
------------------
  id (PK)
  product_id (FK ถึงผลิตภัณฑ์. id)
  promotion_id (FK ถึง percent_discount.id)
  วันที่เริ่มต้น
  end_date

ที่นี่เรามีตารางที่เก็บเปอร์เซ็นต์ที่คุณได้รับสำหรับผลิตภัณฑ์ ตารางอื่นเชื่อมโยงผลิตภัณฑ์กับอัตราคิดลดจริง ๆ และยังรวมถึงวันที่เริ่มต้นและสิ้นสุดเพื่อให้คุณทราบว่ามีส่วนลดในวันที่ที่กำหนด

แนวคิดสำหรับโปรโมชั่นอื่น ๆ มาในภายหลัง ...


ฉันหวังว่าจะอ่านส่วนที่เหลือของคุณตอบเมื่อคุณมีเวลาเขียน ขอบคุณสำหรับความช่วยเหลือของคุณ.
cml

แน่นอนฉันจะดูเป็น "กฎเครื่องยนต์"! หากคุณมีลิงค์แหล่งข้อมูลที่ดีส่งวิธีของฉัน! ปัญหาที่ใหญ่ที่สุดที่ฉันรู้คือการกำหนดโปรโมชั่นที่ใช้กับรายการสั่งซื้อที่ไม่ได้จัดกลุ่มและไม่จัดกลุ่ม (กรณี B)
cml

@cml: ฉันรู้ว่ามีผลิตภัณฑ์เชิงพาณิชย์ที่อาจมีความสามารถที่คุณต้องการอยู่แล้ว อย่างใดอย่างหนึ่งฉันรู้ว่าเรียกว่า Hybris ฉันได้ยินมาว่ามีระบบการส่งเสริมที่ซับซ้อน
FrustratedWithFormsDesigner

ฉันเพิ่มการอัปเดต # 1
cml

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             

รายละเอียดข้อเสนอ ------------

 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 และคูณด้วยค่าจำนวนตัวเสนอ (ซึ่งคือ $ 20)

สำหรับข้อเสนอทางสถิติเพียงเพิ่มบิตที่เรียกว่า earnPoint สำหรับการซื้อของลูกค้า และกำหนดวันที่ได้รับแต้มหมดอายุ จุดที่ได้รับอาจเหมือนกับจำนวนที่ซื้อ ตรวจสอบว่าจำนวนเงินที่ซื้อ> = $ X พวกเขาออกส่วนลดตามนโยบาย

ที่คล้ายกันคือการเปรียบเทียบเวลาในการสั่งซื้อหากก่อน 5 โมงเย็นและหลังจาก 10:00 น. ออก 5% อื่นออกส่วนลด 10%

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.