Eu tenho uma lista de produtos. Cada um deles é oferecido por N fornecedores.
Cada fornecedor cita um preço para uma data específica. Esse preço é efetivo até que o provedor decida estabelecer um novo preço. Nesse caso, o provedor fornecerá o novo preço com uma nova data.
O cabeçalho da tabela MySQL atualmente se parece com:
provider_id, product_id, price, date_price_effective
A cada dois dias, compilamos uma lista de produtos / preços efetivos para o dia atual. Para cada produto, a lista contém uma lista classificada dos fornecedores que possuem esse produto específico. Dessa forma, podemos solicitar determinados produtos a quem quer que oferecer o melhor preço.
Para obter os preços efetivos, eu tenho uma instrução SQL que retorna todas as linhas que possuem date_price_effective >= NOW()
. Esse conjunto de resultados é processado com um script ruby que faz a classificação e a filtragem necessárias para obter um arquivo parecido com este:
product_id_1,provider_1,provider_3,provider8,provider_10...
product_id_2,provider_3,provider_2,provider1,provider_10...
Isso funciona bem para nossos propósitos, mas ainda sinto que uma tabela SQL provavelmente não é a melhor maneira de armazenar esse tipo de informação. Tenho a sensação de que esse tipo de problema foi resolvido anteriormente de outras maneiras mais criativas.
Existe uma maneira melhor de armazenar essas informações além do SQL? ou, se estiver usando SQL, existe uma abordagem melhor do que a que estou usando?