Первоначально я хотел задать этот вопрос для MongoDB, но я быстро понял, что этот вопрос, вероятно, относится к другим документно-ориентированным базам данных, таким как CouchDB и другим. Я с трудом нахожу голову над созданием каталога товаров, который поддерживает товары на заказ. Вот основной набор целей для каталога:
- Каждый продукт имеет настраиваемый набор параметров. Такие вещи, как материалы, используемые для производства продукта, или цвета, которые напечатаны на них. Некоторые параметры делают доступными другие параметры, поэтому некоторые параметры ограничивают доступ к другим параметрам.
- Цена варьируется от варианта к варианту, для некоторых вариантов это процент сверх базовой цены, а для других - фиксированная сумма.
- Существует также аспект специальных цен. У нас могут быть контракты с различными другими компаниями, которые предоставляют специализированные цены на целый ряд продуктов. Мы часто предлагаем промо-коды и скидки как в строке, так и в заголовке заказа.
В конечном итоге самой сложной частью является общая схема для ввода продукта. Должен ли я делать что-то вроде:
{
"Product_Name": "Test Product 1",
"Product_Number": "P00001",
"BasePrice":"10",
"AvailableSize":
[
{
"Length":"1","Width":"1",
"PriceType":"PercentOnBase",
"Price":"5"
},
{
"Length":"1","Width":"2",
"PriceType":"PercentOnBase",
"Price":"6"
},
{
"Length":"2","Width":"2",
"PriceType":"PercentOnBase",
"Price":"7.5"
},
{
"Length":"2","Width":"3",
"PriceType":"PercentOnBase",
"Price":"10"
},
{
"Length":"3","Width":"3",
"PriceType":"PercentOnBase",
"Price":"15"
}
],
"AvailableNumberImprints":
[
{
"ImprintNumber":"1",
"PriceType":"PercentOnBase",
"Price":"10"
},
{
"ImprintNumber":"2",
"PriceType":"PercentOnBase",
"Price":"12"
},
{
"ImprintNumber":"3",
"PriceType":"PercentOnBase",
"Price":"14"
},
{
"ImprintNumber":"4",
"PriceType":"PercentOnBase",
"Price":"16"
},
{
"ImprintNumber":"5",
"PriceType":"PercentOnBase",
"Price":"17"
},
{
"ImprintNumber":"6",
"PriceType":"PercentOnBase",
"Price":"20"
},
],
"AvailableMaterials":
[
{
"MaterialName" : "Black",
"MaterialNumber": "M00001",
"PriceType":"PercentageOnBase",
"Price":"5"
}
{
"MaterialName" : "White",
"MaterialNumber": "M00002",
"PriceType":"PercentageOnBase",
"Price":"5"
}
{
"MaterialName" : "Pearl",
"MaterialNumber": "M00003",
"PriceType":"PercentageOnBase",
"Price":"5"
}
{
"MaterialName" : "Green",
"MaterialNumber": "M00004",
"PriceType":"PercentageOnBase",
"Price":"5"
}
]
}
Проблема, с которой я быстро сталкиваюсь, заключается в том, что из-за этого несколько неловко ограничивать другие варианты без чрезмерной избыточности. Есть мысли?