27 lines
1.6 KiB
Plaintext
27 lines
1.6 KiB
Plaintext
---
|
|
description: MySQL 表设计、迁移与索引规范
|
|
globs: backend/database/**/*.php,backend/app/Models/**/*.php,docs/database/**
|
|
alwaysApply: false
|
|
---
|
|
# 数据库规范
|
|
|
|
详见 `docs/09-database.md`。表结构设计存放在 `docs/database/`(索引 `docs/database/README.md`)。
|
|
|
|
- **设计先行**:先在 `docs/database/` 中设计并确认表结构,再写迁移;迁移与设计文档必须保持一致,改表时同步更新文档。
|
|
|
|
- InnoDB + utf8mb4;所有表有 `created_at`、`updated_at`。
|
|
- 核心业务表必须有 `tenant_code`;业务编码唯一约束包含租户:`UNIQUE (tenant_code, sku_code)`。
|
|
- 重要业务表按需加 `status`、`version`(乐观锁)、`deleted_at`;**不要无脑给所有表加软删除**,流水类事实表禁止软删除与更新。
|
|
- 数量字段使用整数或 `DECIMAL`,禁止 `FLOAT/DOUBLE`;金额使用 `DECIMAL`。
|
|
- 索引围绕实际查询设计,复合索引通常以 `tenant_code` 为最左列;关注 `warehouse_code`、`customer_code`、`sku_code`、`order_no`、`inbound_no`、`outbound_no`、`location_code`、`status`、`created_at`。
|
|
- 迁移必须可回滚(实现 `down()`),已上线的迁移不修改,新增迁移变更。
|
|
- 表名是单数加 `wms_` 前缀(如 `wms_sku`、`wms_stock_log`)。每张表一个 SQL 文件,放在 `docs/database/` 对应领域目录,约定见 `docs/database/00-conventions.md`。
|
|
|
|
```php
|
|
// ✅
|
|
$table->string('tenant_code', 32);
|
|
$table->string('sku_code', 64);
|
|
$table->unique(['tenant_code', 'sku_code']);
|
|
$table->index(['tenant_code', 'status', 'created_at']);
|
|
```
|