电商系统设计之商品 (中)
电商大伙每天都在用,类似某猫,某狗等。
电商系统设计看似复杂又很简单,看似简单又很复杂
本章适合初级工程师及中级工程师细看,大佬请随意
前言
上一篇文章我们讲了关于电商SPU,SKU的概念,以及为何要设计自定义属性与自定义规格并解释了何时可以用到它们。我一直在说电商是一个既简单又复杂的东西,本章我们再一次深度解析电商系统商品设计的更多逻辑与实现。
关联
SPU对应多个SKU,SPU实际就是主商品表,类似于iphonex这款手机,而SKU则是这个商品绑定的规格表,类似与iphonex 红色款,iphonex 黑色款等。
而主表与规格表也关联了其他表
专辑
在淘宝的逻辑中,商家可为商品添加视频和图片,可为每个sku添加图片。我们称为专辑。将一组图片及视频类似歌手作家出专辑一样,绑定到商品表和sku表上
product_album
CREATE TABLE `product_album` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `product_id` int(11) NOT NULL COMMENT '商品编号', `name` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称', `url` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '图片地址', `size` int(11) DEFAULT NULL COMMENT '视频大小', `intro` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '图片介绍', `sort` int(11) NOT NULL DEFAULT '999' COMMENT '排序', `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '图片状态', `state` tinyint(4) NOT NULL DEFAULT '0' COMMENT '资源类型 0=>图片 1=>视频', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
品牌
每个商品都归属与一个品牌,例如iphonex归属与苹果公司,小米8归属与小米公司一样。品牌无需关联到sku内,道理很简单,当前的sku是iphonex归属与苹果公司,自然而然iphonex下面的规格都属于苹果了。
product_brand
CREATE TABLE `product_brand` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `product_category_id` int(11) NOT NULL COMMENT '商品类别编号', `name` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '品牌名称', `image_url` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '图片url', `sort` int(11) NOT NULL DEFAULT '999' COMMENT '排列次序', `status` tinyint(4) NOT NULL COMMENT '状态', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `product_brand_name_unique` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
类目
有时品牌不仅仅归属与一个类目,还是以iphonex举例,他是一部手机又是苹果产品但他又是一个音乐播放器。注意,这个时候不要将当前品牌绑定到三个类目上,如果你这样做了,未来的可维护性会很低。应该每个类目中绑定相同的品牌名称,你一定会问那这样数据垃圾不就产生了吗?我没有具体数据给你展现这样做的好处。
但从业务说起,现在我需要统计每个类目下商品的购买数去做用户画像,你时你要如何区分当前这个商品到底是哪个类目下呢?无法区分,因为你将品牌绑定到了3个类目下,不知用户到底是通过哪个类目点击进去购买的。
再者很多品牌公司不仅仅是做一个商品,类似索尼做mp3也做电视,手机,游戏机等。所以类目对应多个品牌,品牌应对应多个类目并非关联多个类目
product_category
CREATE TABLE `product_category` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类表', `pid` int(11) NOT NULL COMMENT '父分类编号', `cover` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '封面图', `index_block_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '首页块级状态 1=>显示', `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 1=>正常', `sort` int(11) NOT NULL DEFAULT '999' COMMENT '排序', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
致谢
下一节我们讲用户购买商品后的商品设计及后台操作的设计,一个好的程序员应该考虑到自己人如何去添加商品及管理它们。不能乐了用户苦了运营把?