Sto lavorando a un nuovo punto vendita per un'azienda che produce 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
La società ha pacchetti, ad esempio il pacchetto "Combo": per il prodotto A o B, se si sceglie 1 di Q o R e 1 di X, Y o Z, si ottiene uno sconto di $ 20.
Caso A: a volte i clienti si aggiungono a un prodotto di base quando effettuano un ordine, ad esempio: non fanno parte del Prodotto 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 vogliono 1 del prodotto B con 1 R e 1 Z.
Caso B: a volte i clienti aggiungeranno 1 A e 2 B, 2 Q, 1 S, 2 X e 1 Z. Secondo le regole stabilite dal pacchetto "Combo", si applicherebbero solo 2 combo poiché S non è un articolo combinato.
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% se prima delle 10:00. Un'altra promozione potrebbe dipendere da quando si è verificato il tuo ultimo acquisto o se hai acquistato più di $ X in Y.
I miei problemi:
1) Come strutturare le tabelle in modo da creare i diversi pacchetti o promozioni in modo molto flessibile per aggiungere diversi tipi di promozioni con requisiti diversi?
2) Quando ordinano come il Caso B (o una combinazione di Caso A e Caso B) come strutturare la mia query in modo da poter verificare quali mix di prodotti sono nell'ordine e aggiornare i prezzi / le descrizioni di conseguenza ? In definitiva, il risultato migliore per questa query restituirebbe quali pacchetti e promozioni soddisfano i requisiti in ordine di cui offre il massimo beneficio per il cliente (vale a dire forse ciò che hanno ordinato soddisfa i requisiti per la promozione 1 e 3, ma la promozione 3 è meno costosa. deve funzionare con più promozioni).
Grazie in anticipo per l'aiuto!
AGGIORNAMENTO # 1
Per descrivere meglio i problemi a portata di mano e aggiornare il lavoro svolto finora per risolverli, sto includendo un ERD del modello del prodotto limitato alle entità e agli attributi che influenzano il problema (vale a dire che l'inventario non è in gioco qui, quindi nessun inventario le entità sono presenti).
Includo anche dati di esempio delle entità e degli attributi che influiscono su questa domanda (per semplificare la lettura dei dati, inserisco il nome / la descrizione al posto delle chiavi esterne):
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 comunità fino a che non ne sono stato a conoscenza, sono stato in grado di risolvere il problema n. 1. In effetti, l'ho fatto con una maggiore flessibilità di quanto pensassi di poter fare nella prima distribuzione del sistema.
Tutti sebbene ci siano stati progressi con il Problema 2, non è risolto con soddisfazione. Ci sono state alcune idee su come farlo, Neil McGuilgan ha posto una grande domanda che portava a una possibile soluzione usando la divisione relazionale (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- 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 come ho capito, funziona solo con "un" record (combo) alla volta. Se un cliente si avvicina e dice che vuole 2 cheeseburger, 1 hamburger, 1 piccolo succo di mela, 1 coca cola, 1 patatine fritte e 2 anelli di cipolla, ho bisogno di un modo per rilevare che c'è solo una combinazione nel mix e aggiungere l'altro prodotti a prezzo base. Se ci sono più combinazioni combo, io '
Un'idea che mi è venuta in mente per risolvere il secondo problema è quella di aggiungere e attribuire al COMPONENTE DEL PRODOTTO flaggin il prodotto principale per la combinazione (cioè hamburger). Quindi, quando si esegue il processo di determinazione dei prezzi, interrogare quali prodotti nell'ordine sono i prodotti principali in un "pacchetto", correlando la query allo sconto fornito dalla tabella PRICE COMPONENT e ordinando per quel valore (decrescente), e in quell'ordine di pacchetti verificare per vedere se è possibile creare un "pacchetto" con i restanti prodotti non principali con una query e ripetere il processo fino a quando non ci sono più prodotti principali o non ci sono più prodotti non principali nel resto.