商品规格数据结构与商品表结构分析

本文详细分析了商品规格数据结构,包括规格属性、横表与竖表设计,以及SpecGroup和SpecParam表结构。商品表结构部分,讨论了SPU与SKU的概念,并解析了SPU表和SKU表的结构设计,强调了规格参数在商品表中的重要性,以及垂直拆分和水平拆分的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 商品规格数据结构

商品中都有属性,不同商品,属性往往不同。

1.1 规格属性内容

在生活中,我们很容易发现,虽然商品不同,规格不同。但是统一分类的商品,比如都是手机,其规格是一致的,但是值不一样。也就是说,商品的规格参数应该是与分类绑定的。每一个分类都有统一的规格参数模板,但不同商品其参数值可能不同

因此:

  • 规格参数的名称(key)与值(value)应该分开来保存;
  • 一个分类,对应一套规格参数模板,只有规格参数key,没有值;
  • 一个分类对应多个商品,每个商品的规格值不同,每个商品对应一套规格的值。

1.2 横表与数表

值我们暂且不管,新增商品时,再来填写规格参数值即可,我们先思考规格参数模板(key)该如何设计。
先看下规格参数的结构:
在这里插入图片描述

  • 规格数据首先要分组,组内再有不同的规格参数
  • 不同分类,其分组名称也不同
  • 不停分类,组内属性也不同
    这样就意味着:有多少分类,就有多少分组。
    如果按照传统设计,我们会以规格参数作为数据库字段名。如品牌、型号都是字段,那么表的字段就会无限多。这样的表称为横表。一条信息,描述所有数据。例如:
    在这里插入图片描述
    我们不这样做,我们一条信息,只描述一条规格属性,也就是把规格参数作为字段的值,而非字段本身。这样的设计称为竖表设计。例如:
    在这里插入图片描述
    不过,规格和规格组也要单独保存,都采用竖表设计。所以我们有两张表:
    在这里插入图片描述
    如图:
    在这里插入图片描述

1.3 表结构

1.3.1 SpecGroup规格组

规格参数分组表:tb_spec_group

CREATE TABLE `tb_spec_group` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `cid` bigint(20) NOT NULL COMMENT '商品分类id,一个分类下有多个规格组',
  `name` varchar(50) NOT NULL COMMENT '规格组的名称',
  PRIMARY KEY (`id`),
  KEY `key_category` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='规格参数的分组表,每个商品分类下有多个规格参数组';

在这里插入图片描述

1.3.2 SpecParam规格参数

规格参数表:tb_spec_param

CREATE TABLE `tb_spec_param` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `cid` bigint(20) NOT NULL COMMENT '商品分类id',
  `group_id` bigint(20) NOT NULL,
  `name` varchar(255) NOT NULL COMMENT '参数名',
  `numeric` tinyint(1) NOT NULL COMMENT '是否是数字类型参数,true或false',
  `unit` varchar(255) DEFAULT '' COMMENT '数字类型参数的单位,非数字类型可以为空'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值