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:
- Atualize o registro existente com o carimbo de data/hora de 2038, alterando o
endDateTimeStamp
campo para refletir o início da venda - Insira um novo registro para definir a venda
- 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.