sql >> Base de Datos >  >> RDS >> Mysql

Seguimiento:¿cómo modelar el descuento en artículos en una base de datos?

El diseño del ProductPricing table nos permite no tener que eliminar nunca los datos de precios antiguos (a veces la gerencia quiere un informe basado en esos datos). Con lo que describió anteriormente, comenzaría así (cambié la fecha de inicio solo para que sea fácil darse cuenta de que sí, este era el precio original cuando se implementó el sistema):

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

Ahora supongamos que ofrece un precio de descuento en sus manzanas y desea ser proactivo y configurar el sistema para cuando finalice la venta:

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$

Lo que hicimos aquí fue:

  1. Actualice el registro existente con la marca de tiempo 2038, cambiando el endDateTimeStamp campo para reflejar el comienzo de la venta
  2. Insertar un nuevo registro para definir la venta
  3. Insertar otro nuevo registro para reflejar el precio normal de nuevo

Sin marcas de tiempo superpuestas, tiene la garantía de obtener un solo registro cuando consulte la base de datos para conocer su precio. Así,

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

le daría una lista de productos con precios actuales.