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如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何获取免费开源的自助建站系统源码?
如何用搬瓦工VPS快速搭建个人网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何在万网自助建站中设置域名及备案?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
移动端脚本框架Hammer.js
Android仿QQ列表左滑删除操作
Android滚轮选择时间控件使用详解
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
零基础网站服务器架设实战:轻量应用与域名解析配置指南
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
如何用y主机助手快速搭建网站?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
如何快速搭建个人网站并优化SEO?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
网站页面设计需要考虑到这些问题
详解CentOS6.5 安装 MySQL5.1.71的方法
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel如何实现模型的全局作用域?(Global Scope示例)
Swift中swift中的switch 语句
如何快速搭建自助建站会员专属系统?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
详解Android——蓝牙技术 带你实现终端间数据传输
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何用PHP快速搭建高效网站?分步指南
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
魔方云NAT建站如何实现端口转发?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何打造高效商业网站?建站目的决定转化率
Windows Hello人脸识别突然无法使用
在线制作视频网站免费,都有哪些好的动漫网站?
Python自动化办公教程_ExcelWordPDF批量处理案例
如何用腾讯建站主机快速创建免费网站?
Laravel storage目录权限问题_Laravel文件写入权限设置
如何在阿里云高效完成企业建站全流程?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
如何正确下载安装西数主机建站助手?

