Het ontwerp van de ProductPricing
tabel stelt ons in staat om nooit oude prijsgegevens te verwijderen (soms wil het management een rapport op basis van die gegevens). Met wat je hierboven hebt beschreven, zou je als volgt beginnen (ik heb de startdatum gewijzigd zodat het gemakkelijk is om te zien dat ja, dit was de oorspronkelijke prijs toen het systeem werd ingevoerd):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Stel nu dat u een kortingsprijs op uw appels geeft en dat u proactief wilt zijn en het systeem wilt instellen voor wanneer de verkoop voorbij is:
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$
Wat we hier deden was:
- Werk het bestaande record bij met de tijdstempel van 2038 en wijzig de
endDateTimeStamp
veld om het begin van de verkoop weer te geven - Voeg een nieuw record in om de verkoop te definiëren
- Voeg nog een nieuw record in om de normale prijs weer te geven
Zonder overlappende tijdstempels krijgt u gegarandeerd één record wanneer u de database opvraagt voor uw prijs. Dus,
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
zou u een productlijst met de huidige prijzen bezorgen.