1.5 KiB
1.5 KiB
09 数据库设计
引擎
- MySQL 8:业务事实数据源
- Redis 7:缓存 / 队列 / 锁 / 限流(非业务数据源)
必须考虑的业务维度
- 多租户
- 多仓库
- 多客户
- 多 SKU
- 批次
- 库位
- 库存流水
- 库存锁定
- 库存预占
- 并发库存更新
- 订单状态流转
- WMS 作业任务
- 数据审计
表设计规范
所有表:
- 使用 InnoDB
- utf8mb4
- 合理索引
created_atupdated_at
重要业务表考虑:
deleted_atversion(乐观锁)status
但不要为了"统一"而无脑给所有表增加软删除。库存流水等事实数据不应被删除或修改。
核心业务表需包含 tenant_code
见 03-multi-tenancy.md。业务编码的唯一约束应包含租户维度,例如 UNIQUE (tenant_code, sku_code)。
索引
索引必须围绕实际查询设计。特别关注:
- tenant_code
- warehouse_code
- customer_code
- sku_code
- order_no
- inbound_no
- outbound_no
- location_code
- created_at
- status
复合索引通常以 tenant_code 作为最左列。
设计产出
表结构是 MySQL 建表语句,每张表一个文件,索引在 docs/database/README.md,约定在 docs/database/00-conventions.md。
在写迁移之前,先在 docs/database/ 中产出并确认表结构,把租户、仓库、库位、SKU、库存、库存流水、入库、出库这几个核心模型定死,再开始写 Laravel。迁移与设计文档必须保持一致。