继『多维度 SKU 应该有所讨论』之后的再次讨论

在看完《商城进阶》之后,一直没太明白多维 SKU 到底该如何处理(我是菜鸡)。后来看到 多维度 SKU 应该有所讨论 下众多回复,慢慢有所体会,但思来想去总觉得有些不对劲,下面将我的想法说一下,请大家予以批评。此致敬礼。

Google 了很多资料,大都太复杂或者难以理解,反反复复琢磨了 leo 的最佳回复,觉得这个方案还是可行的

加一个表:product_sku_attributes

product_id
name

然后给 SKU 加一个 attributes 字段

假如有个 id = 1 的商品 iPhone X,有 3 个 product_sku_attributes:

[
  ["id" => 1, "product_id" => 1, "name" => "套餐类型"],
  ["id" => 2, "product_id" => 1, "name" => "颜色"],
  ["id" => 3, "product_id" => 1, "name" => "内存"],
]

新建 SKU 的时候,attributes 值为:

[
  ["id" => 1, "value" => "套餐一"],
  ["id" => 2, "value" => "土豪金"],
  ["id" => 3, "value" => "256G"],
]

最终在数据库中的数据表现大概是这样

继『多维度 SKU 应该有所讨论』之后的再次讨论

继『多维度 SKU 应该有所讨论』之后的再次讨论

继『多维度 SKU 应该有所讨论』之后的再次讨论

继『多维度 SKU 应该有所讨论』之后的再次讨论

没错,逻辑上没有问题的。但是这个时候我有一个疑问,如果在编辑的时候需要把 土豪金 改成 土豪黄,或者删除 256G,理论上通过 JSON 处理是可以的,但是这就需要去找商品对应的所有 SKU 并修改 attributes 中的内容,我觉得还是太麻烦。

现在我的想法是不要这个 attributes 字段,增加另外一张表 product_attribute_values 用以记录每个属性值,在 product_skus 中增加 attribute_idattribute_value_id,这样在编辑的时候也只需要修改 product_attribute_values 中的一条记录,删除的时候也只需要在 product_skus 去找 attribute_value_id 对应的记录,简单明了。

不知道我这样想的对不对,请各位众神给点意见......

:computer: & :coffee:
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6
giao哥

product_skus 在这里新增 attribute_idattribute_value_id 是不对的。如多属性的 sku 怎么办? 比如手机 内存 128G 手机,颜色红色... 你一对一的关联肯定错误,商品和SKU是不同的。

4年前 评论
giao哥

如果不使用 json 存储那么你需要 新建一张表至少 attr_values 字段 pid,aid,namepid关联商品 aid关联规格,name 属性值

4年前 评论

product_skus 中的 attributes 字段,我存是1,2,3,4 这个模式的。这个通过笛卡尔积算法得来,然后从小到大的排序,确定唯一,然后另起了字段json存详情。

4年前 评论
draven

我记得我当时分4个表,一个颜色,一个规格,一个加价的表还有一个库存的总表,库存的表寸其他四个表的id,规格多存一个型号什么的比如x,l,xxl,最后用笛卡尔积算出来存到库存表 :joy:

4年前 评论

@xh @全场我最姜姜姜丶 @draven 可以参考一下 Ruby 的一个电商系统,功能很全面,所以数据表比较多,https://github.com/solidusio/solidus/tree/...

4年前 评论
playmaker

file 这样设计如何?

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!