电商系统,剖析商品模块中商品表(spu)、规格表(sku)的数据库是如何设计的
不管开发B2C、B2B2C、还是B2B等电商项目,不可避免的要实现上面的详情页面。页面展示中,商品的名称、商品的主图、商品的详情都容易搞定。就是商品种类繁多后,每一种商品具有不同的规格,不同的规格就会对应不同的价格和库存,这点比较难搞。以上面图为例,不同的机身颜色和存储容量的组合,会出现不同的库存以及不同的价格。
下面针对sku如何实现这个功能,而不相干的字段就屏蔽掉。
分类的数据库表,商品太多,一般会按照分类进行管理。比如分手机的分类、电脑的分类。
CREATE TABLE `category` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父级主键',`category_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类名称',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分类表';
属性key的数据库表,一般一个分类,会拥有差不多的属性。比如手机,都有内存、颜色等属性。
CREATE TABLE `attribute_key` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`category_id` int(255) unsigned NOT NULL COMMENT '分类外键',`attribute_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '属性ke值',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='属性key表';
属性value的数据库表,根据数据库设计的范式原则,属性及属性值会分开不同的表进行存储,所以会多一个表来存属性值。
CREATE TABLE `attribute_value` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`attribute_id` int(10) unsigned NOT NULL COMMENT '属性key外键',`attribute_value` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '属性value值',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='属性value表';
有了上面这些前提表,这个时候后台新增商品的时候,就需要商品表和规格表。新增商品信息spu及规格信息sku,先存储goods信息,存储成功后再存储goods_specs。一起是一个事务。
CREATE TABLE `goods` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`category_id` int(10) unsigned NOT NULL COMMENT '分类外键',`attribute_list` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '规格列表',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
CREATE TABLE `goods_specs` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`goods_id` int(10) unsigned NOT NULL COMMENT '商品外键',`goods_specs` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品规格',`goods_stock` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品库存',`goods_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '商品价格',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='规格表';
这样子,我们就把把不同商品的不同规格存储到数据库了
当前端点击不同的机身颜色、存储容量后,前端带着goods_id和goods_specs字段去请求goods_specs表获取库存和价格,类似执行了下面这条sql语句
SELECT * FROM goods_specs WHERE goods_id='1' AND goods_specs='{"内存": "128GB", "颜色": "黑色"}';
整体逻辑跑通后,剩下的就是在这个基础上不断的优化完善,最终达到产品想要的效果。
电商系统,剖析商品模块中商品表(spu)、规格表(sku)的数据库是如何设计的相关推荐
- 软件架构-解密电商系统营销-会员模块业务
上次说了商品,商品分类,品牌,分类的属性,规格.很多电商网站例如:京东,国美,苏宁他们的商品都是存储在redis中的,通过请求获取到的redis进行js的渲染动态的展示商品的信息. (一)营销模块 营 ...
- HH SaaS电商系统的商城模块设计
文章目录 好获SaaS电商系统层级关系 商城实体 商城运营模式 商城可选子系统 创建商城 商城管理后台 有供应系统和无供应系统的B2C和混合模式的商城系统对比 有仓储系统和无仓储系统的B2C和混合模式 ...
- HH SaaS电商系统的跨境商品展示、下单、清关、出库全流程设计
跨境商品的展示 后补 跨境商品的下单 在订单确认页面就要按SKU拆单,所以跨境销售订单的主单和子单是一对一的关系 多种进口渠道的商品在同个销售主单中,在进口清关.收货.货款结算时会出现问题,假设销售订 ...
- 品优购电商系统开发 第5章 商品录入【1】
课程目标 目标1:完成商品分类功能 目标2:了解电商概念SPU 和SKU 目标3:掌握富文本编辑器的使用 目标4:掌握上传服务器FastDFS 目标5:掌握angularJS图片上传 1.商品分类 1 ...
- HH SaaS电商系统的品牌模块设计
品牌和商品基础类目属于多对多的关系 创建品牌时必须关联商品基础类目,且只能关联三级类目,至少关联一种 品牌只能由租户统一进行维护管理,供应商.商家.商城可以申请新品牌,但是由租户进行审核 品牌被删除或 ...
- 电商系统的售后模块设计
文章目录 售后单实体 方案一 方案二 服务类型 可选售后服务判断规则 退款类型 售后截止时间 金币和优惠券如何返还 买家端订单列表的"售后按钮"逻辑说明 服务端处理逻辑 买家端操作 ...
- HH SaaS电商系统的支付模块设计
文章目录 支付单 支付单状态流转逻辑说明 支付相关实体 支付流水记录 支付方式 支付渠道 支付单 销售订单生成时,同步生成支付单,如果销售订单的应付金额由首付款和尾款组成,那么会生成两个支付单 支付单 ...
- 前端学习(1888)vue之电商管理系统电商系统之在sessionStrorage中保存按钮的激活状态
目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './components ...
- 前端学习(1874)vue之电商管理系统电商系统之处理项目中eslint语法报错
目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './components ...
最新文章
- 35 利用构造函数和原型对象实现继承
- Spring@Cacheable注解在类内部调用失效的问题
- php盒子模型,CSS盒子模型介绍
- 【数据库学习】——windows、MySQL构建新闻管理系统(控制台版)
- 使用idea创建JavaWeb项目
- 海量数据的topK问题
- mysql spider引擎安装_mysql spider 引擎的使用
- C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。
- 局域网互访终结贴(转载)
- shiro安全框架 面试题
- python写文件指定编码_python指定写入文件时的编码格式方法
- python实现京东联盟API接口对接
- 支付宝接口对接指南(一、支付宝文档解读和支付宝侧沟通)【保姆级】
- 图片轮播且可以实现5张翻页
- 用matlab实现高斯信道建模
- QRCode生成二维码和解析二维码
- 前端网页配色网站推荐
- 形象的解释一下ERP系统的运作流程
- PHP最新B站视频直链解析源码下载+亲测可用
- 思维的技术:如何破解工作生活中的两难冲突?
热门文章
- RLS算法-公式初探
- html简单边框制作--特效文字制作及代码,HTML音画介绍之一--基本原理和边框的制作...
- Android模拟器编程,Android模拟器入门[转]
- Linux挂载Windows网络共享文件夹
- 使用 Wall 搭建个人照片墙和视频墙
- 百度地图滑动后获取屏幕的中心点百度坐标
- Spring Data JPA 查询方法的命名语法与参数
- 【textarea】按下回车发送消息不换行,怎么实现?
- oracle中活着的写法,oraclekk
- leetcode打家劫社简单实现--python