1. 先做一下专业术语解释:spu和sku

这里拿iphone6s举例,它身上有很多的属性和值, 比如:

  • 毛重: 420.00 g
  • 产地: 中国大陆
  • 容量: 16G, 64G, 128G
  • 颜色: 银, 白, 玫瑰金

spu 指的是商品(iphone6s),spu属性就是不会影响到库存和价格的属性, 又叫关键属性,与商品是一对一的关系,比如:

  • 毛重: 420.00 g
  • 产地: 中国大陆

sku指的是具体规格单品(玫瑰金 16G),sku属性就是会影响到库存和价格的属性, 又叫销售属性,与商品是多对一的关系,比如:

  • 容量: 16G, 64G, 128G
  • 颜色: 银, 白, 玫瑰金

所以iphone6s则会生成 3 * 3 = 9 个 sku

上面这张图是我项目中用到的商品相关的几张数据表, 请只关注有数据值的字段,其它为业务需要,一共包含如下5张表

1. 商品分类表 mmall_category 

此表采用无限层级树状数据结构,程序使用递归算法来遍历分类下的所有子分类,parent_id是父级分类, parent_id=0时说明是根节点, 属于一级类别; 如使用递归查询出100034包含100037子类别,依次类推,这样就构成一个可以无限扩展的数字结构;

  • 商品分类表--mmall_category
  • 商品表--------mmall_product
  • 商品规格表--mmall_product_specs
  • 属性key表---mmall_attribute_key
  • 属性value表-mmall_attribute_value

2. 商品表 mmall_product(也称spu表)

spu表中关键字段是category_id和attribute_list两个字段:
category_id 记录这个商品属于哪个分类, 用于通过分类进行商品搜索;
attribute_list 记录的是所有属性集合,这个字段采用json格式存储,便于前端解析;前端解析后可以在页面显示出商品的所有属性, 用户点击选择出属性组合后,前端可以拼接成{"内存":"2G","颜色":"红色","尺寸":"20cm"}这样的json格式加上商品id在(商品规格表 mmall_product_specs)查询到具体的单品,随即获取到具体单品的库存和价格等信息;

3. 商品规格表 mmall_product_specs(也称sku表)

sku表保存的是具体的单品信息,比如具体规格的库存和价格等,核心字段是product_id和product_specs,product_id 记录的是spu表中的商品id,product_specs 记录的是该单品具体的属性值(规格值);

4. (属性key表 mmall_attribute_key)和(属性value表-mmall_attribute_value)

属性key表和属性value表仅用于管理后台页面生成属性选项,管理员在发布新商品时勾选属性,方便规格的录入和保证正确性;

这里我使用了两张横表spu表和sku表实现不同商品的存储,spu表使用attribute_list字段保存属性集合,查询时使用product_id和product_specs去sku表中获取的具体的单品信息, spu表中可以增加一些商品的公共信息字段,例如名称、发布的商家、发布日期、上架状态, sku表中增加一些每个单品不同的字段,比如不同的单品有不同图片和名称或者详情说明等等,反正根据业务进行扩展


总结, 上述数据表设计方案适用于商品类别差异不是很大的情形,通过表的字段可以发现不同的商品之间变化的信息只有 attribute_list字段, 而这个字段通过json来存储各种不同的属性集合, 同样sku表中变化的字段只有 product_specs 也是通过json来存储各种不同属性组合。

