Дизайнът на ProductPricing
таблицата ни позволява никога да не се налага да изтриваме стари данни за цените (понякога ръководството иска отчет, базиран на тези данни). С това, което описахте по-горе, бихте започнали така (промених началната дата, само за да е лесно да се разбере, че да, това беше първоначалната цена, когато системата влезе в сила):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Сега да приемем, че давате отстъпка за ябълките си и сте искали да сте проактивни и да настроите системата, когато продажбата приключи:
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$
Това, което направихме тук, беше:
- Актуализирайте съществуващия запис с времевата марка 2038, като промените
endDateTimeStamp
поле за отразяване на началото на продажбата - Вмъкнете нов запис, за да дефинирате продажбата
- Вмъкнете друг нов запис, за да отразите отново нормалната цена
Без припокриващи се времеви печати, вие гарантирано ще получите един запис, когато зададете заявка в базата данни за вашата цена. По този начин,
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
ще ви предостави списък с продукти с текущи цени.