Tôi có một danh sách các sản phẩm. Mỗi người trong số họ được cung cấp bởi N nhà cung cấp.
Mỗi nhà cung cấp báo giá cho chúng tôi một ngày cụ thể. Giá đó có hiệu lực cho đến khi nhà cung cấp đó quyết định đặt giá mới. Trong trường hợp đó, nhà cung cấp sẽ đưa ra mức giá mới với một ngày mới.
Tiêu đề bảng MySQL hiện trông giống như:
provider_id, product_id, price, date_price_effective
Mỗi ngày, chúng tôi lập một danh sách các sản phẩm / giá có hiệu lực cho ngày hiện tại. Đối với mỗi sản phẩm, danh sách chứa danh sách được sắp xếp của các nhà cung cấp có sản phẩm cụ thể đó. Bằng cách đó, chúng tôi có thể đặt hàng một số sản phẩm từ bất cứ ai xảy ra để cung cấp giá tốt nhất.
Để có được giá hiệu quả, tôi có một câu lệnh SQL trả về tất cả các hàng có date_price_effective >= NOW()
. Tập kết quả đó được xử lý bằng tập lệnh ruby thực hiện sắp xếp và lọc cần thiết để có được một tệp trông như thế này:
product_id_1,provider_1,provider_3,provider8,provider_10...
product_id_2,provider_3,provider_2,provider1,provider_10...
Điều này hoạt động tốt cho mục đích của chúng tôi, nhưng tôi vẫn có một ý kiến rằng bảng SQL có lẽ không phải là cách tốt nhất để lưu trữ loại thông tin này. Tôi có cảm giác rằng loại vấn đề này đã được giải quyết trước đây theo những cách sáng tạo khác.
Có cách nào tốt hơn để lưu trữ thông tin này ngoài SQL không? hoặc, nếu sử dụng SQL, có cách tiếp cận nào tốt hơn cách tôi đang sử dụng không?