2011-12-20 11 views
10

Sto costruendo un sito di e-commerce e vorrei offrire sconti su determinati articoli per un tempo limitato.come modellare lo sconto sugli articoli in un database?

Il mio tavolo del prodotto (MySQL) si presenta così:

 
Product 
    - productId 
    - Name 
    - Weight 
    - Price (price as on the cover of the item) 

Devo fare un altro tavolo per occasioni:

 
Deals 
- dealID 
- productID (Foreign Key) 
- discount (fractional value: percentage) 
- description 

Per gli elementi il ​​recupero:

  • Q1: Trova tutti i prodotti in prodotti con productID = tutti gli ID prodotto nella tabella offerte
  • q2: Aggiornare il prezzo con lo sconto dal tavolo offerte
  • Q3: restituire tutti i prodotti

Esiste un modo migliore per fare questo? Inoltre, come gestisco il caso del deal esistente solo per un tempo limitato?

MODIFICA: Desidero visualizzare quanto sconto offriamo per prodotto. Quindi, ho bisogno di due valori per prodotto, prezzo originale e prezzo scontato per la durata indicata.

ho inviato un follow-up per la soluzione proposta da crontab here

risposta

8

È possibile aggiungere una data/ora di inizio e una data/ora di fine alla tabella Deals. In questo modo, puoi verificare che la data corrente sia compresa tra le date di inizio e di fine dell'offerta.

La tabella Deals non ha realmente bisogno di un dealID - potrebbe essere codificato con productID e la data di inizio dello sconto. Inoltre, a seconda di quanto alto potrebbe essere il prezzo per un determinato articolo, ricorda di rendere il tuo campo discount qualcosa di sufficientemente preciso (qualcosa come DECIMAL 12,8).

Se si trattasse di me, vorrei davvero lascio prezzo fuori del tavolo Product e creare una tabella ProductPricing invece di creare una tabella Deals. La tabella ProductPricing consisterebbe nello productID e in un timestamp iniziale come i campi chiave, quindi avrà anche un timestamp finale per indicare quando il prezzo è cambiato. E, ovviamente, il prezzo dell'articolo.

+0

con una tabella dei prezzi dei prodotti, potresti non aver nemmeno bisogno della tabella delle offerte .. le date sono fondamentali. – Randy

+1

@Randy: ecco perché ho detto "invece di creare una tabella di offerte". ;) – Crontab

+0

@Crontab l'approccio ProductPricing è una soluzione piacevole in quanto ha il vantaggio aggiuntivo di consentire rettifiche di prezzo per prodotti che non hanno avuto origine da un'offerta/promozione (ad esempio, l'aumento dei prezzi). È persino possibile memorizzare il motivo dell'ultima modifica di prezzo sulla tabella ProductPricing. –

1

avrei usato un decimale per la colonna sconto.

Prezzo * di sconto = $ importo off

prezzo - $ importo off = prezzo nel carrello

per un tempo limitato si potrebbe mettere in una colonna data di scadenza, e restituire solo le righe che non sono scaduti.

2

Un'altra cosa da considerare sarebbe, come si modella la situazione quando non c'è sconto per un determinato articolo? È possibile utilizzare uno schema Null Object qui: in sostanza, quando viene creato un prodotto, si aggiunge anche un accordo su quel prodotto con uno sconto dello 0% e un tempo illimitato. In questo modo, è possibile semplificare la logica di recupero del prodotto (nessun join esterno nella query, n. if per il calcolo del prezzo).

0

vorrei aggiungere discountPrice, discountPercentage, colonna endDiscountDate alla tabella Product e creare tabella della cronologia di sconto per mantenere sconto monitoraggio

Poi, quando selezionate non c'è bisogno di unirsi a tavola è possibile scegliere il prezzo corretto controllando endDiscountDate

Problemi correlati