资讯专栏INFORMATION COLUMN

电商系统设计之商品 (上)

wuyangnju / 1317人阅读

摘要:如果设计不合理例如商品添加很简单,但是修改商品就很复杂。在前期设计上我们要尽量避免这些坑谢谢你看到这里,希望我的文章能够帮助到你。

电商大伙每天都在用,类似某猫,某狗等。
电商系统设计看似复杂又很简单,看似简单又很复杂
本章适合初级工程师及中级工程师细看,大佬请随意
前言

商品的设计是电商系统中占据重要地位,如何设计出高扩展,高性能的商品系统并非一件简单的事情,我的设计是观摩互联网各大佬的设计后自行研究的,并非完全正确,但也不完全错误,现在我设计的这套电商系统已经在使用,如果在逻辑上遇到什么问题,会及时修改我关于电商系统相关文章的设计思想部分。

元素


见上图,本次我们先讲解下系统规格与自定义规格、系统属性与自定义属性的关于及其他们存在的意义。

SPU
SPU(Standard Product Unit)标准化产品单元

什么叫标准化产品单元?

抛弃标准化一词来看,产品单元?就是以一个产品为一个单位。例如你是手记销售商,你在厂家进货的时候说我要iphonex 100部型号随意规格随意,进货的时候没考虑到内存或者屏幕尺寸,这个时候你就把iphonex这个商品当作一个单位。这就是产品单位。再谈标准化,只是一些人或一个人制定的这么一个标准,所以称为标准化产品单元,不要拿百度百科上的解释反驳我,我只是用更通俗易懂的方式解释一下SPU。

例如iphonex的价格也不同的地方,分别为iphonex 64g 是8888,iphonex 256g是18888。这个时候我们不能建立2个spu去管理这2个商品。这个时候就需要用到spu的概念了。

SKU
SKU(Stock Keeping Unit)库存量单元

什么叫库存量单位?

字面意思来看,库存则是指的某个商品的某个规格还有多少件,这个时候就不能只针对商品了。上面的例子iphonex有2个不同规格的商品,这个时候无法计算其每个规格的库存(创建2个商品可是不切实际,未来管理会很复杂,就例如安踏的跑鞋有十几个尺码,难道要创建十几个商品吗?),此时只能针对当前商品再创建子商品,我们叫它规格,例如iphonex 有 存储和颜色2个规格

有木有发现还是有点问题?那具体的存储大小与具体颜色该如何表达呢?这个时候需要创建规格的子商品,我们称他为属性

这个每个属性的结合则就是一个新的商品,我们称它为SKU,一个SPU对应着N个SKU


这样就生成了N个商品

iphonex 64G白色

iphonex 32G黑色

iphonex 256G白色 等等...

系统规格/属性

为什么要设立系统规格属性呢?


盗用一张淘宝的图,以上都是根据分类品牌设定好的规格及属性

主要是为了方便商家添加商品及其对商品的规格属性进行统一的管理,当然一个电商系统在前期运营的情况下尽量减少系统属性规格的使用(方便商家入住嘛)。

自定义属性就不用说了。不让商家添加自己的规格和尺码什么的怎么能行?

数据

具体数据表的设计如下

product

商品表 (spu表)

CREATE TABLE `product` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "商品标题",
  `category_id` int(11) NOT NULL COMMENT "商品分类编号",
  `mer_id` int(11) NOT NULL COMMENT "商家编号",
  `freight_id` int(11) DEFAULT NULL,
  `type_id` tinyint(4) NOT NULL COMMENT "类型编号",
  `sketch` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "简述",
  `intro` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "商品描述",
  `keywords` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "商品关键字",
  `tags` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "标签",
  `marque` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "商品型号",
  `barcode` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "仓库条码",
  `brand_id` int(11) NOT NULL COMMENT "品牌编号",
  `virtual` int(11) NOT NULL DEFAULT "0" COMMENT "虚拟购买量",
  `price` decimal(8,2) NOT NULL COMMENT "商品价格",
  `market_price` decimal(8,2) NOT NULL COMMENT "市场价格",
  `integral` int(11) NOT NULL DEFAULT "0" COMMENT "可使用积分抵消",
  `stock` int(11) NOT NULL COMMENT "库存量",
  `warning_stock` int(11) NOT NULL COMMENT "库存警告",
  `picture_url` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "封面图",
  `posters` varchar(125) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `status` tinyint(4) NOT NULL COMMENT "状态 -1=>下架,1=>上架,2=>预售,0=>未上架",
  `state` tinyint(4) NOT NULL DEFAULT "0" COMMENT "审核状态 -1 审核失败 0 未审核 1 审核成功",
  `is_package` enum("0","1") COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "0" COMMENT "是否是套餐",
  `is_integral` enum("0","1") COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "0" COMMENT "是否是积分产品",
  `sort` int(11) NOT NULL DEFAULT "99" COMMENT "排序",
  `deleted_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
system_attribute

系统规格表

CREATE TABLE `system_attribute` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `category_id` int(11) NOT NULL COMMENT "商品类别编号",
  `name` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "属性名称",
  `sort` int(11) NOT NULL DEFAULT "999" COMMENT "排列次序",
  PRIMARY KEY (`id`),
  KEY `product_attribute_category_id_name_index` (`category_id`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
system_attribute_option

系统属性表

CREATE TABLE `product_attribute_option` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "选项名称",
  `attr_id` int(11) NOT NULL COMMENT "属性编码",
  `sort` int(11) NOT NULL DEFAULT "999" COMMENT "排序",
  PRIMARY KEY (`id`),
  KEY `product_attribute_option_name_attr_id_index` (`name`,`attr_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
