商品SKU表SQL

CREATE TCABLE `store_goods_sku` (
  `sku_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品规格id',
  `goods_id` int(10) unsigned NOT NULL COMMENT '商品id',
  `spec_sku_id` varchar(255) NOT NULL DEFAULT '0' COMMENT '商品sku记录索引 (由规格id组成)',
  `goods_no` varchar(100) NOT NULL DEFAULT '' COMMENT '商品编码',
  `goods_thumb` varchar(100) NOT NULL DEFAULT '' COMMENT '商品封面',
  `goods_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '商品价格',
  `line_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '商品划线价',
  `stock_num` int(10) unsigned NOT NULL COMMENT '当前库存数量',
  `goods_sales` int(10) unsigned NOT NULL COMMENT '商品销量',
  `goods_weight` double unsigned NOT NULL COMMENT '商品重量(Kg)',
  `created_at` datetime DEFAULT NULL COMMENT '创建时间',
  `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`sku_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品规格表';

CREATE TABLE `store_goods_spec` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `goods_id` int(10) unsigned NOT NULL COMMENT '商品id',
  `spec_id` int(10) unsigned NOT NULL COMMENT '规格组id',
  `spec_value_id` int(10) unsigned NOT NULL COMMENT '规格值id',
  `created_at` datetime DEFAULT NULL COMMENT '创建时间',
  `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='商品与规格值关系记录表';

CREATE TABLE `store_spec` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格组id',
  `spec_name` varchar(255) NOT NULL DEFAULT '' COMMENT '规格组名称',
  `created_at` datetime DEFAULT NULL COMMENT '创建时间',
  `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='商品规格组记录表';

CREATE TABLE `store_spec_value` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格值id',
  `spec_value` varchar(255) NOT NULL COMMENT '规格值',
  `spec_id` int(11) NOT NULL COMMENT '规格组id',
  `created_at` datetime DEFAULT NULL COMMENT '创建时间',
  `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='商品规格值记录表';
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 15

可以每个表展示两三行主要字段数据吗?

2年前 评论
fatrbaby

表里面的字段其实是有各自的scope的,所以在store_goods_sku表里面,sku_id这样的字段名完全是多余的。

2年前 评论
wxf666 2年前
frans (楼主) 2年前
CREATE TABLE `goods_sku` (
  `id` int NOT NULL AUTO_INCREMENT,
  `spu_id` int NOT NULL DEFAULT '0' COMMENT '商品Id',
  `specs_value_ids` varchar(255) NOT NULL DEFAULT '' COMMENT '每行规则属性ID 按逗号连接,比如 1,33,55 ',
  `price` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '现价',
  `cost_price` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '原价',
  `stock` int unsigned NOT NULL DEFAULT '0' COMMENT '库存',
  `pic` varchar(1000) NOT NULL DEFAULT '' COMMENT '小图,商品列表显示',
  `pic_bigger` varchar(1000) NOT NULL DEFAULT '' COMMENT '大图,横着的,主要用于商品详情。',
  `pic_biggest` varchar(1000) NOT NULL DEFAULT '' COMMENT '最大图,竖着的,主要用于海报。',
  `is_valid` tinyint NOT NULL DEFAULT '1' COMMENT '1有效,0无效',
  `is_default` tinyint NOT NULL DEFAULT '0' COMMENT '1默认的0不是默认',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `lock_stock` int unsigned NOT NULL DEFAULT '0' COMMENT '锁定的库存',
  PRIMARY KEY (`id`),
  KEY `spu_id` (`spu_id`),
  KEY `specs_value_ids` (`specs_value_ids`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb3 COMMENT='商品sku表'

CREATE TABLE `goods_spu` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品spu名称,例如iphone11',
  `category` int NOT NULL DEFAULT '1' COMMENT '大类',
  `is_valid` tinyint NOT NULL DEFAULT '1' COMMENT '1有效,0无效',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `class_id` int NOT NULL DEFAULT '0' COMMENT '外键,',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COMMENT='商品spu表'

CREATE TABLE `specs` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '规格名,比如,内存大小',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COMMENT='规格表'

CREATE TABLE `specs_value` (
  `id` int NOT NULL AUTO_INCREMENT,
  `specs_id` int NOT NULL DEFAULT '0' COMMENT '规格ID,关联规格表,比如  1:代表内存大小 ',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '规格属性名,比如 128G内存',
  `spu_id` int NOT NULL DEFAULT '0' COMMENT 'spu_id',
  `is_valid` tinyint NOT NULL DEFAULT '1' COMMENT '1有效,0无效',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序,从大到小',
  PRIMARY KEY (`id`),
  UNIQUE KEY `index1` (`spu_id`,`specs_id`,`name`),
  KEY `specs_id` (`specs_id`),
  KEY `spu_id` (`spu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb3 COMMENT='规格属性表'

这是我司的 :smirk:

2年前 评论
laradocs 2年前
frans (楼主) 2年前
SammlHui 2年前
wxf666 2年前
mingzaily 2年前
wxf666 2年前

只要有人下单且付钱,则,此时,需要修改sku的锁定库存字段,进行扣减。 实际这个字段可以设成允许负数,这样,发货时库存不足,先补库存到正数,然后再发货。 否则,会导致库存计算错误。

2年前 评论

楼主,另外一个帖子有人问

如果要做数据分析,比如某个颜色的销量占比,排行

楼主的 SQL 会怎么写呢?

2年前 评论

能不能照顾一下菜鸟,给几条每个表的测试数据哈哈,光给sql菜鸟很吃力,还有同问,当想统计某个颜色销量占比,排行什么的sql怎么写

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!