多维度 SKU 应该有所讨论?
26

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

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

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

本帖已被设为精华帖!
本帖由系统于 1个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
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 字段里丢。

2个月前
讨论数量: 49

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

3个月前
Yu

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

3个月前
Toiu

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

3个月前
Toiu

+1

3个月前
Toiu

@leo @summer

3个月前

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

3个月前
Yu

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

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

spus
skus
goods_properties
goods_property_items
spu_property_property_item_skus

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

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

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

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

3个月前
Summer

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

3个月前
aen233

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

2个月前

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

2个月前
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 字段里丢。

2个月前

@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" 不知在这样设计是否合理,还请提一些意见

2个月前
leo

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

2个月前

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

2个月前
leo

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

2个月前

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

2个月前
leo

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

2个月前

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

2个月前

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

2个月前
leo

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

2个月前

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

1个月前
leo

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

1个月前

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

1个月前
leo

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

1个月前
aen233

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

1个月前
十七岁程序员想当歌手

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

1个月前
leo

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

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

1个月前
aen233

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

1个月前
Yu

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

1个月前
leo

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

1个月前
十七岁程序员想当歌手

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

1个月前
leo

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

1个月前
十七岁程序员想当歌手

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

1个月前
leo

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

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

1个月前
十七岁程序员想当歌手

@leo 好的,谢谢

1个月前

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

1个月前
Yu

@leo 您说的是 Laravel 文档?

数据库

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

Eloquent ORM

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

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

1个月前
Yu

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

4周前

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

file

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

4周前
Yu

@simplewater 找时间学习一下

3周前

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

3周前

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

3周前

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

file

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

2周前

@yinminqian

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

file

file

file

2周前

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

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

file

file

2周前

@simplewater

// Admin/bootstrap.php

file

2周前

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

4天前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!