sql >> Databáze >  >> RDS >> Mysql

Následné:jak modelovat slevu na položky v databázi?

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:

  1. Aktualizujte stávající záznam časovým razítkem 2038 a změňte endDateTimeStamp pole odrážející začátek prodeje
  2. Vložte nový záznam k definování prodeje
  3. 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.




  1. Aktualizujte sloupec počtu z dat v jiné tabulce

  2. Problém s MySql a vkládáním posledního ID zůstává

  3. MySQL SUM Hodnoty json seskupené podle klíčů json

  4. SQLite - příkazy JOIN