68 lines
1.5 KiB
Markdown
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。迁移与设计文档必须保持一致。
|