sql >> Database teknologi >  >> RDS >> Mysql

Opfølgning:hvordan modelleres rabat på varer i en database?

Designet af ProductPricing tabel giver os mulighed for aldrig at skulle slette gamle prisdata (nogle gange ønsker ledelsen en rapport baseret på disse data). Med det, du har beskrevet ovenfor, ville du starte sådan her (jeg ændrede startdatoen bare så det er nemt at finde ud af, at ja, dette var den oprindelige pris, da systemet gik på plads):

ProductPricing
   1   |    Jan 1, 1970, 00:00:00 |   Jan 1, 2038, 00:00:00  |   10$ |   10$

Lad os nu sige, at du giver en rabatpris på dine æbler, og du ville være proaktiv og sætte systemet op til, hvornår salget var slut:

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$

Det vi gjorde her var:

  1. Opdater den eksisterende post med 2038-tidsstemplet ved at ændre endDateTimeStamp felt for at afspejle begyndelsen af ​​salget
  2. Indsæt en ny post for at definere salget
  3. Indsæt endnu en ny rekord for at afspejle den normale pris igen

Uden overlappende tidsstempler er du garanteret at få en enkelt post, når du forespørger i databasen til din pris. Således,

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

ville give dig en produktliste med aktuelle priser.




  1. Laravel Simple Month Selection

  2. Sådan beregnes kumulativ total i MySQL

  3. Tilslutning af en MySQL-database til Glassfish-klassestien er ikke indstillet, eller klassenavnet er forkert

  4. PHP MYSQL OPDATERING hvis Exist eller INSERT hvis ikke?