多维度 SKU 应该有所讨论?

我所理解的多维度 SKU 复杂度上升很多。需要维护描述 SKU 的规格和规格值
文章中

为了方便讲解,本课程不会实现像天猫这种多维度的 SKU 系统,我们只实现一个维度的 SKU。多维度的 SKU 只不过运营层面工作量会大一些,简而言之就是编辑需要录入更多的商品类型而已,这里的数据结构和技术方案,也是适用于多维度 SKU 的。

这段描述我认为是不恰当的。我理解教程为了简化而做的取舍。但是不认同这句话。

如果不能成为拯救世界的神,那就堕落到征服世界的魔吧。
本帖已被设为精华帖!
本帖由系统于 5年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
leo
最佳答案

@Yu @Toiu @aen233 @phpstack

其实不复杂,加一个表:

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"],
]

在逻辑上并不复杂,只是 Laravel-Admin 不太好支持罢了。

有时候不需要一味地追求数据库设计范式,特别是 Mysql 加入 JSON 支持之后,只要不涉及到搜索查询的都可以往 JSON 字段里丢。

5年前 评论
讨论数量: 68
leo

@Yu @Toiu @aen233 @phpstack

其实不复杂,加一个表:

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"],
]

在逻辑上并不复杂,只是 Laravel-Admin 不太好支持罢了。

有时候不需要一味地追求数据库设计范式,特别是 Mysql 加入 JSON 支持之后,只要不涉及到搜索查询的都可以往 JSON 字段里丢。

5年前 评论

不能接受对SKU的简单略过,整本书和电商的精华就是在SKU,我就是冲着SKU和各位大牛进来,看看你们是如何解决SKU的,吸取一些经验,花了79元后,一看商品数据库的结构设计,可以说是白花了。我都在考虑要不要买新的进阶。@leo @Yu @summer

5年前 评论

买这本书的我想好多人都是冲着怎么合理的设计sku表来的吧,结果只是简单的设计一个一维的sku表,对于多规格的商品,后台怎么录入商品规格,以及前台怎么根据不同的规格获取具体的价格还是很难理解。我觉得文中的一维跟实际应用中的二维及二维以上的sku是2种差距很大的设计模式。

我支持@洪 的说法。而对于作者所说的

多维度 SKU 在后端非常简单,加一个表就能解决,只是要实现比较友好 UI 前端(包括前台和后台)做起来比较麻烦,对于本课程而言浪费大量篇幅去做前端交互的讲解并不合适。

不敢苟同。
我们既然花钱买这个教程了,那肯定是有很多地方不理解的,作者觉得多维度sku很简单,但是对于我们这种新手来说是一个巨大的坎。既然是收费的教程了,我觉得作者怕麻烦,而省略了一个非常重要的知识点是不合适的。

虽然知道不太可能,但还是希望能以二维度的sku作为教程的重点。@Summer @leo

第一次在社区码这么多字,如有表述不当还请见谅。

4年前 评论

@leo 我买这本书最想看到的也是多维SUK的前后端实现 :joy:

5年前 评论

早上又看到这个帖子啦,直接分享下自己的作品吧,自己扩展了下SKU,是用我回复中所说的那套体系写的,后台设置商品的时候会设置商品属性值,只有可选的属性才会参与sku(库存)的构建,然后添加完商品,再添加库存的时候,选择完商品会列出这个商品的可选属性名,自己再对着属性名填属性值就可以了,就像这样

file

但是这操作总感觉不是特别友好,属性值比如是深空灰,然后手抖了打成深空绿,那就填错了,所以设定了一个商品属性值管理列表,可以把深空绿这个属性值删除,这样在前台列表,颜色那一栏就不会出现 深空绿了
demo https://shop.wuxxin.com/products
github https://github.com/zuiqiangqishao/Laravel-...

5年前 评论
leo

@Yu @Toiu @aen233 @phpstack

其实不复杂,加一个表:

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"],
]

在逻辑上并不复杂,只是 Laravel-Admin 不太好支持罢了。

有时候不需要一味地追求数据库设计范式,特别是 Mysql 加入 JSON 支持之后,只要不涉及到搜索查询的都可以往 JSON 字段里丢。

5年前 评论

不能接受对SKU的简单略过,整本书和电商的精华就是在SKU,我就是冲着SKU和各位大牛进来,看看你们是如何解决SKU的,吸取一些经验,花了79元后,一看商品数据库的结构设计,可以说是白花了。我都在考虑要不要买新的进阶。@leo @Yu @summer

