Come progettare il diagramma ER per consentire il recupero dei dati sui prezzi delle opzioni di prodotto?

2

Sto cercando un modo per organizzare le tabelle del database quando si tratta di gestire il recupero dei prezzi delle opzioni del prodotto e anche di memorizzare la cronologia dei prezzi per il mio caso d'uso.

Cosa ho

Ho un product personalizzato con vari prodotti options e appartiene a un prodotto category . Voglio poter interrogare current price per le opzioni di prodotto e mantenere price history a scopo di riferimento / controllo. Category è effettivamente un "gruppo di prodotti".

Ogni prodotto è su misura per ordine, assemblato da opzioni su richiesta del cliente. Non ci sono prodotti preconfigurati e il prezzo del prodotto è la somma dei prezzi selezionati option . Non esiste un concetto di prezzo di un singolo prodotto.

Voglio rispondere a domande come

  1. Qual è il prezzo corrente dell'opzione X del prodotto Y? (recupero dei prezzi)
  2. Qual è stato il prezzo dell'opzione X del prodotto Y l'anno scorso? (controllo e cronologia)

Nota: ogni category (alias "gruppo di prodotti") ha un set valido di options e ogni singolo modello di prodotto ha il proprio prezzo per ogni option . Ad esempio, diciamo che Categoria X ha l'opzione denominata Y. Modello di prodotto 10 in opzione prezzi X categoria Y a $ 10. Il modello di prodotto 20 nella stessa categoria ha lo stesso prezzo a $ 20.

Cosa ho

Pensochequantosoprarispondabeneallemieesigenze-Hoprodotticheappartengonoavariecategorie,incuiiprodottihannovarieopzionibasatesuvariecategoriedisponibiliacuiappartengono,ecategory_has_optionsdefiniscelerelazionidisponibiliperleopzionidiprodottovalide.

DesignRicercaecronologiadeiprezzi

Quellochepensoèavereduetabelleinquestomodo:

price_lookup tabella che mi consentirà di rispondere alla domanda n. 1.

price_history tabella che mi consentirà di rispondere alla domanda n. 2

Ho difficoltà a capire come connettere queste tabelle al mio schema esistente. C'è un design che mi soddisfi bene per il mio scopo?

    
posta Dennis 16.08.2016 - 16:54
fonte

3 risposte

2
  • Una categoria di prezzo è la combinazione di diverse opzioni e funzioni.
  • Ma quelle opzioni e funzionalità devono essere applicabili / disponibili per quei prodotti
  • Assemblate categorie di prezzo diverse tra quelle disponibili e le funzionalità per un determinato prodotto
  • Hai una tabella della cronologia dei prezzi di ogni categoria di prezzo, quindi nessun prezzo è perso
  • Non è necessario disporre di tabelle dei prezzi separate

Un PNG vale 1024 parole:

Lafunzionalitàel'opzionediassunzionedellaversionepiùsemplicesonolastessacosa,aggiungonodettaglisuiprezzi:

  • Alcunerestrizioninonpossonoesseremodellateedevonoessereverificateconunaproceduradicontrollodiintegrità,comeadesempiochenonesisteunasovrapposizionedidateperlastessatabellastoricaihprezzo/prodotto/categoria.

Aggiornamento:

  • PRICE_CATEGORYèunatabellaprincipaleeOPTION_CATEGORYèilsuodettaglio.Quindiunacategoriadiprezzoècomeuncombo/prodottocheaggiungemoltecosealprodottoprincipale.QuestecosesonoinOPTION_CATEGORY.
  • L'FKdaOPTION_CATEGORYaAVAILABLE_PRODUCT_OPTèquellodiassicurarsichetounonpossaaggiungereopzioni/caratteristicheaunprodottochenonsiapplicaadesso,comeaggiungereunposacenereaunamoto.
  • OPTION_CATEGORYhasoloFKsullealtreduetabelle

Unmodelloancorapiùsemplice:

  • Prodotti e opzioni sono nella stessa tabella, dopo che tutte le opzioni sono anche prodotti.
  • Una colonna indica se un prodotto è un prodotto di base o un'opzione.
  • Essendo una singola tabella, è necessaria una singola tabella dei prezzi storica.
  • La tabella OPTION è tra molti e molti tra i prodotti e indica loro quali opzioni sono teoricamente disponibili per ogni prodotto (niente vie di fuga per i motocicli)
  • Un trigger su OPTION deve garantire che solo i prodotti di base abbiano opzioni.
  • PRODUCT_COMBO è una combinazione denominata che consiste in un prodotto di base e una o più opzioni.
  • Ovviamente solo le opzioni relative a un prodotto possono essere aggiunte a una combinazione.
risposta data 16.08.2016 - 17:34
fonte
1

Codifica sempre come se la persona che finisce per mantenere il tuo codice sia uno psicopatico violento che sa dove vivi

Creare 3 diverse tabelle di prezzo e aspettarsi che gli sviluppatori sappiano quale è rilevante tra 9 mesi richiede molto.

Personalmente, andrei con

price(id, price, start_date, stop_date)

e avere una tabella separata per le funzionalità:

productPrice(id, productId, priceId, option)

Usare solo un timestamp per il tuo prezzo ha il vantaggio di non doversi preoccupare di 2 record di prezzo con date sovrapposte. Tuttavia, ha lo svantaggio che ora i tuoi record di prezzo dipendono l'uno dall'altro: perdi un singolo record e sai che non conosci più il prezzo storico.

    
risposta data 16.08.2016 - 17:18
fonte
1

Che ne dici di questo:

price_lookupfungedafonteautorevoleperladefinizionedell'opzionecategoria-prodotto.

price_historydefinisceiprezziperlesuddetteopzionidiprodotto.

Oquesto:

price_history serve come record autorevole dell'opzione di prodotto e memorizza anche la cronologia dei prezzi per data. Il meglio di entrambi i mondi!

Per ottenere il prezzo corrente del prodotto:

select amount
from price_history 
where product_id = X and option_id = Y 
and date_from <= NOW() and NOW() <= date_to;
    
risposta data 04.09.2016 - 02:35
fonte