J'ai une liste de produits. Chacun d'eux est proposé par N prestataires.
Chaque fournisseur nous propose un prix pour une date précise. Ce prix est effectif jusqu'à ce que le fournisseur décide de fixer un nouveau prix. Dans ce cas, le fournisseur donnera le nouveau prix avec une nouvelle date.
L'en-tête de table MySQL ressemble actuellement à:
provider_id, product_id, price, date_price_effective
Tous les deux jours, nous établissons une liste de produits / prix en vigueur pour la journée en cours. Pour chaque produit, la liste contient une liste triée des fournisseurs qui ont ce produit particulier. De cette façon, nous pouvons commander certains produits à quiconque vous propose le meilleur prix.
Pour obtenir les prix effectifs, j'ai une instruction SQL qui renvoie toutes les lignes qui en ont date_price_effective >= NOW()
. Cet ensemble de résultats est traité avec un script ruby qui effectue le tri et le filtrage nécessaires pour obtenir un fichier qui ressemble à ceci:
product_id_1,provider_1,provider_3,provider8,provider_10...
product_id_2,provider_3,provider_2,provider1,provider_10...
Cela fonctionne bien pour nos besoins, mais j'ai toujours la démangeaison qu'une table SQL n'est probablement pas la meilleure façon de stocker ce type d'informations. J'ai le sentiment que ce genre de problème a été résolu auparavant par d'autres moyens plus créatifs.
Existe-t-il un meilleur moyen de stocker ces informations autrement qu'en SQL? ou, si vous utilisez SQL, y a-t-il une meilleure approche que celle que j'utilise?