商品表(spu)、规格表(sku)设计的更多相关文章

  1. python --商品规格--表结构设计

    商品规格表结构设计 商品规格包括规格组合.规格项,规格项为规格组的成员. 规格组 |-规格项:规格值 |-规格项:规格值 规格组 |-规格项:规格值 |-规格项:规格值 同一类商品的规格相同. 方案一 ...

  2. TPshop的规格表设计原理机制

    TPshop商品规格比较简单, 数据库设计清晰, 先看上图购买商品时对应的选择, 不同规格有着不同的价格和不同的库存. 再看看后台对应的设置,手机例子 颜色:黑色 白色 金色 内存:32G 64G  ...

  3. Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计

    Java生鲜电商平台-商品分类表和商品类型表的区别与数据库设计   二者服务的对象不一样 目的也是不一样的 商品分类是为商品服务的 用来管理商品 商品类型是为扩展属性服务的 用来管理属性 举例:[转] ...

  4. 商品的spu、sku及其之间的关系

    今日来总结一下,电商系统中涉及到商品时必然会遇到的几个概念,SPU.SKU.单品等.彻底搞懂和明白了这几个概念对我们设计商品表是十分必要的前提条件. SPU:标准化产品单元 SPU = Standar ...

  5. SpringBoot电商项目实战 — 商品的SPU/SKU实现

    最近事情有点多,所以系列文章已停止好多天了.今天我们继续Springboot电商项目实战系列文章.到目前为止,整个项目的架构和基础服务已经全部实现,分布式锁也已经讲过了.那么,现在应该到数据库设计及代 ...

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

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

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

    Java生鲜电商平台-商品的spu和sku数据结构设计与架构 1. 先说明几个概念. 电商网站采用在商品模块,常采用spu+sku的数据结构算法,这种算法可以将商品的属性和商品的基本信息分离,分开维护 ...

  8. 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储

    在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...

  9. MySQL 表的约束与数据库设计

    DQL 查询语句 排序 # 单列排序 * 只按某一个字段进行排序,单列排序 # 组合排序 * 同时对多个字段进行排序,如果第1个字段相等,则按照第2个字段排序,依次类推 * 语法: # 具体操作 * ...

随机推荐

  1. springboot集成jpa操作mybatis数据库

    数据库如下 CREATE TABLE `jpa`.`Untitled` ( `cust_id` bigint() NOT NULL AUTO_INCREMENT, `cust_address` var ...

  2. redis基础二----操作hash

    上面usr就是hash的名字,usr这个hash中存储了key 为id.name和age的值 一个hash相当于一个数据对象,里面可以存储key为id name age的值 2.批量插入一个hash数 ...

  3. Zookeeper分布式过程协同技术 - 群首选举

    Zookeeper分布式过程协同技术 - 群首选举 群首概念 群首为集群中服务器选择出来的一个服务器,并被集群认可.设置群首目的在与对客户端所发起的状态变更请求进行排序,包括:create.setDa ...

  4. 表达式计算开源组件(NCalc.NetCore)

    首先,这款组件是开源的,NCalc是.net中的一个数学表达式求值程序.NCalc可以解析任何表达式并计算结果,包括静态或动态参数和自定义函数. 官网地址:http://ncalc.codeplex. ...

  5. 数据库管理与迁移(Liquibase)

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  6. json自定制

    import json from datetime import date from datetime import datetime class JsonCustomEncoder(json.JSO ...

  7. SpringCloud系列之集成分布式事务Seata应用篇

    目录 前言 项目版本 项目说明 Seata服务端部署 Seata客户端集成 cloud-web module-order module-cart module-goods module-wallet ...

  8. 线性动归之Wooden Sticks

    题面:现在有n(n<5000)个木头,每个木头都有长度l和重量w(l<10000,w<10000),现在你要对木头进行加工: 1.第一根木头需要先花费1min: 2.加工完第i跟木头 ...

  9. 手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端)

    原文地址:手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端) 为什么使用 MQ? 在这里我就不多说了,无非就是削峰.解耦和异步.这里没有很多关于 MQ 的理论和概念,只想手把手带你一 ...

  10. Jenkins - 解决集成 jmeter+ant 发送邮件时报错:java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage

    jenkins + jmeter +ant 发送邮件失败 问题原因 其实就是缺失 jar 包,导致某些类找不到了 解决方案 点击该网站,下载commons-email.jar包 点击该网站,下载act ...