一文解读商品规格细则 商品规格是什么

某东截个图

一文解读商品规格细则 商品规格是什么

文章插图
特意挑选,搞定编程,轻松购买无压力
概念普及:SPU和SKU
  1. SPU:Standard Product Unit (标准产品单位),一组具有共同属性的商品集 。
    1. 如上图:mac电脑,就是一个SPU(它不是一个商品,而是一组),它们都叫:“……MacBook Pro……”,但是它会有很多配置的区分 。
    2. SPU是一个抽象的商品集概念,一般后台为:商品管理、商品列表 。
  2. SKU:Stock Keeping Unit(库存量单位),因具体特性不同而细分的每个商品(SPU),也叫商品规格 。
    1. SKU才是具体要销售的商品 。
    2. 每一个SKU的价格、库存可能会不一样,用户购买的是SKU而不是SPU
数据库设计分析
弄清楚了SPU和SKU的概念区分,设计数据库表就会很简单了,具体数据表设计方案请仔细阅读 。
  1. 商品表(ymkj_goods)
存储商品的通用信息,商品图片为一对多关系,这里采取逗号分隔方式存储 。因为:①商品图片不需要查询设计 。②避免联查的问题 。③少设计一个表复杂度就降低一倍 。
CREATE TABLE `ymkj_goods` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品id',`goods_name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',`user_id` char(32) NOT NULL COMMENT '创建人',`category_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '商品分类id',`category_ids` varchar(45) NOT NULL COMMENT '冗余字段,用来存储,分类全层级id逗号拼接后的字符串 。为的是前端展示后端处理方便',`images` varchar(255) NOT NULL COMMENT '逗号隔开id',`selling_point` varchar(255) NOT NULL COMMENT '商品卖点',`spec_type` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '商品规格类型(10单规格 20多规格)',`deduct_stock_type` tinyint(3) unsigned NOT NULL DEFAULT '20' COMMENT '库存计算方式(10下单减库存 20付款减库存)',`content` longtext NOT NULL COMMENT '商品详情',`sales_initial` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '初始销量,造假显示',`sales_actual` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '实际销量',`order` int(11) unsigned NOT NULL DEFAULT '100' COMMENT '商品排序(数字越小越靠前)',`delivery_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '配送模板id',`status` tinyint(3) unsigned NOT NULL DEFAULT '20' COMMENT '商品状态(10上架 20下架)',`created_at` timestamp NULL DEFAULT NULL,`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,`deleted_at` timestamp NULL DEFAULT NULL,PRIMARY KEY (`id`),KEY `category_id` (`category_id`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COMMENT='商品'
  1. 商品SKU表(ymkj_goods_sku)
存储商品对应的SKU信息,一对多关系 。spec_sku_id这个字段存储的是商品的具体规格值的关联id,多个规格(属性值)用下划线分隔 。spec_sku_id对应两个直观的对应解释:①spec_sku_id对应的是ymkj_goods_spec_rel表中的spec_value_id这个字段值多个相连②spec_sku_id对应的是ymkj_spec_value表主键多个相连 。
CREATE TABLE `ymkj_goods_sku` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品规格id/skuid',`goods_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '商品id',`goods_no` varchar(100) NOT NULL DEFAULT '' COMMENT '商品编码',`price` int(10) NOT NULL DEFAULT '0' COMMENT '商品价格(分)',`line_price` int(10) NOT NULL COMMENT '划线价(分)',`stock_num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '当前库存数量',`sku_sales` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'sku商品销量',`weight` int(10) NOT NULL DEFAULT '0' COMMENT '商品重量(g)',`spec_sku_id` varchar(255) NOT NULL DEFAULT '' COMMENT '商品sku标识',`created_at` timestamp NULL DEFAULT NULL,`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`),KEY `goods_id` (`goods_id`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COMMENT='商品SKU'
  1. 商品规格关系表(ymkj_goods_spec_rel)
【一文解读商品规格细则 商品规格是什么】商品对应的规格关系,存储商品对应的所有规格/属性,不区分顺序,顺序通过ymkj_goods_sku表的spec_sku_id字段区分 。spec_id存储的是ymkj_spec表的主键id,spec_value_id存储的是ymkj_spec_value表主键id 。
CREATE TABLE `ymkj_goods_spec_rel` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',`goods_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '商品id',`spec_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '规格组id',`spec_value_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '规格值id',`created_at` timestamp NULL DEFAULT NULL,`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COMMENT='商品规格关系'
  1. 规格组/属性 名称表(ymkj_spec)
存储所有的属性名称,为的是相同属性名称不在重复创建 。实际操作中,存在则关联使用,不存在则创建并关联使用,这个需要自己的业务设计 。
CREATE TABLE `ymkj_spec` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格组id',`spec_name` varchar(255) NOT NULL DEFAULT '' COMMENT '规格组名称',`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COMMENT='规格组/属性(名称)'
  1. 规格组/属性 值表(ymkj_spec_value)
存储所有的属性值,为的是相同属性值不在重复创建 。实际操作中,存在则关联使用,不存在则创建并关联使用,这个需要自己的业务设计 。
CREATE TABLE `ymkj_spec_value` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '规格值id',`spec_value` varchar(255) NOT NULL DEFAULT '' COMMENT '规格组名称',`spec_id` int(11) NOT NULL COMMENT '规格id',`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',PRIMARY KEY (`id`),KEY `spec_id` (`spec_id`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COMMENT='规格组/属性(值)' 总结
  1. 搞清楚关系,方案很重要,有了方案,实现就迎刃而解 。
  2. 写代码并不难,一层窗户纸,不要怕,直接干 。
  3. 从零学编程也没有那么遥不可及,见过很多从零学编程的都干的挺好,相信自己 。
  4. 不拼爹,靠自己,编程是一条不错的路 。