mysql如何设计商品表结构_mysql电商项目入门
发布时间 - 2026-02-03 00:00:00 点击率:次商品基础字段应精简:仅保留id、name、category_id、price(DECIMAL)、cost_price、status、created_at、updated_at;规格拆至product_spec和product_sku表;图片和详情分离存储;状态管理用publish_status+published_at;删除改用is_deleted软删。
商品基础字段怎么定:别一上来就加几十个字段
商品表最怕“想太多”,比如提前加 sku_weight、warehouse_code 这类后期才用的字段。初期只保留强依赖字段:id、name、category_id、price、cost_price、status(0下架/1上架)、created_at、updated_at。其中 price 用 DECIMAL(10,2),不是 FLOAT——浮点数会导致价格计算偏差,比如 0.1 + 0.2 ≠ 0.3。
常见错误是把所有属性塞进一张表:颜色、尺寸、

product_spec 表存规格项,product_sku 表存具体 SKU,主表只管“商品本体”。
SKU 和规格怎么关联:避免用字符串拼接做组合键
很多新手用 CONCAT(color, '-', size) 当 SKU 编码,再存在 product_sku 表里当主键。问题来了:查询某颜色所有尺码时得用 LIKE 'red-%',没法走索引;改规格名还得批量更新字符串。
更稳的做法是:
-
product_spec表存独立规格项:id、spec_key(如 'color')、spec_value(如 'red') -
product_spec_value表记录商品与规格值的多对多关系:product_id、spec_value_id -
product_sku表用自增id主键,通过JSON或关联表存规格组合(推荐后者,便于约束和查询)
MySQL 5.7+ 支持 JSON_CONTAINS,但复杂查询性能差,别依赖它做核心筛选逻辑。
图片和详情怎么存:别把大字段塞进主表
product 主表里加 detail_html 或 images_json 字段,看着省事,实际会拖慢所有 SELECT * 查询,还影响备份速度和主从同步延迟。
建议分离:
- 图片地址统一存
product_image表,字段:product_id、url、sort_order、is_primary - 富文本详情存
product_detail表,用MEDIUMTEXT,按需 JOIN - 如果要用全文检索,
name和brief单独建FULLTEXT索引,别对detail_html建
另外,图片 URL 别存相对路径或本地文件路径,必须是可直接访问的绝对 URL,否则前端渲染就报 404。
状态和上下架逻辑:别只靠 status 字段硬控制
单纯用 status 字段区分“上架/下架”,上线后很快会遇到新需求:定时上架、草稿态、审核中、库存为 0 时自动下架……这时候光靠一个字段撑不住。
更可持续的设计是:
- 加
publish_status(draft/pending/published/failed)管发布流程 - 加
published_at时间戳,配合定时任务检查是否到时间自动切状态 - 库存相关下架逻辑放到应用层或触发器里判断,不要在 SELECT 商品列表时动态算
stock > 0——容易误判,尤其高并发减库存场景
还有一个隐形坑:商品删除。永远别用 DELETE FROM product,而是加 is_deleted TINYINT DEFAULT 0,否则订单、评价、日志里的外键全断,历史数据就废了。
# mysql
# html
# js
# 前端
# json
# go
# 编码
# ai
# cos
# red
# Float
# select
# 字符串
# delete
# 并发
# default
# 下架
# 上架
# 塞进
# 主键
# 看着
# 来了
# 太多
# 这类
# 要用
# 还有一个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速完成中国万网建站详细流程?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
如何在七牛云存储上搭建网站并设置自定义域名?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
中山网站制作网页,中山新生登记系统登记流程?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Linux后台任务运行方法_nohup与&使用技巧【技巧】
如何在新浪SAE免费搭建个人博客?
Python文件异常处理策略_健壮性说明【指导】
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
微信h5制作网站有哪些,免费微信H5页面制作工具?
网易LOFTER官网链接 老福特网页版登录地址
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何在宝塔面板中修改默认建站目录?
JavaScript中的标签模板是什么_它如何扩展字符串功能
网站制作大概多少钱一个,做一个平台网站大概多少钱?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
微信小程序 input输入框控件详解及实例(多种示例)
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
高防服务器租用首荐平台,企业级优惠套餐快速部署
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Python函数文档自动校验_规范解析【教程】
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何使用模型观察者?(Observer代码示例)
如何构建满足综合性能需求的优质建站方案?
如何快速生成ASP一键建站模板并优化安全性?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
南京网站制作费用,南京远驱官方网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
高性价比服务器租赁——企业级配置与24小时运维服务
简历在线制作网站免费版,如何创建个人简历?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Laravel如何创建自定义中间件?(Middleware代码示例)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
canvas 画布在主流浏览器中的尺寸限制详细介绍
活动邀请函制作网站有哪些,活动邀请函文案?
昵图网官网入口 昵图网素材平台官方入口