5年前 评论

买这本书的我想好多人都是冲着怎么合理的设计sku表来的吧,结果只是简单的设计一个一维的sku表,对于多规格的商品,后台怎么录入商品规格,以及前台怎么根据不同的规格获取具体的价格还是很难理解。我觉得文中的一维跟实际应用中的二维及二维以上的sku是2种差距很大的设计模式。

我支持@洪 的说法。而对于作者所说的

多维度 SKU 在后端非常简单,加一个表就能解决,只是要实现比较友好 UI 前端(包括前台和后台)做起来比较麻烦,对于本课程而言浪费大量篇幅去做前端交互的讲解并不合适。

不敢苟同。
我们既然花钱买这个教程了,那肯定是有很多地方不理解的,作者觉得多维度sku很简单,但是对于我们这种新手来说是一个巨大的坎。既然是收费的教程了,我觉得作者怕麻烦,而省略了一个非常重要的知识点是不合适的。

虽然知道不太可能,但还是希望能以二维度的sku作为教程的重点。@Summer @leo

第一次在社区码这么多字,如有表述不当还请见谅。

4年前 评论

@leo 我买这本书最想看到的也是多维SUK的前后端实现 :joy:

5年前 评论

早上又看到这个帖子啦,直接分享下自己的作品吧,自己扩展了下SKU,是用我回复中所说的那套体系写的,后台设置商品的时候会设置商品属性值,只有可选的属性才会参与sku(库存)的构建,然后添加完商品,再添加库存的时候,选择完商品会列出这个商品的可选属性名,自己再对着属性名填属性值就可以了,就像这样

file

但是这操作总感觉不是特别友好,属性值比如是深空灰,然后手抖了打成深空绿,那就填错了,所以设定了一个商品属性值管理列表,可以把深空绿这个属性值删除,这样在前台列表,颜色那一栏就不会出现 深空绿了
demo https://shop.wuxxin.com/products
github https://github.com/zuiqiangqishao/Laravel-...

5年前 评论

没理解多维度有什么不同 能不能给个多维度的数据表模型

5年前 评论

@leo 重点是精华,如果这本书对这方面没详细的描述,我觉得就失去了电商的精华。就算是简单,也必须详细。而且你是电子书,随时可以维护。个人觉得,官方人员有时间在留言回答几次,倒不如花一点时间在教程中补上,尽可能详细。

5年前 评论

@Aqrun 这里的属性有个父子结构。

@Toiu 需要多规格 多属性。 就需要增加至少 3张表来维护 sku。 然后至于店铺管理后台中商品的管理自然需要做sku的处理。

spus
skus
goods_properties
goods_property_items
spu_property_property_item_skus

大概就是这样五张表去描述商品sku

其实找一个现有的电商平台一看就知道需要做什么样子了。

我也是半年前有做电商需求,然后从无sku改有sku中,折腾的不轻,所以看到这本书这部分想要点过来看是否有更好的解决方案。

另外好奇一点,为什么这个帖子会被下沉,我看了下沉说明。并不觉得违反了其中的哪一条?如果实在要说,是因为这个帖子太水的缘故? @Summer

5年前 评论

@simplewater 看来我们的表结构不一样.我的结构是按照 leo 说的结构,用的是json类型.

没弄出来自定义多个列,直接集合成一列了,换了种显示方式.

file

file

5年前 评论

@leo 如果要加这种商品属性的话,只有product_sku_attributes表是不是不太够,因为这个表仅仅保存的是商品的拥有的属性,并没有记录属性具体的种类,比如只保存了颜色这个属性,但是不知道颜色有哪几种。是否需要另一个attributes_name表用来存储每种属性对应的类别,起名为attributes_name表,以attributes_id关联product_sku_attributes表的主键,存入数据如下


["id"=>1,"attributes_id"=>1, "name"=>"套餐一"]

["id"=>2,"attributes_id"=>1, "name"=>"套餐二"]

["id"=>3,"attributes_id"=>1, "name"=>"套餐三"]

……

["id"=>9,"attributes_id"=>2, "name"=>"深空灰"]

["id"=>10,"attributes_id"=>2, "name"=>"土豪金"]

["id"=>11,"attributes_id"=>3, "name"=>"256G"]

加完这个表之后接下来就可以在SKU表新增的attributes字段存入attributes_name表的ID字符串,以此构成SKU,比如进货500台套餐一的、深空灰的、256G的、手机,这里有三个具体的属性,套餐一、深空灰、256G,在attributes_name表中找到对应具体属性的ID,拼成字符串后存入,那attributes字段存入的就是"1,9,11" 不知在这样设计是否合理,还请提一些意见

