商城SPU、SKU数据库设计
创始人
2024-05-31 03:06:13
0

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;

关联
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;

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...