Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Acompanhamento:como modelar desconto em itens em um banco de dados?


O design do ProductPricing tabela nos permite nunca ter que excluir dados de preços antigos (às vezes a administração quer um relatório baseado nesses dados). Com o que você descreveu acima, você começaria assim (alterei a data de início apenas para facilitar a escolha que sim, esse era o preço original quando o sistema foi instalado):
ProductPricing
   1   |    Jan 1, 1970, 00:00:00 |   Jan 1, 2038, 00:00:00  |   10$ |   10$

Agora, digamos que você dê um preço com desconto em suas maçãs e queira ser proativo e configurar o sistema para quando a venda terminar:
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$

O que fizemos aqui foi:
  1. Atualize o registro existente com o carimbo de data/hora de 2038, alterando o endDateTimeStamp campo para refletir o início da venda
  2. Insira um novo registro para definir a venda
  3. Insira outro novo registro para refletir o preço normal novamente

Sem carimbos de data/hora sobrepostos, você tem a garantia de obter um único registro ao consultar o banco de dados pelo seu preço. Por isso,
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

obteria uma lista de produtos com os preços atuais.