Files
wms-saas/docs/09-database.md
T
2026-09-30 11:11:54 +08:00

68 lines
1.5 KiB
Markdown

# 09 数据库设计
## 引擎
- MySQL 8:业务事实数据源
- Redis 7:缓存 / 队列 / 锁 / 限流(非业务数据源)
## 必须考虑的业务维度
- 多租户
- 多仓库
- 多客户
- 多 SKU
- 批次
- 库位
- 库存流水
- 库存锁定
- 库存预占
- 并发库存更新
- 订单状态流转
- WMS 作业任务
- 数据审计
## 表设计规范
所有表:
- 使用 InnoDB
- utf8mb4
- 合理索引
- `created_at`
- `updated_at`
重要业务表考虑:
- `deleted_at`
- `version`(乐观锁)
- `status`
但不要为了"统一"而无脑给所有表增加软删除。库存流水等事实数据不应被删除或修改。
## 核心业务表需包含 tenant_code
见 [03-multi-tenancy.md](./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`](./database/README.md),约定在 [`docs/database/00-conventions.md`](./database/00-conventions.md)。
在写迁移之前,先在 `docs/database/` 中产出并确认表结构,把租户、仓库、库位、SKU、库存、库存流水、入库、出库这几个核心模型定死,再开始写 Laravel。迁移与设计文档必须保持一致。