【问题标题】:How to model "products" in an online store application如何在在线商店应用程序中为“产品”建模
【发布时间】:2009-04-02 22:55:53
【问题描述】:

我正在建立一个在线商店来销售“绿色超大号 T 恤”等产品。即,同一件衬衫可以有多种尺寸/颜色,不同的组合可能售罄,不同的组合可能有不同的价格等。

我的问题是我应该如何在我的 Rails 应用程序中对这些产品进行建模(或者实际上如何在任何应用程序中进行建模)。

我目前的想法是:

Class Product
  has_many :variants, :through => :characteristics
  has_many :characteristics 
end

Class Characteristic
  belongs_to :product
  belongs_to :variants
end

Class Variant
  has_many :products, :through => :characteristics
  belongs_to :characteristic
end

因此,每个产品都会有一个或多个特征(例如,“颜色”、“尺寸”等),然后每个特征都会有一个或多个变体(例如,“红色”、“蓝色”等)。

这种方法的问题是我在哪里存储价格和库存?即,给定产品的价格和库存取决于其特征所采用的变体。 (绿色可能比红色贵,大的可能缺货等)。

我的一个想法是给产品一个“base_price”,并让变体修改它,但这似乎过于复杂(并且可能不起作用)。

【问题讨论】:

    标签: ruby-on-rails language-agnostic e-commerce modeling


    【解决方案1】:

    我已经看到了解决这种困境的两种方法。一是尝试用特性来定义“主”产品的从属产品。这里的挑战是,除了您的想法之外,在大多数情况下,产品将随着新制造商的发展而发展,从而带来新的方面。例如,一家制造商可能会生产更便宜的产品,但对标志或缝线有不同的应用方法,这可能足以跟踪。

    我认为为每个产品携带一个不重要的产品编号,然后将特征作为属性附加到最佳效果。它易于搜索和扩展。如果一组产品密切相关,则各个产品附加到的 ProductGroup 效果很好。

    在表格中:

                ProductGroup
                --------------------
                ProductGroupID
                ProductGroupName
                ProductGroupDescription
    
                Product
                --------------------
                ProductID
                ProductGroupID
                QtyOnHand
                BasePrice
                ProductColorID
                ProductSizeID
    
                ProductColor
                ------------
                ProductColorID
                ProductColorName
    
                ProductSize
                --------------
                ProductSizeID
                ProductSizeName
    
                ...more attributes...
    

    这里的优点是您可以轻松地查询特定属性,属性是“灵活的”,因为可以添加更多属性(并且旧属性已调整:如果您从“红色”开始,然后在颜色中添加了另一个“红色”池,您可以将它们更改为“栗色”和“亮红色”。

    您可以在详细的产品级别控制价格和库存(尽管可能需要更多表格来说明采购成本)。

    这一切都假设您的特征是普遍共享的。如果不是,您的特征子表方法可以通过在特征和产品详细信息表之间创建一个连接表并根据需要进行填充来工作。这将需要更多的业务逻辑。以确保每个产品类别都获得所有必要的特征。 在后一种情况下,我将在基本产品表中使用“原型”产品(数量和成本为 0),我将从中克隆特征,然后在输入每个新产品时进行调整。继续前进,当出现新的变体时,具有“克隆此产品”功能,让您只需调整与基础产品的差异

    最后,就管理库存和定价而言,这将发生在 UI 层。能够为相关产品(产品组)生成查询并管理相关产品的所有定价将大大有助于使其宜居。

    【讨论】:

    • 这是合理的建议。在我工作的公司,我们只有两张表——Product 和 ProductItem——而且颜色和大小没有正确规范化。它使管理/关联特定颜色的图像成为绝对的噩梦。我就是这样做的;颜色和大小是一流的概念......
    • ...我们遇到了“黄色是泰国制造,而白色是中国制造”的场景,但由于我们将其存储在产品级别,因此我们无法对其进行建模并且最终复制 SKU,这会导致其他问题。灵活但为常见场景提供 UI 是 +1 建议。
    • 谢谢尼古拉斯。这个建议来自于经常被烧毁,因为假设“简单”的特性可以被塞进主表中。我可以很容易地看到,由于采购差异,“颜色”表最终获得了更多属性。骗我一次……
    【解决方案2】:

    只是一个简短的说明。您可以随时尝试查看其他一些电子商务产品的源代码,例如 SpreeSubstruct 他们可能已经为您回答了这个问题。

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 2020-06-11
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多