product_attribute_and_option

规格属性绑定表

CREATE TABLE `product_attribute_and_option` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `sku_id` int(11) NOT NULL COMMENT "sku编码",
  `option_id` int(11) NOT NULL DEFAULT "0" COMMENT "属性选项编码",
  `attribute_id` int(11) NOT NULL COMMENT "属性编码",
  `sort` int(11) NOT NULL DEFAULT "999" COMMENT "排序",
  `supplier_option_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `product_attribute_and_option_sku_id_option_id_attribute_id_index` (`sku_id`,`option_id`,`attribute_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6335 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
product_sku

sku表

CREATE TABLE `product_sku` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL COMMENT "商品编码",
  `name` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "sku名称",
  `img` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "主图",
  `price` decimal(8,2) NOT NULL COMMENT "价格",
  `stock` int(11) NOT NULL DEFAULT "0" COMMENT "库存",
  `code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "商品编码",
  `barcode` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "商品条形码",
  `data` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "sku串",
  PRIMARY KEY (`id`),
  KEY `product_sku_name_product_id_index` (`name`,`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=530 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
product_attribute

自定义规格表

CREATE TABLE `product_attribute` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL COMMENT "商品编码",
  `name` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "规格名称",
  `sort` int(11) NOT NULL DEFAULT "999" COMMENT "排序",
  PRIMARY KEY (`id`),
  KEY `product_supplier_attribute_name_product_id_index` (`name`,`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
致谢

其实在商品的设计层面看懂后还是很简单的,后续文章主要讲解的更多的是这些数据该如何存储更合理。如果设计不合理例如商品添加很简单,但是修改商品就很复杂。在前期设计上我们要尽量避免这些“坑”

谢谢你看到这里,希望我的文章能够帮助到你。有什么问题可以在评论区留言,我看到会第一时间回复。谢谢

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28993.html

相关文章

  • 电商系统设计商品[番外篇]

    摘要:前言这是电商系统设计系列在商品设计这块的最后一篇文章。电商系统商品相关的文章已经到了尾声如果有其他商品相关的文章需要编写可以私信联系我毕竟我也是公司员工写这些文章并不是我的工作,只是记录我的职业生涯。 showImg(https://segmentfault.com/img/bVbePdh?w=1260&h=628); 前言 这是电商系统设计系列在商品设计这块的最后一篇文章。以下是其他...

    crossoverJie 评论0 收藏0
  • 电商系统设计购物车

    摘要:可扩展性百度百科的定义是设计良好的代码允许更多的功能在必要时可以被插入到适当的位置中。正常购物车商品优惠券都是独立的系统及功能,不要看做商品在购物车内。可维护性百度百科的定义是系统的可维护性是衡量一个系统的可修复恢复性和可改进性的难易程度。 showImg(https://segmentfault.com/img/bVbcqJE?w=506&h=326); 本章适合初级工程师及中级工程...

    TigerChain 评论0 收藏0
  • 电商系统设计商品 (中)

    摘要:我一直在说电商是一个既简单又复杂的东西本章我们再一次深度解析电商系统商品设计的更多逻辑与实现。品牌无需关联到内,道理很简单,当前的是归属与苹果公司,自然而然下面的规格都属于苹果了。 showImg(https://segmentfault.com/img/bVbdtuc?w=1824&h=1028); 电商大伙每天都在用,类似某猫,某狗等。电商系统设计看似复杂又很简单,看似简单又很复杂...

    banana_pi 评论0 收藏0
  • 电商系统设计商品 (下)

    摘要:订单号用户商品标题商品价格商品封面图商品其他属性小明爱疯手机其他属性像上表中设计,有人会问了那关联的意义何在呢我的回答是保持数据关联,虽然商户有可能改变商品属性,但作为一名程序员,应该尽可能的记录用户所有的动作。 showImg(https://segmentfault.com/img/bVbdtuc?w=1824&h=1028); 电商大伙每天都在用,类似某猫,某狗等。电商系统设计看...

    shiguibiao 评论0 收藏0
  • 电商系统设计用户系统

    摘要:致谢感谢你们看到这里,下一篇我会讲一下关于电商系统的商品设计的部分。 showImg(https://segmentfault.com/img/bVbclTs?w=500&h=329); 电商大伙每天都在用,类似某猫,某狗等。电商系统设计看似复杂又很简单,看似简单又很复杂本章适合初级工程师及中级工程师细看,大佬请随意 前言 设计以以下为工具讲起 PHP为开发语言 基于Laravel框...

    lindroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<