Návrh ProductPricing
tabulka nám umožňuje, abychom nikdy nemuseli odstraňovat stará data o cenách (někdy vedení chce sestavu založenou na těchto datech). S tím, co jste popsali výše, byste začali takto (změnil jsem počáteční datum, aby bylo snadné zjistit, že ano, toto byla původní cena, když systém začal fungovat):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Nyní řekněme, že dáváte na svá jablka zlevněnou cenu a chtěli jste být proaktivní a nastavit systém na dobu, kdy výprodej skončí:
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$
Co jsme zde udělali:
- Aktualizujte stávající záznam časovým razítkem 2038 a změňte
endDateTimeStamp
pole odrážející začátek prodeje - Vložte nový záznam k definování prodeje
- Vložte další nový záznam, aby znovu odrážel běžnou cenu
Bez překrývajících se časových razítek máte zaručeno, že při dotazu na vaši cenu v databázi získáte jeden záznam. Tedy,
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
získáte seznam produktů s aktuální cenou.