Projekt ProductPricing
tabela pozwala nam nigdy nie usuwać starych danych cenowych (czasami kierownictwo chce raportu opartego na tych danych). Z tym, co opisałeś powyżej, zacząłbyś w ten sposób (zmieniłem datę rozpoczęcia, aby łatwo zauważyć, że tak, to była pierwotna cena, gdy system został wprowadzony):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Załóżmy teraz, że dajesz zniżkę na swoje jabłka i chcesz działać proaktywnie i skonfigurować system na koniec wyprzedaży:
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$
To, co tutaj zrobiliśmy, to:
- Zaktualizuj istniejący rekord sygnaturą czasową 2038, zmieniając
endDateTimeStamp
pole odzwierciedlające początek wyprzedaży - Wstaw nowy rekord, aby zdefiniować sprzedaż
- Wstaw kolejny nowy rekord, aby ponownie odzwierciedlić normalną cenę
Bez nakładających się sygnatur czasowych masz gwarancję uzyskania jednego rekordu, gdy zapytasz bazę danych o swoją cenę. Tak więc
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
otrzymasz listę produktów z aktualnymi cenami.