Mam listę produktów. Każdy z nich jest oferowany przez N dostawców.
Każdy dostawca podaje nam cenę na określony termin. Cena ta obowiązuje, dopóki dostawca nie zdecyduje się ustalić nowej ceny. W takim przypadku dostawca poda nową cenę z nową datą.
Nagłówek tabeli MySQL wygląda obecnie tak:
provider_id, product_id, price, date_price_effective
Co drugi dzień tworzymy listę produktów / cen obowiązujących w danym dniu. Dla każdego produktu lista zawiera posortowaną listę dostawców posiadających ten konkretny produkt. W ten sposób możemy zamówić określone produkty od każdego, kto oferuje najlepszą cenę.
Aby uzyskać efektywne ceny, mam instrukcję SQL, która zwraca wszystkie wiersze, które mają date_price_effective >= NOW()
. Ten zestaw wyników jest przetwarzany za pomocą skryptu ruby, który wykonuje sortowanie i filtrowanie niezbędne do uzyskania pliku, który wygląda następująco:
product_id_1,provider_1,provider_3,provider8,provider_10...
product_id_2,provider_3,provider_2,provider1,provider_10...
Działa to dobrze dla naszych celów, ale wciąż mam wrażenie, że tabela SQL prawdopodobnie nie jest najlepszym sposobem na przechowywanie tego rodzaju informacji. Mam wrażenie, że ten rodzaj problemu został wcześniej rozwiązany na inne, bardziej kreatywne sposoby.
Czy istnieje lepszy sposób przechowywania tych informacji niż w SQL? lub, jeśli używasz SQL, czy istnieje lepsze podejście niż to, którego używam?