Я новичок в MongoDB, поэтому я просто хотел получить некоторую внешнюю критику моей схемы. Я пытаюсь построить что-то похожее на метастор. Я собираюсь продавать товары для нескольких разных продавцов, и некоторые из них, вероятно, будут иметь одинаковые товары. Я должен также добавить, что я строю это в Rails, используя Mongoid.
Вот так выглядит мой документ о товаре.
{
"_id" : ObjectId("4f4c8ad406164f46f1000085"),
"created_at" : ISODate("2012-02-28T08:05:40Z"),
"manufacturer_id" : ObjectId("4f4c88bd06164f46f1000068"),
"manufacturer_name" : "Minka Lavery",
"manufacturer_sku" : null,
"merchant_products" : [
{
"_id" : ObjectId("4f4c8ad406164f46f1000086"),
"_type" : "CommissionJunctionProduct",
"merchant_name" : "1800lighting.com",
"merchant_id" : ObjectId("4f4c8ad406165f46f1000086"),
"sku" : "8875981",
"buy_url" : "http://www.foobar.com",
"price" : 10.80,
"in_stock" : true,
"updated_at" : ISODate("2012-02-28T08:05:40Z"),
"created_at" : ISODate("2012-02-28T08:05:40Z")
}
],
"name" : "Minka Lavery 8717-44 Bridgeport 1 Light Outdoor",
"updated_at" : ISODate("2012-02-28T08:05:40Z")
}
В нем много торговых продуктов. Каждый источник данных продуктов имеет свой собственный _type.
У меня также есть ссылки на другие документы, такие как Продавцы и Производитель. Они просто используются как центральное место, где я могу обновить их отображаемые имена. В случае производителей многие продавцы могут называть их немного по-разному, поэтому я сохраняю массив псевдонимов, чтобы знать, какое отображаемое имя использовать в продукте. У меня есть аналогичные настройки для продавцов, хотя у них нет псевдонимов, но я все же хочу иметь возможность настроить их имя и распространить его по всем продуктам.
Когда я в конечном итоге показываю продукты пользователю, я перебираю все торговые продукты и выясняю, какой из них лучше всего показать пользователю. Я думал о фоновом скрипте, который просто перемещает лучший merchant_product в первое место массива.
Единственное, что я заметил в этой настройке, это создание merchant_products, и их обновление кажется довольно сложным. Это случается не часто, но логика сложна, чтобы убедиться, что я не создаю дубликаты продуктов и могу обновлять цены. Также я не могу показать все товары продавца, которые есть у продавца.
Я мог бы подробнее рассказать о том, что я сделал, но, думаю, я мог бы узнать больше, увидев, как другие люди макетируют что-то подобное.