电商系统,剖析商品模块中商品表(spu)、规格表(sku)的数据库是如何设计的

在这里插入图片描述
不管开发B2C、B2B2C、还是B2B等电商项目,不可避免的要实现上面的详情页面。页面展示中,商品的名称、商品的主图、商品的详情都容易搞定。就是商品种类繁多后,每一种商品具有不同的规格,不同的规格就会对应不同的价格和库存,这点比较难搞。以上面图为例,不同的机身颜色和存储容量的组合,会出现不同的库存以及不同的价格。

下面针对sku如何实现这个功能,而不相干的字段就屏蔽掉。
在这里插入图片描述
分类的数据库表,商品太多,一般会按照分类进行管理。比如分手机的分类、电脑的分类。

CREATE TABLE `category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父级主键',
  `category_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分类名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='分类表';

在这里插入图片描述
属性key的数据库表,一般一个分类,会拥有差不多的属性。比如手机,都有内存、颜色等属性。

CREATE TABLE `attribute_key` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `category_id` int(255) unsigned NOT NULL COMMENT '分类外键',
  `attribute_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '属性ke值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='属性key表';

在这里插入图片描述
属性value的数据库表,根据数据库设计的范式原则,属性及属性值会分开不同的表进行存储,所以会多一个表来存属性值。

CREATE TABLE `attribute_value` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `attribute_id` int(10) unsigned NOT NULL COMMENT '属性key外键',
  `attribute_value` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '属性value值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='属性value表';

在这里插入图片描述
有了上面这些前提表,这个时候后台新增商品的时候,就需要商品表和规格表。新增商品信息spu及规格信息sku,先存储goods信息,存储成功后再存储goods_specs。一起是一个事务。

CREATE TABLE `goods` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `category_id` int(10) unsigned NOT NULL COMMENT '分类外键',
  `attribute_list` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '规格列表',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='商品表';

在这里插入图片描述

CREATE TABLE `goods_specs` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `goods_id` int(10) unsigned NOT NULL COMMENT '商品外键',
  `goods_specs` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品规格',
  `goods_stock` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品库存',
  `goods_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '商品价格',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='规格表';

在这里插入图片描述
这样子,我们就把把不同商品的不同规格存储到数据库了

在这里插入图片描述
当前端点击不同的机身颜色、存储容量后,前端带着goods_id和goods_specs字段去请求goods_specs表获取库存和价格,类似执行了下面这条sql语句

SELECT * FROM goods_specs WHERE goods_id='1' AND goods_specs='{"内存": "128GB", "颜色": "黑色"}';

在这里插入图片描述
整体逻辑跑通后,剩下的就是在这个基础上不断的优化完善,最终达到产品想要的效果。

购物商城的Spu-Sku数据库设计主要是为了管理商品的库存和销售信息。Spu(Standard Product Unit)是商品的标准产品单位,通常指的是一组具有相同特征但可能有不同规格的商品,例如同一款衣服的不同颜色或尺码。Sku(Stock Keeping Unit)是商品的库存管理单位,是对Spu的具体细分,用于区分不同规格或属性的商品。 在数据库设计中,可以建立两个主要的表:Spu表和Sku表。Spu表用于存储商品的基本信息,包括商品的名称、描述、品牌、分类等。此外,可以为Spu表添加一些扩展字段,例如商品的图片、销售状态等。 Sku表用于存储商品的具体规格和库存信息,其中包括Spu的外键关联、商品的属性、规格、价格和库存数量等。通过外键关联,可以将Sku与其对应的Spu关联起来,实现SpuSku的多对一关系。同时,可以在Sku表中添加一些扩展字段,例如商品的条形码、上架时间等。 为了提高查询效率,可以在Sku表中添加索引,例如根据商品的价格、库存数量、销售状态等字段进行索引,以快速获取满足条件的商品信息。 此外,为了提高系统的可维护性和可扩展性,可以添加一些辅助表,例如属性表和属性值表,用于管理商品的属性信息。属性表用于存储商品的属性名称,属性值表用于存储属性的具体取值范围。 总之,购物商城的Spu-Sku数据库设计需要考虑SpuSku之间的关联关系,以及商品的基本信息和规格信息的存储和管理。通过合理的设计和优化索引,可以提高系统的查询性能和用户体验。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员buddha2080

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值