Tengo una lista de productos. Cada uno de ellos es ofrecido por N proveedores.
Cada proveedor nos cotiza un precio para una fecha específica. Ese precio es efectivo hasta que ese proveedor decida establecer un nuevo precio. En ese caso, el proveedor le dará el nuevo precio con una nueva fecha.
El encabezado de la tabla MySQL actualmente se ve así:
provider_id, product_id, price, date_price_effective
Cada dos días, compilamos una lista de productos / precios que son efectivos para el día actual. Para cada producto, la lista contiene una lista ordenada de los proveedores que tienen ese producto en particular. De esa manera, podemos ordenar ciertos productos de quien sea que ofrezca el mejor precio.
Para obtener los precios efectivos, tengo una instrucción SQL que devuelve todas las filas que tienen date_price_effective >= NOW()
. Ese conjunto de resultados se procesa con un script ruby que realiza la clasificación y el filtrado necesarios para obtener un archivo que se ve así:
product_id_1,provider_1,provider_3,provider8,provider_10...
product_id_2,provider_3,provider_2,provider1,provider_10...
Esto funciona bien para nuestros propósitos, pero todavía tengo ganas de que una tabla SQL probablemente no sea la mejor manera de almacenar este tipo de información. Tengo la sensación de que este tipo de problema se ha resuelto previamente de otras maneras más creativas.
¿Hay una mejor manera de almacenar esta información que no sea en SQL? o, si usa SQL, ¿hay un mejor enfoque que el que estoy usando?