# Task P01-001: 数据库 Schema 实现 + 迁移脚本 ## 元信息 | 字段 | 值 | |------|-----| | 状态 | `todo` | | 优先级 | P0 | | 依赖 | 无 | | 分配给 | Coder AI (Trae CN + GLM-4.6) | ## 输入 **要读的文件**: - `docs/02_系统架构/数据模型.md` — 所有表定义、字段、索引、Drizzle Schema 示例 - `docs/02_系统架构/技术选型.md` — PostgreSQL + Drizzle ORM 版本 **参考的 ADR**: - ADR-009: verification_status 状态机 + ai_confidence JSONB 字段 - ADR-010: questions 表 source + external_id 字段(题库适配器路由) **上游依赖产出**: - 无(这是所有模块的前置依赖) ## 输出 **要生成/修改的文件**: - `projects/app/src/db/schema/*.ts` — 全部表定义(Drizzle ORM) - `projects/app/src/db/migrations/` — 迁移脚本 **涉及的表**: users, user_relations, error_items, error_item_images, correction_logs, knowledge_points, question_knowledge_map, questions, print_tasks, recommendation_logs **关键字段提醒**: - users 表: `role VARCHAR` + `invitation_code VARCHAR` - knowledge_points 表: `code VARCHAR`(业务编码如 G5-MATH-0201) - questions 表: `question_type VARCHAR`(6 种题型), `difficulty SMALLINT`(1-5), `cognitive_level SMALLINT`(Bloom 1-6 预留), `source VARCHAR`(self_built / zuoyebang), `external_id VARCHAR`(第三方 ID) - error_items 表: `verification_status VARCHAR`(raw/reviewed/corrected/stale), `ai_confidence JSONB`, `subject VARCHAR`(math/english) - correction_logs 表: `ai_value JSONB` + `user_value JSONB` + `ai_confidence NUMERIC` - print_tasks 表: `status, file_url, expires_at, created_at` - user_relations 表: `parent_user_id, child_user_id, level`(支持递归 CTE 邀请链查询) ## 验收方法 ```bash # 生成迁移脚本 npm run db:generate # 执行迁移(本地 dev 数据库) npm run db:migrate # 验证所有表存在 psql $DATABASE_URL -c "\dt" ``` ## 约束 - 不碰: `projects/app/src/modules/`(业务模块)、`projects/app/tests/` - 技术栈: PostgreSQL + Drizzle ORM - 遵循: 数据模型 v0.4.0 字段定义,不做自行裁剪 ## 完成报告 > Coder 完成后填写。Commit message 以 `[READY_FOR_TEST]` 结尾。 - [ ] 输出文件已生成 - [ ] 验收命令通过 - [ ] Commit: `{hash}` - [ ] Commit message: `feat(P01-001): 数据库 Schema 实现 + 迁移脚本 [READY_FOR_TEST]`