5年前 评论

@leo 看了电商进阶,好像木有sku更完善的讲解。。。。。
product_sku_attributes表看懂了,同问@simplewater 的问题,不是把世界上所有的颜色放进去,而是要把这个商品相关的所有颜色放进去,就类似于京东淘宝加入购物车时要选择颜色、内存,我觉得应该把这个商品的所有颜色和内存选项存起来,前端也需要各种属性列表啊
同问@FreeMason 的问题,如果涉及统计,属性字段放在json里不方便统计啊,统计肯定是php去处理,但是数据量稍大的统计觉得还是mysql前期处理好了,php再处理更简单一些
还有赞同@洪 的不能接受对SKU的简单略过......
一枚萌新,求指导。。。。。

5年前 评论

@leo ,没怎么看明白,每个 SKU 都有唯一的 ID 吗?个人理解:对于商城来说,统计分析是非常重要的。颜色,套餐,内存(256G)都有可能被用来统计分析。用 json 保存用户输入的商品基本参数(例:颜色,内存等重要参数),对于以后会很不方便。

5年前 评论
leo

@FreeMason 像你说的这种级别统计分析是不可能直接从 Mysql 里面去读取的,另外 Mysql 5.7 的 json 格式了解一下。

5年前 评论
leo

@洪 这本书的定位是电商入门,而非大全,一开始就做一个非常完善的 SKU 系统并不适合新手学习,而是通过一个比较合理的精简控制难度和复杂度,先让新手了解电商的相关概念。

5年前 评论

@Aqrun 这个不难理解吧。
比如 iPhoneX 作为一个 SPU
它有
颜色:黑色,白色
大小:64G 256G
这就是四个SKU了。

5年前 评论

@leo 最近想了想存json,我引申出一个疑问。Eloquent ORM 貌似没有看到对数据库 json 结构的支持?哪这部分应该如何处理。

5年前 评论

@zzzzzzzzxy 存的是attributes表的id,以逗号拼接,这个id字符串代表这条记录的sku规格

5年前 评论
leo

@十七岁程序员想当歌手 一个商品总共就那么几个 SKU,遍历一下不就行了。

5年前 评论

@leo 是不是应该给每种属性都添加价格和库存,假如有个 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" => "套餐一", "price" => 100, "stock" => 10],
  ["id" => 2, "value" => "土豪金", "price" => 100, "stock" => 10],
  ["id" => 3, "value" => "256G", "price" => 100, "stock" => 10],
]

因为每种属性的价格和库存可能会有不同,但是如果是这样,前端如果选择了两种属性,这时候展示的是最高价格最小库存?

4年前 评论
huangdj 4年前

教程太水了,sku最重要的规格一笔带过。感觉就是图任务

3年前 评论
leo

@simplewater 没有必要,有什么颜色运营手动填进去就行了,难道要把世界上所有的颜色都放到数据库里吗

5年前 评论

这几本书里,这本书真是水,既然是定位电商,最重要的sku规格一笔带过,如果能退,相信没几个人要买这本书

3年前 评论

@yinminqian

属性值是不和sku一起显示的,是另外一个列表

file

file

file

5年前 评论
Toiu

@leo @summer

5年前 评论

@yinminqian 你好,能分享一下SKU录入attributes是怎么处理的吗?

5年前 评论

@leo 我觉得属性可以通用,product_id省掉,比如手机内存、颜色等,不一定就是这个sku对应,其他手机可以选同内存,同理其他不是手机的sku也可以直接选某颜色如果有这个颜色,SKU 加一个 attributes 字段填入多个维度的json值。不知道这样是否通用一点,还是保留product_id关联更合理?

5年前 评论
leo

@Sher 如果属性值与商品无关,那么就会很可怕,比如颜色,系统需要录入无数种颜色才能满足绝大多数商品的需求。

5年前 评论

@simplewater product_suks 那张表的attributes 存的是个什么东西 谢谢了

5年前 评论
张汉为

@leo 如果把products表与product_sku_attributes表设计为多对多的模式是否合理,比如发布手机商品,基本都是需要套餐类型,颜色,内存,网络类型这几个名称,如果是一对多这样就会出现非常多的重复的数据,每发布一个手机都会生成4条这样数据,如果采用多对多的模式就只需要存储一次就可以了,只不过需要增加一张数据表,请问一对多与多对多那种方案更合理一些呢

