Mysql
 sql >> Base de données >  >> RDS >> Mysql

Suivi :comment modéliser une remise sur des articles dans une base de données ?

La conception du ProductPricing table nous permet de ne jamais avoir à supprimer les anciennes données de tarification (parfois la direction veut un rapport basé sur ces données). Avec ce que vous avez décrit ci-dessus, vous commencerez comme ceci (j'ai changé la date de début juste pour qu'il soit facile de déterminer que oui, c'était le prix d'origine lorsque le système a été mis en place) :

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

Supposons maintenant que vous offriez un prix réduit sur vos pommes et que vous vouliez être proactif et configurer le système pour la fin de la vente :

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$

Ce que nous avons fait ici était :

  1. Mettez à jour l'enregistrement existant avec l'horodatage 2038, en modifiant le endDateTimeStamp champ pour refléter le début de la vente
  2. Insérer un nouvel enregistrement pour définir la vente
  3. Insérez un autre nouvel enregistrement pour refléter à nouveau le prix normal

En l'absence d'horodatages qui se chevauchent, vous êtes assuré d'obtenir un seul enregistrement lorsque vous interrogez la base de données pour votre prix. Ainsi,

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

vous obtiendrait une liste de produits avec les prix actuels.