我的目标是让产品具有一些基本信息,例如
并且可选地,每个产品可以具有基于
的选项我已经阅读了一些文章,但找不到适合我的问题的答案,这就是如何反映所有可能的选项组合可以有不同的SKU,价格和库存量。 此外,我想为产品的不同颜色提供不同的图像。
所以我目前的想法是为所有选项设置单独的集合:
然后在产品文档中包含所有这些选项的指针数组,以及variations
的其他数组,它反映了每个可能的选项组合,并添加了SKU
,price
和{{ 1}} field。
stock
但不知何故,我觉得可能有更简单的方法来完成我正在寻找的东西。
答案 0 :(得分:0)
产品信息的数据建模更是一门科学。
根据销售人员考虑的实体来定义产品是很常见的。假设汽车模型。例如。一条“ 5e类以太网电缆”。
此类产品具有属性和尺寸。属性可能是
属性在不同行业之间甚至在同一公司的不同产品类别之间都不同。
尺寸区分产品的不同变体。一个或多个维度可以定义一个具体的产品。典型的尺寸是大小和颜色。对于我们的电缆,我们可能有:
因此,产品是您的商品之一的概念。在纸质目录中,产品通常被描述为单个事物(也许在单个页面上)。夹克有蓝色和棕色可供选择,尺寸为S,M,L和XL。
定义单个产品的定义有些模糊。蓝色和绿色的运动鞋可能是同一产品,但是橙色和金色的运动鞋可能不会被视为同一产品。
在进行电子商务之前,我们倾向于期望产品所有尺寸的价格都相同-不久前,人们对于8号鞋比9号鞋更昂贵感到震惊。
沿着某些尺寸-主要是颜色-用户通常除外图片。沿其他尺寸-例如鞋码-通常没有特定图片的期望 对于某些产品,制造商可能被认为是尺寸(电缆),对于其他产品,可能被认为是无关紧要的(电缆扎带),对于其他产品,来自不同制造商的两种外观相同的商品可能被视为完全不同的产品(例如运动鞋)。
另一个概念是 SKU -库存单位是实际在仓库中的物料。通常,对于每种产品,我们将尺寸与彼此的SKU相乘。因此有5种尺寸x 3种颜色x 2种阻燃剂变体-因此可能有30个SKU。通常,每个SKU都有不同的GTIN / UPC / EAN(“条形码” 4423456789012)。
保持SKU和产品分开是最佳实践,因为它们涉及不同的关注点:产品对于市场营销和销售至关重要。 SKU与审核,簿记和物流有关。产品代表概念,SKU代表实物。通常应将库存数量保持在SKU内或附近-因为在大型商务应用程序中,每秒可能会更新几次。我绝不会设计一个将交易数据-库存量-与主数据-产品说明等混合在一起的系统。
由于产品和价格数据在某种程度上是静态的,但动态定价可能会改变这种情况,因此价格信息一直附加到产品上。
您似乎正在索要产品数据库。无模式数据库为此很好地工作,因为很难预计未来几年的所有所需尺寸。可以肯定地对关系数据库进行整体标准化,但最终会导致代码不够美观,运行缓慢。
{
name: "Cat 5e Cable",
…
dimensions: {
color: {
title: "Color",
red: {
title: "Red",
images: [
"http://myserver.com/images/product_12345_3",
"http://myserver.com/images/product_12345_4",
],
},
green: { … }
},
size: {
title: "Size"
s05: {
title: "0.5 m",
images: [],
},
s1: {...},
fireretardant:
title: "Size"
yes: {
title: "fire retardant",
images: [],
},
no: {
title: "not fire retardant",
images: [],
}
}
// here you need a stable way of generating keys from dimension data
variations: [
{
dimensions: {color: red, size: s1, fireretardant: no}
SKU: "98765"
price: 10,
},
{
dimensions: {color: red, size: s1, fireretardant: yes}
SKU: "98765"
price: 10,
},
},
…
]
我已经用这种模式实现了应用程序。通常,您要在Admin GUI中限制可用尺寸和每个尺寸的有效值,以使工作人员不会一直隐藏新尺寸。但这应该是管理上的限制,而不是基础架构之一。
不存在的组合(“阻燃剂仅以绿色而不是0.5 m可用),冲突说明(“使所有5m电缆10欧元,所有红色电缆8欧元”),不同和不一致的想法例如需要图像,尺寸之间应该共享的图像,定义不一致,什么被视为单独的产品(“ USB C”或仅仅是变体(“ 3.5毫米或5.5毫米耳机插孔”)),转换和转换(不要让我开始sho大小)使现实生活中的数据库设计和维护变得有趣……