**

SPU与SKU概念区别

SPU和SKU
SPU:Standard Product Unit (标准产品单位) ,一组具有共同属性的商品集

SKU:Stock Keeping Unit(库存量单位),SPU商品集因具体特性不同而细分的每个商品

  • 小米Redmi K20Pro 就是一个商品集(SPU)
  • 因为颜色、内存等不同,而细分出不同的 小米Redmi K20Pro,比如冰川蓝8+128GB。(SKU)

所以spu是一个抽象的概念,我们实际买的某一个颜色某一个版本的手机是sku。
买的是sku。

数据库设计

弄清楚了SPU和SKU的概念,就该考虑一下数据库怎么设计了。

SKU的特有属性
SPU中会有一些特殊属性,用来区分不同的SKU,我们称为SKU特有属性。如小米手机的颜色、内存属性。

不同种类的商品,一个手机,一个衣服,其SKU属性不相同。

同一种类的商品,比如都是衣服,SKU属性基本是一样的,都是颜色、尺码等。

SKU的特有属性是商品规格参数的一部分:

所以可以不用对sku特有属性进行设计,因为他存在于规格参数中,是规格参数的一部分。

所有sku共享的规格属性(称为全局属性)
每个sku不同的规格属性(称为特有属性)


而搜索的时候也会用到规格参数的一部分,这些参数都可以在规格参数中找到,需要哪个字段做过滤可以给它做一个标识。

具体数据库表

我们观察页面的规格参数结构:

可以看到规格参数是分组的,每一组都有多个参数键值对。不过对于规格参数的模板而言,其值现在是不确定的,不同的商品值肯定不同,模板中只要保存组信息、组内参数信息即可。

设计两张表:

tb_spec_group:规格参数组,与商品分类关联
tb_spec_param:规格参数,与组关联,一对多(竖表设计,把参数名作为字段)


可以看到下图,**group表里存的是那些组名称,它们都绑定到一个cid(分类的id),而param表里存的是每个组里面键值对的键(key),它们也都绑定到一个cid,**这是为根据分类查找所有规格参数,页面展示,搜索过滤的时候会有用(而不用再通过tb_spec_group)。而键值对的值value是不确定的,它们存在spu,spu_detail,sku这些表中。

tb_spec_group:

tb_spec_param:

后面加的字段是对参数数值进行要求,比如上市年份只能输入几几年,而不能输入文字等乱七八糟的,还有是否要作为过滤条件(搜索过滤时候用)

代码实现
controller:
@RestController
@RequestMapping(“spec”)
public class SpecificationController {
@Autowired
private SpecificationService specificationService;

/*** 根据分类id查询规格组** @param cid* @return*/
@GetMapping("groups/{cid}")
public ResponseEntity<List<SpecGroup>> queryByCid(@PathVariable("cid") Long cid) {List<SpecGroup> specGroups = specificationService.queryGroupByCid(cid);return ResponseEntity.ok(specGroups);
}/*** 跟据组id查询参数* 第二次改:查询参数集合** @param gid* @param gid       规格组ID* @param cid       商品分类ID* @param searching 是否是搜索字段* @param generic   是否是通用字段* @return*/
@GetMapping("params")
public ResponseEntity<List<SpecParam>> queryParamByList(@RequestParam(value = "gid", required = false) Long gid,@RequestParam(value = "cid", required = false) Long cid,@RequestParam(value = "searching", required = false) Boolean searching,@RequestParam(value = "generic", required = false) Boolean generic) {return ResponseEntity.ok(specificationService.queryParamByList(gid, cid, searching, generic));
}/*** 根据分类查询规格组及组内参数** @param cid* @return*/
@GetMapping("group")
public ResponseEntity<List<SpecGroup>> queryListByCid(@RequestParam("cid") Long cid) {return ResponseEntity.ok(specificationService.queryListByCid(cid));
}

}

service:
@Service
public class SpecificationService {
@Autowired
private SpecGroupMapper groupMapper;
@Autowired
private SpecParamMapper paramMapper;

/*** 根据分类id查询规格组** @param cid* @return*/
public List<SpecGroup> queryGroupByCid(Long cid) {SpecGroup g = new SpecGroup();g.setCid(cid);List<SpecGroup> select = groupMapper.select(g);if (CollectionUtils.isEmpty(select)) {throw new LyException(ExceptionEnum.SPEC_GROUP_NOT_FOUND);}return select;
}/*** 跟据组id查询参数** @param gid* @return*/
public List<SpecParam> queryParamByList(Long gid, Long cid, Boolean searching, Boolean generic) {SpecParam p = new SpecParam();p.setGroupId(gid);p.setCid(cid);p.setSearching(searching);p.setGeneric(generic);List<SpecParam> select1 = paramMapper.select(p);if (CollectionUtils.isEmpty(select1)) {throw new LyException(ExceptionEnum.SPEC_PARAM_NOT_FOUND);}return select1;
}/*** 根据分类查询规格组及组内参数** @param cid* @return*/
public List<SpecGroup> queryListByCid(Long cid) {

// 查询规格组
List specGroups = queryGroupByCid(cid);
// 查询当前分类下的参数
List specParams = queryParamByList(null, cid, null, null);
// 把规格参数变成map,key是规格组id,value是组内的所有参数
Map<Long, List> map = new HashMap<>();
for (SpecParam param : specParams) {
if (!map.containsKey(param.getGroupId())) {
// 这个组id在map中不存在,新增一个list
map.put(param.getGroupId(), new ArrayList<>());
}
map.get(param.getGroupId()).add(param);
}
// 填充param到group
for (SpecGroup specGroup : specGroups) {
specGroup.setParams(map.get(specGroup.getId()));
}

    return specGroups;
}

}