2年前 评论

@simplewater 你好,能说一下你ProductSku@index 里怎么显示出来 Attribute显示出来的吗?

file

我想通过自定义column来显示,但是失败了

5年前 评论

@yinminqian 怎样用json类型?mysql有json类型,具体能不能截图?

5年前 评论
rescuer 2年前

@simplewater 你的源码缺少了vendor这个文件夹

5年前 评论

@yangyang2018 vendor是本地通过composer安装的啊,被git过滤掉了啊

5年前 评论

@yema1208 这个应该没有吧,毕竟多个属性的话,其实就是多个互不关联的 sku 了

5年前 评论

看来多维 sku 是刚需....

4年前 评论
playmaker 2年前
playmaker

file 这样设计如何?

2年前 评论

@suifeng805 的确, 我也是买了教材之后直奔 sku, 然后一脸懵逼...

2年前 评论

很失望,电商系统的核心无外乎“SKU”与“支付”两大核心,作者这么粗糙的处理,很不满意;

2年前 评论
leo

@aen233 重复的话我就不说了,自己看回复。

数据统计的问题,如果你仔细阅读 Mysql JSON 相关的函数就不会这么说了。

5年前 评论
Toiu

@Yu 那这样后台对sku的结构管理上是不是还有较大差异 因为涉及到用户购买界面要同时选多个属性来得到一个sku

5年前 评论
Toiu

+1

5年前 评论

@Yu 谢谢。好吧 增加多个属性就是多维度

5年前 评论
Summer

文章格式已帮你修改,早上被 @ 好几下,再加上文章格式有点奇怪,有点烦哈就沉贴,已改正

5年前 评论

同希望至少2个维度吧。。。。。

5年前 评论

小小萌新,希望大神们详解一下

5年前 评论

@leo 嗯,可是直接存json数据的话,前台页面在用户选择完商品属性之后能够查询出对应商品的库存量嘛

5年前 评论
leo

@simplewater 一个商品的 SKU 总共就那么几个,用前端筛选就能搞定

5年前 评论

@leo 实在抱歉,我没能明白您的意思,能再详细说明一下怎么筛选吗

5年前 评论
leo

@simplewater 用户选中了 土豪金,那就把 SKU 的 attributes 属性里包含 ["id" => 2, "value" => "土豪金"] 的展示出来就可以了

5年前 评论

@leo 明白了,谢谢大佬 :grin:

5年前 评论
leo

@洪 仔细阅读这篇帖子的回复,多维度 SKU 在后端非常简单,加一个表就能解决,只是要实现比较友好 UI 前端(包括前台和后台)做起来比较麻烦,对于本课程而言浪费大量篇幅去做前端交互的讲解并不合适。

5年前 评论

有个问题想请教一下各位。一个商品的sku是多个属性的笛卡儿积。这样一个商品会产生很多的选择。有什么好的设计可以更好的优化这样的sku

5年前 评论

@leo 好滴,谢谢大佬~~不过貌似mysql5.7才支持json吧.....

5年前 评论
leo

@Yu 当然支持,自己翻文档找找看

5年前 评论

@leo 利用json存储,如果 product_sku_attributes 表中有一条属性删除了,怎么同步更新数据呢?

5年前 评论

@leo 如果我把 product_sku_attributes 关联的是商品分类,这个分类下的所有产品都使用这个属性,例如我有一个手机分类,手机分类中的产品 iphone7iphone8 等等很多产品,这样遍历就不好了吧?

5年前 评论
leo

@十七岁程序员想当歌手 那你就得想想这个需求是否合理?你觉得像天猫或者京东这种规模会不会做这种事情?

即使非要这么做不可,Laravel 的异步队列分分钟解决。

5年前 评论

@leo 好的,谢谢

5年前 评论

偷偷的说一句,shopnc 应该能满足很多人。

5年前 评论

@leo 您说的是 Laravel 文档?

数据库

快速入门
查询构造器 
分页
数据库迁移
数据填充
Redis

Eloquent ORM

快速入门
模型关联 
Eloquent 集合
修改器
API 资源
序列化

请问是哪一节有说?我真的是看过文档,并没有找到。
如果不是 Laravel 文档 应该去看哪一个的呢?

5年前 评论

@leo 那就是说不支持 Eloquent ORM 的?

5年前 评论

@Yu 哈哈,好的,有什么建议的话,请多多指教 O(∩_∩)O

5年前 评论

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