我正在建立一个网上商店来销售“绿色特大号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”,让变体修改它,但这看起来过于复杂(并且可能不起作用)。
答案 0 :(得分:13)
我已经看到了解决这种困境的两种方法。第一种是尝试使用特征来定义“主要”产品的从属产品。这里面临的挑战是,除了您的想法之外,在大多数情况下,产品将随着新的制造商的发展而发展,这些制造商将新的方面带到了桌面上。例如,一个制造商可以制造更便宜的产品,但是具有可能足以跟踪的标志或缝合的不同应用方法。
我认为为每个产品提供一个非重要的产品编号,然后将这些特征作为属性附加起来是最好的。它易于搜索和扩展。如果一组产品密切相关,则各个产品附加的ProductGroup效果很好。
在表格中:
ProductGroup
--------------------
ProductGroupID
ProductGroupName
ProductGroupDescription
Product
--------------------
ProductID
ProductGroupID
QtyOnHand
BasePrice
ProductColorID
ProductSizeID
ProductColor
------------
ProductColorID
ProductColorName
ProductSize
--------------
ProductSizeID
ProductSizeName
...more attributes...
这里的优点是你可以轻松查询特定的属性,属性是“灵活的”,因为可以添加更多(和旧的调整:如果你开始使用“红色”,但随后又添加了另一个“红色”的颜色游泳池,你可以将它们改为“栗色”和“鲜红色”。
您可以在详细的产品级别控制价格和库存(尽管可能需要更多的表来计算采购成本)。
这一切都假设您的特征是普遍共享的。如果不是,您的特征子表方法可以通过在特征和产品详细信息表之间创建连接表并根据需要填充来工作。这将需要更多的业务逻辑。以确保每个产品类别都具有必要的所有特征。 在后一种情况下,我会在基本产品表中使用“原型”产品(数量和成本为0),我将克隆特征,然后在输入每个新产品时进行调整。当你向前推进,当出现新变化时,拥有“克隆此产品”功能,只允许您从基础产品调整差异将是有价值的。
最后,就管理库存和定价而言,这将发生在UI层。能够为相关产品(产品组)生成查询并管理相关产品的所有定价将大大有助于实现这一目标。
答案 1 :(得分:2)