Sto lavorando a un nuovo punto vendita per un'azienda che produce prodotti a prezzi diversi a seconda del mix di prodotti.
Tutti i prodotti hanno un prezzo base.
Per spiegare il mio problema, userò le seguenti informazioni:
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
L'azienda ha pacchetti, ad esempio Pacchetto "Combo": per il prodotto A o B, se scegli 1 di Q o R e 1 di X, Y o Z ottieni uno sconto di $ 20.
Caso A: a volte i clienti aggiungono a un prodotto di base quando effettuano un ordine, ad esempio: Non sono uno dei prodotti A, e aggiungono il prodotto Q e il prodotto P a quello per creare un pacchetto che ha un prezzo scontato. Quindi potrebbero aggiungere che desiderano 1 prodotto B con 1 R e 1 Z.
Caso B: A volte i clienti aggiungono 1 A e 2 B, 2 Q, 1 S, 2 X e 1 Z. Secondo le regole stabilite dal pacchetto "Combo", solo 2 combo si applica perché S non è un elemento combo.
Altre promozioni dipendono dalla quantità, quindi se acquisti 2 di B ricevi uno sconto del 20% e / o dipende dal tempo, è valido solo dopo le 17.00 o prima del 10% di sconto se prima delle 10.00. Un'altra promozione potrebbe dipendere dal momento in cui si è verificato l'ultimo acquisto o se hai acquistato più di $ X in Y timeframe.
I miei problemi:
1) Come strutturo le tabelle in modo da creare i vari pacchetti o promozioni in modo molto flessibile per aggiungere diversi tipi di promozioni con requisiti diversi?
2) Quando ordinano come Case B (o un mix di Case A e Case B) come faccio a strutturare la mia query in modo che possa provare per vedere quali mix di prodotti sono nell'ordine, e aggiornare i prezzi / descrizioni di conseguenza? In definitiva, il risultato migliore per questa query restituirebbe quali pacchetti e promozioni soddisfano i requisiti in base ai quali offre il massimo beneficio al cliente (ad esempio, forse ciò che ha ordinato soddisfa i requisiti delle promozioni 1 e 3, ma la promozione 3 è meno costosa. deve funzionare con più promozioni).
Grazie in anticipo per l'aiuto!
UPDATE # 1
Per descrivere meglio i problemi in corso e aggiornare il lavoro svolto finora per risolverli Includo un ERD del modello di prodotto limitato alle entità e agli attributi che influiscono sul problema (cioè l'inventario non è in gioco qui, quindi non sono presenti entità di inventario).
Stoancheincludendoidatidiesempiodelleentitàedegliattributicheinfluisconosuquestadomanda(persemplificarelaletturadeidati,inseriscoilnome/ledescrizionialpostodellechiaviesterne):
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
Quindi, con la ricerca e il supporto forniti dalla community fino a quando non sono stato informato, sono stato in grado di risolvere il Problema n. 1. In effetti, l'ho fatto con più flessibilità di quanto pensassi di poter fare nella prima distribuzione del sistema.
Tutti se ci sono stati progressi con il Problema 2, non è stato risolto con soddisfazione. Ci sono state alcune idee su come fare questo, Neil McGuilgan ha posto una grande domanda che porta a una possibile soluzione utilizzando la divisione relazionale (dba.stackexchange.com/questions/45829/che-è-il-nome-di-questo-- of-query-and-what-is-an-efficient-example) e questo libro (www.amazon.com/books/dp/0471380237) ha aiutato molto. Tuttavia questa soluzione al momento e, a quanto ho capito, funziona solo con "uno" record (combo) alla volta. Se un cliente cammina e dice che vuole 2 cheeseburger, 1 hamburger, 1 piccolo succo di mela, 1 coke, 1 patatine fritte e 2 anelli di cipolla, ho bisogno di un modo per rilevare che nel mix c'è solo una combo e aggiungere l'altro prodotti a prezzo base. Se ci sono più combinazioni combo, sto cercando (idealmente per una query sql) in grado di dare la priorità alle combinazioni combo con risparmi maggiori.
Un'idea che ho trovato per risolvere il problema due è quella di aggiungere e attribuire a PRODUCT COMPONENT flaggin il prodotto principale per la combo (cioè hamburger). Quindi, quando si esegue il processo di determinazione del prezzo, interrogare quali prodotti nell'ordine sono prodotti principali in un "pacchetto", correlando la query allo sconto dato dalla tabella PREZZO COMPONENTE e ordinando in base a tale valore (in ordine decrescente) e in tale ordine di controllo dei pacchi per vedere se è possibile creare un "pacchetto" con i restanti prodotti non principali con una query e ripetere il processo finché non ci sono più prodotti principali o non ci sono altri prodotti non principali nel resto.