Ho un elenco di prodotti. Ognuno di essi è offerto da N provider.
Ogni fornitore ci indica un prezzo per una data specifica. Tale prezzo è valido fino a quando il fornitore non decide di stabilire un nuovo prezzo. In tal caso, il fornitore fornirà il nuovo prezzo con una nuova data.
L'intestazione della tabella MySQL attualmente appare come:
provider_id, product_id, price, date_price_effective
A giorni alterni, compiliamo un elenco di prodotti / prezzi che sono in vigore per il giorno corrente. Per ciascun prodotto, l'elenco contiene un elenco ordinato dei fornitori che dispongono di quel particolare prodotto. In questo modo, possiamo ordinare determinati prodotti da chiunque capiti di offrire il miglior prezzo.
Per ottenere i prezzi effettivi, ho un'istruzione SQL che restituisce tutte le righe che hanno date_price_effective >= NOW()
. Tale set di risultati viene elaborato con uno script ruby che esegue l'ordinamento e il filtro necessari per ottenere un file simile al seguente:
product_id_1,provider_1,provider_3,provider8,provider_10...
product_id_2,provider_3,provider_2,provider1,provider_10...
Questo funziona bene per i nostri scopi, ma ho ancora il prurito che una tabella SQL non sia probabilmente il modo migliore per archiviare questo tipo di informazioni. Ho la sensazione che questo tipo di problema sia stato precedentemente risolto in altri modi più creativi.
Esiste un modo migliore per archiviare queste informazioni se non in SQL? o, se si utilizza SQL, esiste un approccio migliore di quello che sto usando?