总结
了解spu和sku,商品分类和规格组表,规格参数表的关系后,业务逻辑实现就会简单,因为要从哪张表查数据,需要查的spu还是sku就知道了,写代码的整套流程就会清晰。

商品SPU与SKU说明相关推荐

  1. 6_商品 SPU 与 SKU

    是什么 SPU: 标准化产品单元 SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产 ...

  2. 商品SPU与SKU概念区别

    SPU与SKU概念区别 SPU SKU SPU SPU = Standard Product Unit (标准产品单位) SPU 是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集 ...

  3. 商品数据结构之什么是SPU和SKU?

    目录 一.规格参数业务实现 二.SPU和SKU数据结构 最后 今天是刘小爱自学Java的第150天. 感谢你的观看,谢谢你. 学习计划安排如下: 昨天实现了商品规格参数组业务,今天继续实现其对应的规格 ...

  4. 【javaWeb微服务架构项目——乐优商城day05】——商品规格参数管理(增、删、改,查已完成),SPU和SKU数据结构,商品查询

    乐优商城day05 0.学习目标 1.商品规格数据结构 1.1.SPU和SKU 1.2.数据库设计分析 1.2.1.思考并发现问题 1.2.2.分析规格参数 1.2.3.SKU的特有属性 1.2.4. ...

  5. 42、生鲜电商平台-商品的spu和sku数据结构设计与架构

    说明:Java开源生鲜电商平台中商品的spu和sku数据结构设计与架构,包括数据库图标与架构分析. 1. 先说明几个概念. 电商网站采用在商品模块,常采用spu+sku的数据结构算法,这种算法可以将商 ...

  6. 电商商品列表应以SPU还是SKU展示商品?

    我们先了解下,SPU和SKU的概念,方便大家跟上思路,如下: SPU(Standard Product Unit):标准化产品单元.是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该 ...

  7. 商城-商品规格管理-SPU和SKU数据结构

    商城-商品规格管理-SPU和SKU数据结构 3.SPU和SKU数据结构 3.1.SPU表 3.1.1.表结构 3.1.2.spu中的规格参数 3.1.2.1.specifications字段 3.1. ...

  8. 微服务项目之电商--17.商品规格数据结构SPU和SKU

    目录 1.商品规格数据结构 1.1.SPU和SKU 1.2.数据库设计分析 1.2.1.思考并发现问题 1.2.2.分析规格参数 1.2.3.SKU的特有属性 1.3.规格参数表 1.3.1.表结构 ...

  9. 商品、单品、SPU、SKU

    在电子商务里,一般会提到这样几个词:商品.单品.SPU.SKU 简单理解一下,SPU是标准化产品单元,区分品种:SKU是库存量单位,区分单品:商品特指与商家有关的商品,可对应多个SKU. 首先,搞清楚 ...

最新文章

  1. Visual C#的SQL Server编程
  2. Java-查看JVM从哪个JAR包中加载指定类
  3. 使用FFmpeg生成HLS
  4. C函数数组元素初始化
  5. php弱类型漏洞,php代码审计之弱类型引发的灾难
  6. linux用户和用户组
  7. 要想学好前端开发,这五点你一定要知道!
  8. PERL-MOJO写一个简单的登录验证页面
  9. MFC 用Gdiplus画曲线和直线
  10. 《数据结构导论自考知识点(自己总结)》
  11. steam移动所有文件至新库文件夹失败_VBA进阶 | 文件操作17:File对象与Files集合详解...
  12. springboot获取到的MySQL数据少了8小时
  13. NR 5G SRB的定义和类型
  14. 软件工程——团队作业2
  15. 神威太湖之光计算机的知识点,神威太湖之光计算机系统.PDF
  16. CC2530F256RHAR 射频芯片 无线收发器芯片 ZigBee 解决方案
  17. install pecl php_Linux下 PHP 安装pecl_http方法
  18. Winfrom窗体应用程序图标的改变
  19. 使用XUL开发跨平台桌面应用
  20. C语言期末设计不在是千篇一律的学生管理系统,新题设值教师工作量管理系统(数组)。

热门文章

  1. 抽取JS语法树的基本模块
  2. C# 数组内元素合并转换成以指定字符连接的字符串
  3. SHOGUN toolbox的一些使用心得
  4. 零基础怎么学Python?要学多久?
  5. 整理全网最全大屏,可视化大屏,可视化方案,可视化参考,报表,大屏设计,大屏资源,大屏学习,高保真大屏
  6. Rplidar A2 激光雷达使用hector_slam进行建图
  7. android 虚拟键盘高度,获取Android中虚拟键盘的高度
  8. oracle insert all 用法
  9. 市场分析-全球与中国液态有机氢载体市场现状及未来发展趋势
  10. 【毕业设计】基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机