sql >> Database >  >> RDS >> Mysql

Opvolging:hoe modelleer je korting op artikelen in een database?

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:

  1. Werk het bestaande record bij met de tijdstempel van 2038 en wijzig de endDateTimeStamp veld om het begin van de verkoop weer te geven
  2. Voeg een nieuw record in om de verkoop te definiëren
  3. 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.




  1. 3 manieren om een ​​lijst met databases in SQL Server (T-SQL) te krijgen

  2. Hoe voeg je een NOT NULL-kolom toe aan een grote tabel in SQL Server?

  3. MySql:Selecteer een instructie met de IN-operator

  4. update als er twee velden zijn, invoegen als dat niet het geval is (MySQL)