Mysql
 sql >> Database >  >> RDS >> Mysql

Follow-up:come modellare lo sconto sugli articoli in un database?

Il design del ProductPricing la tabella ci consente di non dover mai eliminare i vecchi dati sui prezzi (a volte la direzione desidera un report basato su tali dati). Con quello che hai descritto sopra, inizieresti così (ho cambiato la data di inizio solo così è facile capire che sì, questo era il prezzo originale quando il sistema è entrato in vigore):

ProductPricing
   1   |    Jan 1, 1970, 00:00:00 |   Jan 1, 2038, 00:00:00  |   10$ |   10$

Supponiamo ora di dare un prezzo scontato alle tue mele e di voler essere proattivo e impostare il sistema per quando la vendita sarà finita:

ProductPricing
   1   |    Jan 1, 1970, 00:00:00 |  Dec 20, 2011, 00:00:00  |   10$ |   10$
   1   |   Dec 20, 2011, 00:00:01 |  Dec 26, 2011, 00:00:00  |  7.5$ |   10$
   1   |   Dec 26, 2011, 00:00:01 |   Jan 1, 2038, 00:00:00  |   10$ |   10$

Quello che abbiamo fatto qui è stato:

  1. Aggiorna il record esistente con il timestamp 2038, modificando il endDateTimeStamp campo per riflettere l'inizio della vendita
  2. Inserisci un nuovo record per definire la vendita
  3. Inserisci un altro nuovo record per riflettere nuovamente il prezzo normale

Senza timestamp sovrapposti, hai la garanzia di ottenere un singolo record quando esegui query sul database per il tuo prezzo. Quindi,

SELECT p.Name, pp.price, pp.original_price
FROM Product p
INNER JOIN ProductPricing pp ON pp.productId = p.productId
WHERE NOW() BETWEEN pp.startDateTimeStamp AND pp.endDateTimeStamp

ti darebbe un elenco di prodotti con il prezzo attuale.