电商系统商品表设计:基于 “主表 + 子表” 的灵活方案

在电商、零售等业务系统中,商品是核心实体,但商品类型往往存在显著差异 —— 例如实物商品需记录重量、库存,虚拟商品需管理激活码、有效期,生鲜商品需追踪产地与保鲜条件。若采用单表存储所有商品,会导致 “空字段冗余”“表结构频繁修改” 等问题;若采用完全独立的多商品表,又会失去商品实体的统一性,增加跨类型查询复杂度。​

“主表 + 子表” 设计方案通过 “共性字段集中存储、个性字段分类隔离”,平衡了 “数据规范性” 与 “业务灵活性”,成为解决多类型商品存储的最优选择之一。本文将详细拆解该方案的表结构设计、查询实现与优化策略。​

一、“主表 + 子表” 设计方案核心:分层存储差异​

1.1 表结构定义​

“主表 + 子表” 的核心逻辑是:主表存储所有商品的共性字段,子表按商品类型存储专属个性字段。以下以 “实物商品” 与 “虚拟商品” 为例,定义完整表结构(基于 MySQL 语法)。​

(1)主表:product(统一管理商品共性属性)​

主表作为商品的 “统一入口”,包含所有商品共有的核心字段,确保商品实体的整体性。​

字段名​

数据类型​

长度 / 精度​

约束条件​

说明​

product_id​

BIGINT​

-​

PRIMARY KEY​

商品唯一标识(推荐用雪花算法生成,确保全局唯一)​

name​

VARCHAR​

255​

NOT NULL​

商品名称(如 “iPhone 15 Pro”“腾讯视频年卡”)​

price​

DECIMAL​

10,2​

NOT NULL​

商品售价(如 9999.00 元、218.00 元)​

category_id​

INT​

-​

NOT NULL​

商品分类 ID(关联分类表category,如 “手机”“虚拟充值”)​

product_type​

TINYINT​

-​

NOT NULL​

商品类型(1 = 实物商品,2 = 虚拟商品,3 = 生鲜商品等,用于关联子表)​

status​

TINYINT​

-​

NOT NULL DEFAULT 0​

商品状态(0 = 下架,1 = 上架,2 = 预售,控制商品是否可售卖)​

create_time​

DATETIME​

-​

NOT NULL DEFAULT NOW()​

商品创建时间(用于排序、统计)​

update_time​

DATETIME​

-​

NOT NULL DEFAULT NOW() ON UPDATE NOW()​

商品更新时间(自动更新)​

(2)子表 1:product_physical(实物商品专属属性)​

仅存储实物商品特有的字段,通过product_id与主表关联,避免对虚拟商品造成字段冗余。​

字段名​

数据类型​

约束条件​

说明​

i

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值