022 商品管理功能

匿名 (未验证) 提交于 2019-12-03 00:08:02

1.SPU和SKU数据结构

(1)SPU

SPU表:

CREATE TABLE `tb_spu` (   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'spu id',   `title` varchar(255) NOT NULL DEFAULT '' COMMENT '标题',   `sub_title` varchar(255) 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=208 DEFAULT CHARSET=utf8 COMMENT='spu表,该表描述的是一个抽象的商品,比如 iphone8';

与我们前面分析的基本类似,但是似乎少了一些字段,比如商品描述。

我们做了表的垂直拆分,将SPU的详情放到了另一张表:tb_spu_detail

CREATE TABLE `tb_spu_detail` (   `spu_id` bigint(20) NOT NULL,   `description` text COMMENT '商品描述信息',   `generic_spec` varchar(10000) NOT NULL DEFAULT '' COMMENT '通用规格参数数据',   `special_spec` varchar(1000) NOT NULL COMMENT '特有规格参数及可选值信息,json格式',   `packing_list` varchar(3000) DEFAULT '' COMMENT '包装清单',   `after_service` varchar(3000) DEFAULT '' COMMENT '售后服务',   PRIMARY KEY (`spu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这张表中的数据都比较大,为了不影响主表的查询效率我们拆分出这张表。

需要注意的是这两个字段:generic_spec和special_spec。

首先是generic_spec,其中保存通用规格参数信息的值,这里为了方便查询,使用了json格式:

json结构,其中都是键值对:

  • key:对应的规格参数的spec_param的id

  • value:对应规格参数的值

(2)SKU

SKU表

CREATE TABLE `tb_sku` (   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'sku id',   `spu_id` bigint(20) NOT NULL COMMENT 'spu id',   `title` varchar(255) NOT NULL COMMENT '商品标题',   `images` varchar(1000) DEFAULT '' COMMENT '商品的图片,多个图片以‘,’分割',   `price` bigint(15) NOT NULL DEFAULT '0' COMMENT '销售价格,单位为分',   `indexes` varchar(100) COMMENT '特有规格属性在spu属性模板中的对应下标组合',   `own_spec` varchar(1000) COMMENT 'sku的特有规格参数,json格式',   `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 DEFAULT CHARSET=utf8 COMMENT='sku表,该表表示具体的商品实体,如黑色的64GB的iphone 8';

还有一张表,代表库存:

CREATE TABLE `tb_stock` (   `sku_id` bigint(20) NOT NULL COMMENT '库存对应的商品sku id',   `seckill_stock` int(9) DEFAULT '0' COMMENT '可秒杀库存',   `seckill_total` int(9) DEFAULT '0' COMMENT '秒杀总数量',   `stock` int(9) NOT NULL COMMENT '库存数量',   PRIMARY KEY (`sku_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='库存表,代表库存,秒杀库存等信息';

因为库存字段写频率较高,而SKU的其它字段以读为主,因此我们将两张表分离,读写不会干扰。

(3)各表关系分析图:

2.商品查询

(1)效果预览

接下来,我们实现商品管理的页面,先看下我们要实现的效果:

(2)页面请求

先看整体页面结构(Goods.vue):

并且在Vue实例挂载后就会发起查询(mounted调用getDataFromServer方法初始化数据):

我们刷新页面,可以看到浏览器发起已经发起了查询商品数据的请求:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!