首页 文章

如何在在线商店应用程序中建模“产品”

提问于
浏览
8

我正在 Build 一个网上商店来销售“绿色超大号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

因此,每个产品将具有一个或多个特征(例如,“颜色”,“尺寸”等),并且每个特征将具有一个或多个变体(例如,“红色”,“蓝色”等) .

这种方法的问题是 where do I store price and inventory? 即,给定产品的价格和库存由其特征所采用的变体决定 . (绿色可能比红色更贵,大可能缺货等) .

我有一个想法是给产品一个“base_price”,让变种修改它,但这看起来过于复杂(并且可能不起作用) .

2 回答

  • 13

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

    我认为每个产品带有一个非重要的产品编号,然后将这些特征作为属性附加起来效果最好 . 它易于搜索和扩展 . 如果一组产品密切相关,则各个产品附加的ProductGroup效果很好 .

    在表格中:

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

    这里的优点是你可以轻松查询特定的属性,属性是“灵活的”,因为可以添加更多(和旧的调整:如果你开始使用“红色”,但后来又添加了另一个“红色”到颜色池,你可以将它们改为“栗色”和“鲜红色” .

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

    This all assumes that your characteristics are universally shared. 如果不是,则通过在特征和产品详细信息表之间创建连接表并根据需要填充,可以使用特征子表方法 . 这将需要更多的业务逻辑 . 以确保每个产品类别都具备必要的所有特征 . In this latter case I would use "prototype" products in the base product table (with Qty and Cost of 0) that I would clone the characteristics from and then adjust as each new product is entered. 当您向前移动时,当出现新的变化时,具有"clone this product"功能,允许您只调整与基础产品的差异将是有 Value 的 .

    最后,就管理库存和定价而言,这将发生在UI层 . 能够为相关产品(产品组)生成查询并管理相关产品的所有定价将大大有助于实现这一目标 .

  • 2

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

相关问题