Files
vibe_coding/.cursor/rules/014-database.mdc
2026-03-05 21:27:11 +08:00

86 lines
3.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: "Hyperf ORM + MySQL 数据库规范 — Schema 设计/迁移/查询优化/高并发"
globs:
- "**/*.sql"
- "Case-Database-Backend/**/*.php"
- "Case-Database-Backend/database/migrations/**"
- "Case-Database-Backend/database/seeders/**"
- "Case-Database-Backend/modules/**/database/migrations/**"
- "Case-Database-Backend/modules/**/database/seeders/**"
- "Case-Database-Backend/app/Model/**"
- "Case-Database-Backend/config/autoload/databases.php"
alwaysApply: false
---
# 🗄️ Hyperf ORM + MySQL Database Standards (Core)
参考文档: @docs/architecture/data-model.md
## 核心原则
- 所有 schema 变更必须通过 Migration 执行
- 高风险变更采用 Expand-Contract不做一次性破坏升级
- 查询默认参数化,避免拼接 SQL
- 大表变更先评估锁表风险与回滚路径
- 读写分层Controller 不直接操作 Model
## 表命名规范(模块前缀)
**表名必须以所属模块名作为前缀**,格式:`<module>_<entity_plural>`。
| 模块 | 前缀 | 示例 |
|------|------|------|
| 用户与权限 | `auth_` | `auth_users`, `auth_roles` |
| 案例核心 | `case_` | `case_cases`, `case_images` |
| 设计师 | `designer_` | `designer_profiles`, `designer_awards` |
| 运营内容 | `operation_` | `operation_banners`, `operation_topics` |
| 用户互动 | `interaction_` | `interaction_favorites`, `interaction_comments` |
| 日志 | `log_` | `log_user_logins`, `log_downloads` |
| 安全风控 | `security_` | `security_blacklists`, `security_risk_events` |
| 系统配置 | `system_` | `system_configs` |
> 多对多关联表同样需要加模块前缀,以主体模块为准:`<module>_<a>_belongs_<b>`。
## 文件目录约定
- **根目录**(兜底,用于跨模块全局迁移/种子):
- `Case-Database-Backend/database/migrations/` — MigratorFactory 自动扫描
- `Case-Database-Backend/database/seeders/` — SeedFactory 自动扫描
- **模块目录**(按模块归属):
- `Case-Database-Backend/modules/<Module>/database/migrations/` — 该模块迁移
- `Case-Database-Backend/modules/<Module>/database/seeders/` — 该模块种子
执行 `migrate` / `db:seed` 时MigratorFactory / SeedFactory 会扫描根目录 + 所有 `modules/*/database/migrations` 与 `modules/*/database/seeders`,无需额外配置。
## 迁移最小流程
1. 明确需求与回滚方案(必填)
2. 生成 migration命名可读幂等`gen:migration` 自动写入 `database/migrations/`
3. 本地执行 migrate + rollback 演练
4. 校验索引、默认值、nullability 与历史数据兼容
5. 更新文档(字段、索引、业务约束)
## 查询与索引约束
- 高频筛选列必须有索引;复合索引按最左前缀设计
- 分页使用稳定排序(主键兜底)
- 禁止 `SELECT *` 用于高频路径
- 避免 N+1需要时使用 eager loading
## 安全与合规
- 敏感字段加密或脱敏存储
- 生产环境禁止临时 SQL 脚本直改
- 迁移文件要可审计、可回放
## 验证清单
- [ ] migration 可执行且可回滚
- [ ] 关键查询通过 explain 检查
- [ ] 新增/变更字段有兼容策略
- [ ] 文档已同步
## Tier 3 深度参考
- `.cursor/rules/references/014-database-deep.md` — 完整数据库规范与示例