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_weightwarehouse_code 这类后期才用的字段。初期只保留强依赖字段:idnamecategory_idpricecost_pricestatus(0下架/1上架)、created_atupdated_at。其中 priceDECIMAL(10,2),不是 FLOAT——浮点数会导致价格计算偏差,比如 0.1 + 0.2 ≠ 0.3。

常见错误是把所有属性塞进一张表:颜色、尺寸、

材质全用 JSON 存。这会让搜索、分页、索引失效。正确做法是拆出 product_spec 表存规格项,product_sku 表存具体 SKU,主表只管“商品本体”。

SKU 和规格怎么关联:避免用字符串拼接做组合键

很多新手用 CONCAT(color, '-', size) 当 SKU 编码,再存在 product_sku 表里当主键。问题来了:查询某颜色所有尺码时得用 LIKE 'red-%',没法走索引;改规格名还得批量更新字符串。

更稳的做法是:

  • product_spec 表存独立规格项:idspec_key(如 'color')、spec_value(如 'red')
  • product_spec_value 表记录商品与规格值的多对多关系:product_idspec_value_id
  • product_sku 表用自增 id 主键,通过 JSON 或关联表存规格组合(推荐后者,便于约束和查询)

MySQL 5.7+ 支持 JSON_CONTAINS,但复杂查询性能差,别依赖它做核心筛选逻辑。

图片和详情怎么存:别把大字段塞进主表

product 主表里加 detail_htmlimages_json 字段,看着省事,实际会拖慢所有 SELECT * 查询,还影响备份速度和主从同步延迟。

建议分离:

  • 图片地址统一存 product_image 表,字段: product_idurlsort_orderis_primary
  • 富文本详情存 product_detail 表,用 MEDIUMTEXT,按需 JOIN
  • 如果要用全文检索,namebrief 单独建 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


相关推荐: Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  网站制作软件有哪些,制图软件有哪些?  香港服务器租用费用高吗?如何避免常见误区?  简历在线制作网站免费版,如何创建个人简历?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  米侠浏览器网页背景异常怎么办 米侠显示修复  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何在VPS电脑上快速搭建网站?  java ZXing生成二维码及条码实例分享  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何用西部建站助手快速创建专业网站?  怎样使用JSON进行数据交换_它有什么限制  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何用免费手机建站系统零基础打造专业网站?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  WordPress 子目录安装中正确处理脚本路径的完整指南  IOS倒计时设置UIButton标题title的抖动问题  如何在搬瓦工VPS快速搭建网站?  iOS正则表达式验证手机号、邮箱、身份证号等  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何快速打造个性化非模板自助建站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  iOS发送验证码倒计时应用  iOS UIView常见属性方法小结  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  nginx修改上传文件大小限制的方法  中山网站制作网页,中山新生登记系统登记流程?  如何用腾讯建站主机快速创建免费网站?  深入理解Android中的xmlns:tools属性  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何在企业微信快速生成手机电脑官网?  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何在云虚拟主机上快速搭建个人网站?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  LinuxShell函数封装方法_脚本复用设计思路【教程】  清除minerd进程的简单方法  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何在阿里云域名上完成建站全流程?  JS弹性运动实现方法分析  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法