上一篇
场景引入:
凌晨3点,你正喝着第三杯咖啡☕,突然发现商城后台的"手机"类目下竟然混进了"榴莲千层蛋糕"🍰——原来是商品分类表设计出了问题!别担心,今天我们就用最接地气的方式,聊聊如何设计一个「既抗造又聪明」的商品分类表。
CREATE TABLE `category` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '分类ID', `name` VARCHAR(50) NOT NULL COMMENT '分类名称(如:数码家电)', `level` TINYINT DEFAULT 1 COMMENT '层级(1/2/3级)', `parent_id` INT DEFAULT 0 COMMENT '父分类ID(0表示一级)', `sort` INT DEFAULT 0 COMMENT '同级排序', `icon` VARCHAR(255) COMMENT '分类图标', `is_show` TINYINT DEFAULT 1 COMMENT '是否展示(1是 0否)', PRIMARY KEY (`id`), INDEX `idx_parent` (`parent_id`) ) ENGINE=InnoDB;
💡 设计要点:
level
字段能快速过滤层级(比如首页只展示1级分类) parent_id
加索引,查询子分类速度飞起🚀 CREATE TABLE `category_attr` ( `id` INT NOT NULL AUTO_INCREMENT, `category_id` INT NOT NULL COMMENT '关联分类ID', `attr_name` VARCHAR(50) NOT NULL COMMENT '属性名(如:颜色/内存)', `is_required` TINYINT DEFAULT 0 COMMENT '是否必填', PRIMARY KEY (`id`), INDEX `idx_category` (`category_id`) ) ENGINE=InnoDB;
🌰 使用场景:
手机分类下可以有「机身颜色📱」「存储容量💾」等属性,而服饰分类可能需要「尺码👕」「面料🧵」
CREATE TABLE `category_product` ( `id` INT NOT NULL AUTO_INCREMENT, `category_id` INT NOT NULL, `product_id` INT NOT NULL, `is_main` TINYINT DEFAULT 0 COMMENT '是否主分类(1个商品只有1个主分类)', PRIMARY KEY (`id`), UNIQUE KEY `uk_rel` (`category_id`,`product_id`), INDEX `idx_product` (`product_id`) ) ENGINE=InnoDB;
⚠️ 避坑提醒:
is_main
标记主要分类,方便统计报表 新增path
字段存储全路径(如:0,12,35
表示 数码→手机→安卓手机),查询子孙分类只需:
SELECT * FROM category WHERE path LIKE '0,12,%';
比递归查询快10倍不止⚡
对访问量大的分类(如「手机」「女装」),在Redis存储完整树形结构:
HSET category_tree 12 "{'name':'手机','children':[...]}"
在分类表增加product_count
字段,通过定时任务更新商品数量,避免实时COUNT(*)卡顿
Q:用户想快速找到「男士真皮商务皮鞋」怎么办?
A:设计「标签关联表」实现交叉查询:
-- 标签表 CREATE TABLE `tag` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(20) NOT NULL COMMENT '性别/材质/风格等' ); -- 分类-标签关联表 CREATE TABLE `category_tag` ( `category_id` INT NOT NULL, `tag_id` INT NOT NULL, PRIMARY KEY (`category_id`,`tag_id`) );
查询时组合条件:
SELECT * FROM products WHERE category_id IN ( SELECT category_id FROM category_tag WHERE tag_id IN (1,5,8) -- 男式+真皮+商务 )
Checklist ✅
下次再遇到「手机分类里卖蛋糕」的灵异事件,记得回来看看这篇指南哦!🎯 (2025-07最新实践)
本文由 满骏喆 于2025-07-28发表在【云服务器提供商】,文中图片由(满骏喆)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/466936.html
发表评论