1.Spu和Sku的概念

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

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

比如说小米8手机是Spu,
红色的128g存储空间,6g内存的小米8是Sku。

Spu是一组商品集合,Sku是能根据条件在Spu种唯一确定的一件商品

如本例中的:

  • 本页的 华为Mate30 就是一个商品集(SPU)
  • 因为颜色、内存等不同,而细分出不同的Mate30,如亮黑色128G版。(SKU)

可以看出:

  • SPU是一个抽象的商品集概念,为了方便后台的管理。
  • SKU才是具体要销售的商品,每一个SKU的价格、库存可能会不一样,用户购买的是SKU而不是SPU

2.经过分析结构得到下面结论

2.1分类表与参数组表

我们看下面,只要是手机的分类,都会有主体,基本信息,主芯片,存储,屏幕等参数
分类表和参数组表是一对多的关系,分类表是1,参数组表是多。比如说手机分类,对应主体,基本信息,主芯片,存储,屏幕。
可以看出一个分类(category)对应了多个(spec_group)简称为参数组,我们建立类别表和参数表。

CREATE TABLE `tb_category` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '类目id',`name` varchar(32) NOT NULL COMMENT '类目名称',`parent_id` bigint(20) NOT NULL COMMENT '父类目id,顶级类目填0',`is_parent` tinyint(1) NOT NULL COMMENT '是否为父节点,0为否,1为是',`sort` int(4) NOT NULL COMMENT '排序指数,越小越靠前',PRIMARY KEY (`id`),KEY `key_parent_id` (`parent_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1424 DEFAULT CHARSET=utf8
CREATE TABLE `tb_spec_group` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`cid` bigint(20) NOT NULL COMMENT '商品分类id,一个分类下有多个规格组',`name` varchar(32) NOT NULL COMMENT '规格组的名称',PRIMARY KEY (`id`),KEY `key_category` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8

2.2参数组表与参数表


可以看到一个参数组对应多个参数。

创建参数表


Create TableCREATE TABLE `tb_spec_param` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`cid` bigint(20) NOT NULL COMMENT '商品分类id',`group_id` bigint(20) NOT NULL,`name` varchar(256) NOT NULL COMMENT '参数名',`numeric` tinyint(1) NOT NULL COMMENT '是否是数字类型参数,true或false',`unit` varchar(256) DEFAULT '' COMMENT '数字类型参数的单位,非数字类型可以为空',`generic` tinyint(1) NOT NULL COMMENT '是否是sku通用属性,true或false',`searching` tinyint(1) NOT NULL COMMENT '是否用于搜索过滤,true或false',`segments` varchar(1024) DEFAULT '' COMMENT '数值类型参数,如果需要搜索,则添加分段间隔值,如CPU频率间隔:0.5-1.0',PRIMARY KEY (`id`),KEY `key_group` (`group_id`),KEY `key_category` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COMMENT='规格参数组下的参数名'

2.3参数表和参数信息在数据库相关联?

这就需要和Spu表和Sku表联合起来看了!
上文说过Spu是一组具有共同属性的商品集,Sku是Spu商品集因具体特性不同而细分的每个商品
那么Sku,Spu表该如何创建
首先Spu肯定需要和分类表相关联,一个分类如手机对应多个Spu(手机中的小米8(Spu),华为mate30(Spu))。
一个Spu(小米8)对应多个Sku 小米8白色128g,小米8灰色64g(Sku)等。

Spu表

CREATE TABLE `tb_spu` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'spu id',`title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题',`sub_title` varchar(256) DEFAULT '' COMMENT '子标题',`cid1` bigint(20) NOT NULL COMMENT '1级类目id',`cid2` bigint(20) NOT NULL COMMENT '2级类目id',`cid3` bigint(20) NOT NULL COMMENT '3级类目id',`brand_id` bigint(20) NOT NULL COMMENT '商品所属品牌id',`saleable` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否上架,0下架,1上架',`valid` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否有效,0已删除,1有效',`create_time` datetime DEFAULT NULL COMMENT '添加时间',`last_update_time` datetime DEFAULT NULL COMMENT '最后修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=195 DEFAULT CHARSET=utf8 COMMENT='spu表,该表描述的是一个抽象性的商品,比如 iphone8'

Sku表:


Create TableCREATE TABLE `tb_sku` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'sku id',`spu_id` bigint(20) NOT NULL COMMENT 'spu id',`title` varchar(256) NOT NULL COMMENT '商品标题',`images` varchar(1024) DEFAULT '' COMMENT '商品的图片,多个图片以‘,’分割',`price` bigint(15) NOT NULL DEFAULT '0' COMMENT '销售价格,单位为分',`indexes` varchar(32) DEFAULT '' COMMENT '特有规格属性在spu属性模板中的对应下标组合',`own_spec` varchar(1024) DEFAULT '' COMMENT 'sku的特有规格参数键值对,json格式,反序列化时请使用linkedHashMap,保证有序',`enable` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否有效,0无效,1有效',`create_time` datetime NOT NULL COMMENT '添加时间',`last_update_time` datetime NOT NULL COMMENT '最后修改时间',PRIMARY KEY (`id`),KEY `key_spu_id` (`spu_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=27359021729 DEFAULT CHARSET=utf8 COMMENT='sku表,该表表示具体的商品实体,如黑色的 64g的iphone 8'

现在基本的表结构可以看作为

当我们点击商品详情的时候会携带Sku ID,通过Sku ID,拿到对应的Spu ID,拿到Spu ID后拿到Cid,
通过Cid拿到参数组表进行渲染,通过gid在参数表拿到参数头信息,怎么拿到参数信息呢?

参数信息都被保存在Spu,和Sku种,如果是某种商品集公有参数信息会保存在Spu种,
如果是可选参数会保存到Sku种。保存的数据格式均为{key1:value1,key2:value2}json数据格式。
我们现在已经拿到了SpuID,通过SpuID查询Spu表,sku表拿到参数信息进行渲染即可。

总之:电商型数据库表的设计有很多种

记住Spu是一种抽象的概念,是一组有共同属性的商品集合(无实体),Sku是Spu中真正的商品实现!

问题一:为什么要用JSON数据来保存对应关系呢?
1.如果不用json数据格式,会将Spu表和参数表和参数组表的主键放在一起,如果Spu表几亿条数据,参数表几十条,参数组表几十条,结合起来数千万亿条数据,是不现实的。而用json格式取巧的避开了大规模数据的笛卡儿积查询
问题二:库存表如何设计?
库存表应该和Sku表是一张表,而库存表的频繁的写入数据多,单独拿出来实现读写分离好。因为关系型数据库的细粒度锁,如果触发锁表操作,将严重影响读写效率。

大型电商项目数据库表设计相关推荐

  1. 大数据互联网架构阶段 大型电商项目数据库设计时应该注意的点

    大型电商项目数据库设计时应该注意的点 一. id的设计 int(int)类型: 性能高 , 但是分布式数据库时 , id易重复 long(bigint)类型:性能高 , 比int类型容纳的数据更多 , ...

  2. Day814.电商系统表设计优化案例分析 -Java 性能调优实战

    电商系统表设计优化案例分析 Hi,我是阿昌,今天学习记录的是关于电商系统表设计优化案例分析. 如果在业务架构设计初期,表结构没有设计好,那么后期随着业务以及数据量的增多,系统就很容易出现瓶颈. 如果表 ...

  3. 架构思维成长系列教程(七)- 大型电商系统架构设计

    背景 大型电商网站,指的是每日用户访问量达到数百万,每日页面访问量达到数千万乃至上亿级别的网站,达到这个规模的电商网站在国内不多. 内容 架构设计分为两部分:应用架构设计和基础架构设计 应用架构设计: ...

  4. django web经典模块开发实战——第三章 用Django设计大型电商的类别表

    1 电商类别表的项目功能需求 1.1 使用vue.js在前端开发一个电商导航栏项目 demo1 nodejs的安装 yum install -y nodejs 安装淘宝镜像(贼慢..) npm ins ...

  5. css网页设计实例代码_大型电商平台设计实例:电商平台项目工程、数据库选型、代码库...

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  6. 大型电商平台设计实例:电商平台项目工程、数据库选型、代码库

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  7. 电商项目数据库设计 | 第三篇:库存相关表结构

    电商项目数据库设计-库存 回顾 在上一篇围绕商品设计表的时候,我们并没有去设计库存字段的,所以接下来我们就来谈谈库存到底该怎么去设计. 首先,我们看看之前设计的商品表,他是与SPU表进行多对多的关联, ...

  8. 电商项目数据库设计 | 第二篇:商品相关表结构

    商品相关表结构设计   近年来,中国的电子商务快速发展,交易额连创新高,电子商务在各领域的应用不断拓展和深化.相关服务业蓬勃发展.支撑体系不断健全完善.创新的动力和能力不断增强.电子商务正在与实体经济 ...

  9. 大型电商平台设计实例:电商平台总体设计和业务模型设计

    大型电商平台设计实例 本章我们将使用微服务架构风格设计一个大型电商平台,这个平台将以 Saas 方式提供一个类似于 S2B2C 的服务. 电商平台是 个大众化的应用平台,读 对它的功能都比较熟悉,本章 ...

  10. 全球大型电商测试基础架构设计概览

    作者 | 茹炳晟 编辑 | Eva 本文为 eBay中国研发中心测试基础架构技术主管 茹炳晟关于"eBay高效能测试基础架构的前世今生"主题分享的部分节选,想了解全部内容,请在公众 ...

最新文章

  1. 使用Apache Spark构建实时分析Dashboard
  2. iOS SDWebImage 缓存机制与缓存策略
  3. 跨页数据传递的两种方式
  4. java鼠标改变窗口大小监听事件_java – 当用户拖动鼠标时,监听JFrame调整事件大小?...
  5. 有意思的逻辑思维题(三)(hdu2211,蓝桥杯蚂蚁感冒)
  6. C++中BEGIN_MSG_MAP或者BEGIN_MESSAGE_MAP的个人理解
  7. sql字符串函数_SQL字符串函数概述
  8. BCZM : 1.8
  9. 3D打印笔 画出模型
  10. canvas 擦除动画_HTML5 实现橡皮擦的擦除效果
  11. 谷歌中设置utf8编码
  12. 牛客-练习赛101-推理小丑
  13. 渗透测试-CS架构客户端
  14. python 文件缓存
  15. python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
  16. Matlab坐标轴正负指数显示
  17. javascript实现完美身份证号有效性验证15位18位
  18. python如何爬取实时人流量_使用python爬取微信宜出行人流量数据
  19. NopCommerce Alipay 支付插件
  20. 从事c++一年的感悟

热门文章

  1. 用计算机弹极乐净土谱,极乐净土计算器谱
  2. 分享CFA一级考试干货
  3. 2021年CFA备考复习攻略分析
  4. netty权威指南学习
  5. 宏excel怎么计算机,excel宏的使用/EXCEL 如何关闭宏
  6. ant-design-vue 的颜色选择器
  7. Python 函数的嵌套
  8. TAOCP--MIX环境准备
  9. leetcode 718 最长公共子串
  10. ftp服务器目录创建文件夹,ftp服务器目录创建文件夹