# 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。迁移与设计文档必须保持一致。