Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Follow-up:Wie kann man Rabatte auf Artikel in einer Datenbank modellieren?

Das Design des ProductPricing Tabelle ermöglicht es uns, niemals alte Preisdaten löschen zu müssen (manchmal möchte das Management einen Bericht, der auf diesen Daten basiert). Mit dem, was Sie oben beschrieben haben, würden Sie wie folgt beginnen (ich habe das Startdatum geändert, damit es leicht zu erkennen ist, dass dies der ursprüngliche Preis war, als das System eingeführt wurde):

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

Nehmen wir nun an, Sie bieten einen Rabattpreis für Ihre Äpfel an und möchten proaktiv sein und das System für das Ende des Verkaufs einrichten:

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$

Was wir hier gemacht haben, war:

  1. Aktualisieren Sie den vorhandenen Datensatz mit dem Zeitstempel 2038, indem Sie den endDateTimeStamp ändern Feld, um den Beginn des Verkaufs widerzuspiegeln
  2. Fügen Sie einen neuen Datensatz ein, um den Verkauf zu definieren
  3. Fügen Sie einen weiteren neuen Datensatz ein, um wieder den normalen Preis widerzuspiegeln

Ohne sich überschneidende Zeitstempel erhalten Sie garantiert einen einzigen Datensatz, wenn Sie die Datenbank nach Ihrem Preis abfragen. Also

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

erhalten Sie eine Produktliste mit aktuellen Preisen.