人人都可写商城-商品规格/SKU设计方案,避免篇幅超级长,将分为六讲。

某东截个图

产品sku分析该怎么分析(人人都可写商城-商品规格)(1)

特意挑选,搞定编程,轻松购买无压力

如图,这是一个商品详情页,它包括商品名称、价格、描述、规格等等数据信息。我们应该如何把这些数据存储到数据库,如何设计数据表,是一个很关键的问题。好的设计将大大减少开发、维护、运营等成本。

概念普及: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. 不拼爹,靠自己,编程是一条不错的路。

作者:xiaoyin199

来源:攸米教育

本文原创发布于攸米教育 ,转载请注明出处,谢谢合作

,