通常电子商城项目中会涉及到SKU ,SPU 概念 , 前者是原子级 , 后者是一种类别 。

SKU:Stock Keeping Unit : 库存单位 , 以库存进出为单位 ,
SPU:Standard Product Unit : 标准产品单位 ,从产品视角 ,是产品信息聚合的最小单位 ,一个SPU 可以包含多个 SKU
SPU 就是一个商品 ,例如华为P30 , 小米9 , 而每个 SPU下或有不同的商品 ,SKU 即为销售单元 ,也是库存的基础单位,例如小米8 白色 64G , 这就是一个SKU , 当库存出库的同时 , 去获取的也是该SKU的值

一 数据库结构

此结构设计参考自芋道源码及有赞 。
芋道源码

CREATE TABLE `item_sku_property_key` (`id` int(5) NOT NULL COMMENT '属性编号',`add_time` datetime DEFAULT NULL COMMENT '添加时间',`ismultiple` bit(1) DEFAULT NULL COMMENT '是否多选',`mustneed` bit(1) DEFAULT NULL COMMENT '是否必须',`name` varchar(128) NOT NULL COMMENT '属性文本',`status` int(5) NOT NULL COMMENT '状态',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `item_sku_property_reference` (`id` int(11) NOT NULL,`add_time` datetime DEFAULT NULL,`goodsid` int(15) NOT NULL COMMENT '对应商品ID',`issku` tinyint(1) NOT NULL COMMENT '是否为SKU',`shopid` int(5) NOT NULL COMMENT '对应店铺ID',`skuid` int(5) NOT NULL COMMENT 'skuid',`skukeyid` int(5) NOT NULL COMMENT '对应属性KEY',`skuvalueid` int(5) NOT NULL COMMENT '对应属Value',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `item_sku_property_value` (`id` int(11) NOT NULL,`add_time` datetime DEFAULT NULL COMMENT '添加时间',`datatype` int(5) DEFAULT '0' COMMENT '数据类型',`keyid` int(5) NOT NULL COMMENT '对应属性KEY',`value` varchar(128) NOT NULL COMMENT '属性文本',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `shop_goods_sku` (`unique_code` varchar(128) NOT NULL DEFAULT '0' COMMENT '唯一编号',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`gid` int(5) DEFAULT '0' COMMENT '商品编号,对应goods',`goods_no` varchar(128) DEFAULT '' COMMENT '商品货号',`imageurl` varchar(256) DEFAULT '' COMMENT '图片地址',`price` int(6) DEFAULT '0' COMMENT '价格',`properties` varchar(256) DEFAULT '' COMMENT '商品规格,字符串 ,通常用于预览',`quantity` int(6) DEFAULT '0' COMMENT '库存',`sale_num` int(6) DEFAULT '0' COMMENT '销量',`shop_id` int(5) DEFAULT '0' COMMENT '店铺编号',`sku_id` int(5) DEFAULT '0' COMMENT 'sku 编号',`status` int(3) DEFAULT '0' COMMENT '状态 1 正常 2 删除',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`with_hold_quantity` int(6) DEFAULT '9999' COMMENT '未付款订单数',PRIMARY KEY (`unique_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `shop_goods` (`id` int(11) NOT NULL,`alias` varchar(100) DEFAULT '' COMMENT '系统生成唯一ID',`create_date` datetime DEFAULT NULL,`goodscate` varchar(100) DEFAULT '' COMMENT '商品类别',`goodscode` varchar(100) DEFAULT '' COMMENT '商家自定义货号',`goodsdesc` varchar(255) DEFAULT '' COMMENT '货品描述',`goodsprice` varchar(255) DEFAULT NULL,`goodsstyle` varchar(100) DEFAULT '' COMMENT '商品风格',`goodstitle` varchar(100) DEFAULT '' COMMENT '货品标题',`goodstype` varchar(100) DEFAULT '' COMMENT '商品类型',`message` varchar(255) DEFAULT NULL,`sale_staus` varchar(255) DEFAULT NULL,`sale_type` varchar(255) DEFAULT NULL,`shopid` varchar(100) DEFAULT '' COMMENT '店铺ID',`size` varchar(255) DEFAULT NULL,`status` int(11) DEFAULT NULL,`summary` varchar(255) DEFAULT '' COMMENT '货品副标题',`update_date` datetime DEFAULT NULL,`volume` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

以下是各类的关系结构

前端算法

var obj = console.log(JSON.stringify(data));let pageObject = {};// 算法目的 : // 原数据 : {// "1":{"颜色":"白色","尺寸":"10*10","skuid":1},// "2":{"颜色":"玫瑰色","尺寸":"10*20","skuid":2}// }// showobj = {//   颜色 : { 白色 :[0,1] ,黑色 :[1 ,2] },//   尺码 : { 大号 :[0,2] }// }this.selectgood = data;findGoodsOne(data.id, "100001").then(re => {console.log("find success:{}--goolist:{}", JSON.stringify(re), this.goodlist);Object.keys(re).forEach(function (key) {//  对每一条记录进行循环 -》 {"颜色":"白色","尺寸":"10*10","skuid":1}let itemObject = re[key];let itemSKUID = itemObject.skuid;Object.keys(itemObject).forEach(function (itemKey) {// 获得每一种种类 -》 "颜色":"白色"  、 "尺寸":"10*10"// 种类 -> itemKey : 颜色 、尺寸// 值 -> itemValue : 白色 、红色 、大 、小let itemValue = itemObject[itemKey];// 当前页面渲染对象包含 种类 itemKeyif (pageObject.hasOwnProperty(itemKey)) {// 最终的存储单元 --{白色 ,[ 1 , 2 ]}let atomobj = pageObject[itemKey];// 当前 种类对象 中 是否包含 该 值 , 例如颜色 种类之中只包含了白色 ,而没有黑色if (atomobj.hasOwnProperty(itemValue)) {atomobj[itemValue].push(itemSKUID);} else {// 生成 该 值 , 并且为 其配置 skuidatomobj[itemValue] = [itemSKUID];}} else {// 创建种类对象 -》  尺码 : { 大号 :[0,2] }let valueSKUid = [itemSKUID];pageObject[itemKey] = {};pageObject[itemKey][itemValue] = valueSKUid;}});});console.log("=================");console.log(pageObject);this.pageObject = pageObject;this.showpop = true;}).catch(err => {console.log("press cancel");});

参照上面的注解就很同意理解了

 ensuregoodfun: function () {console.log("确定选购商品:{}", this.selectgood);console.log("确定选购商品 规格:{}", this.selectSKU);let itemSKU = this.selectSKU;let skuArray = new Array();//很明朗 , 依次循环 ,若下一个集合中有当前的skuid , 则保存到新的数组总 , 到最后 ,一定只有一个skuid 存在Object.keys(itemSKU).forEach(function (itemKey) {//获得第一个sku arrayif (skuArray.length == 0) {skuArray = itemSKU[itemKey].skid} else {let newArray = new Array();let next = itemSKU[itemKey];for (let x in next) {if (skuArray.indexOf(next[x])) {newArray.push(next[x]);}}}});console.log("最终sku:{}", skuArray[0]);var cartObject = {cartdesc: 'app',carttype: 0,goodsid: this.selectgood.id,skuid: skuArray[0],shopId: 100001,buyerId: 10001,nobodyKey: 'A0001',num: this.buynum,price: this.selectgood.goodsprice}addGoodsToCart(cartObject).then(re => {console.log("add success:{}--goolist:{}", JSON.stringify(re), this.goodlist);this.showpop = false;util.showmsg("货品已添加到购物车");}).catch(err => {});},

总结

此SKU 表的设计还有很多可扩展的空间 , 对于 前端算法 ,SKU不会太多 ,基本满足复杂需求 ,可以尝试优化后使用

电子商城 SKU 简述 及 前端算法排序相关推荐

  1. Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业-毕设程序代做

    Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业-毕设程序代做 [免费赠送源码]Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业 ...

  2. 基于JSP(java)电子商城的设计和实现 (含源文件)

    摘 要 Internet以其标准化.全球化.全民化.迅猛发展等特点成为了电子商务的基础,电子商务活动己经演变成了利用Internet进行经济活动的网络经济.电子商务网站如雨后春笋般地发展壮大起来,各式 ...

  3. 基于JSP(java)电子商城的设计和实现

    摘 要 Internet以其标准化.全球化.全民化.迅猛发展等特点成为了电子商务的基础,电子商务活动己经演变成了利用Internet进行经济活动的网络经济.电子商务网站如雨后春笋般地发展壮大起来,各式 ...

  4. JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  5. 基于springboot的在线电子商城系统设计与实现

    目 录 摘 要 1 Abstract 2 第1章 前 言 3 1.1 项目的背景和意义 3 1.2 研究现状 3 1.3 研究内容及预期目标 3 第2章 技术与原理 7 第3章 系统需求分析 8 3. ...

  6. java毕业生设计电子商城系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计电子商城系统计算机源码+系统+mysql+调试部署+lw java毕业生设计电子商城系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  7. java B2B2C Springboot电子商城系统

    大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 需要JAVA Spring Cloud大型企业分布式 ...

  8. java B2B2C 仿淘宝电子商城系统-Spring Cloud Eureka参数配置项详解

    Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下面对Eureka的配置项做具体介绍,供大家参考. 需要JA ...

  9. 编写算法判别给定二叉树是否为完全二叉树_推荐一位实力超强的平安前端算法大佬:瓶子君...

    今天给大家推荐一位平安大佬:前端瓶子君,一个专注于前端开发的小瓶子,五年大厂开发经验,掘金优秀作者. 「前端进阶算法」系列是她4月初发起的活动,从 0 到 1 构建完整的前端数据结构与算法体系.这是一 ...

最新文章

  1. pytorch实现attention_Longformer: 局部Attention和全局attention的混搭
  2. Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.... 此错误的解
  3. oracle导出用户下单表或者多表,导入到别的服务器用户下
  4. wxpython textctrl绑键盘事件_wxPython控件学习之TextCtrl(三)响应文本控件事件
  5. Linux系统下通过命令行对mysql数据进行备份和还原
  6. linux下使用wget下载jdk
  7. [学习总结]6、Android异步消息处理机制完全解析,带你从源码的角度彻底理解
  8. 《Supervised Descent Method and its Applications to Face Alignment》阅读笔记
  9. 记一次大量数据导入导出SAP系统实验
  10. 男女之间的暗号,看看吧,说不定你喜欢的人正暗恋着你。
  11. 一种用于指导模拟 IC 布局的定制图神经网络模型
  12. 封装jquery的方法
  13. EI会议论文被检索难度评定
  14. nbu客户端卸载_在linux中卸载Netbackup
  15. 几个python运维脚本
  16. Adobe Photoshop CS5.1 Extended 12.1中文特别版
  17. MAC下linux双系统的安装
  18. Did you mean..?解法
  19. 用audition让声音更加好听
  20. 使用nodeJS写一个简单的小爬虫

热门文章

  1. SketchUp 俱乐部椅模型创建教程 | 附插件下载
  2. 万物数字化的时代,开发者的“变”与“不变”
  3. 基于MATLAB GUI的匀速目标回波模拟器设计
  4. 5.1 px30 - rt5640音频驱动
  5. 模数转换器(ADC) ADE7913ARIZ 专为三相电能计量应用而设计
  6. H3C NE考试复习GB0-190
  7. PermissionError: [Errno 13] Permission denied 已解决
  8. 周期信号谱线结构与波形参数的关系
  9. 应用概率统计(陈魁 编著)部分答案(方差分析第十章)
  10. 如何构建自己的知识体系,提升个人竞争力