mysql如何设计库存管理表

来源:这里教程网 时间:2026-02-28 20:08:45 作者:

库存管理表设计要点

设计MySQL库存管理表时,核心是准确记录商品信息、库存数量、出入库变动和操作时间。一个合理的结构能支持查询、统计和防止超卖。以下是关键设计思路。

1. 商品基础信息表(product)

存储商品的静态信息,如名称、规格、分类等。

product_id:主键,唯一标识商品 name:商品名称 spec:规格(如颜色、尺寸) category_id:分类ID(可关联分类表) status:上下架状态 2. 仓库库存表(inventory)

记录每个商品在各仓库中的当前库存量。

inventory_id:主键 product_id:外键,关联商品 warehouse_id:仓库ID stock_quantity:当前可用库存 frozen_quantity:冻结库存(如已下单未发货) updated_at:最后更新时间

注意:此表按商品+仓库组合唯一索引,确保数据不重复。

3. 库存流水表(inventory_log)

记录每一次库存变化,用于追踪和对账。

log_id:主键 product_id:商品ID change_type:类型(入库、出库、调拨、退货等) quantity:变化数量(正为入,负为出) related_order:关联订单号或单据号 operator:操作人 created_at:操作时间 4. 关键字段说明

库存系统中,stock_quantity 是实时可用库存,frozen_quantity 用于处理订单锁定场景。比如用户下单后先冻结库存,支付成功再扣减,取消则释放。

5. 索引与约束建议

在 product_id 和 (product_id, warehouse_id) 上建立索引,提升查询效率 使用事务保证库存变更时数据一致性 避免直接修改 inventory 表,所有变动通过插入 log 表触发更新 6. 示例建表语句片段

CREATE TABLE inventory (
  inventory_id INT PRIMARY KEY AUTO_INCREMENT,
  product_id INT NOT NULL,
  warehouse_id INT DEFAULT 1,
  stock_quantity INT DEFAULT 0,
  frozen_quantity INT DEFAULT 0,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  UNIQUE KEY uk_product_warehouse (product_id, warehouse_id)
);

基本上就这些。结构清晰、日志完整、配合事务控制,就能支撑大多数库存场景。

相关推荐