Ho una lista di prodotti. Ognuno di loro è offerto da N provider.
Ogni provider ci cita un prezzo per una data specifica. Tale prezzo è effettivo fino a quando il fornitore non decide di fissare 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 efficaci per il giorno corrente. Per ogni prodotto, l'elenco contiene un elenco ordinato dei fornitori che hanno quel particolare prodotto. In questo modo, possiamo ordinare determinati prodotti da chiunque accada per offrire il prezzo migliore.
Per ottenere i prezzi effettivi, ho un'istruzione SQL che restituisce tutte le righe che hanno date_price_effective >= NOW()
. Questo set di risultati viene elaborato con uno script ruby che esegue l'ordinamento e il filtraggio 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 un prurito che una tabella SQL non è probabilmente il modo migliore per archiviare questo tipo di informazioni. Ho la sensazione che questo tipo di problema sia stato risolto in precedenza in altri modi più creativi.
C'è un modo migliore per archiviare queste informazioni se non in SQL? o, se si usa SQL, c'è un approccio migliore di quello che sto usando?