library-picturebook-activity/backend/docs/MIGRATION_INCREMENTAL_GUIDE.md
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

313 lines
7.5 KiB
Markdown
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.

# Prisma 增量迁移指南
## 📋 概述
Prisma 的迁移机制**已经内置了增量执行功能**。当你运行迁移命令时Prisma 会自动:
- ✅ 只执行**新增的、未应用的**迁移
- ✅ **跳过**已经执行过的迁移
- ✅ 通过 `_prisma_migrations` 表跟踪迁移状态
---
## 🔍 Prisma 如何跟踪迁移状态
Prisma 在数据库中维护一个特殊的表 `_prisma_migrations`,用于记录:
- 迁移名称migration_name
- 应用时间applied_at
- 迁移文件内容checksum
- 其他元数据
每次迁移执行后Prisma 会在这个表中记录一条记录,确保不会重复执行。
---
## 🚀 迁移命令对比
### 1. `prisma migrate deploy`(生产环境推荐)
**特点**
-**只执行未应用的迁移**
- ✅ 不会创建新迁移
- ✅ 不会重置数据库
- ✅ 适合生产环境
**使用场景**
- 生产环境部署
- CI/CD 流程
- 多环境同步
**示例**
```bash
# 生产环境
npm run prisma:migrate:deploy
# 或直接使用
NODE_ENV=production prisma migrate deploy
```
**执行逻辑**
1. 读取 `prisma/migrations` 目录中的所有迁移文件
2. 查询数据库中的 `_prisma_migrations`
3. 对比找出未应用的迁移
4. **只执行未应用的迁移**
5.`_prisma_migrations` 表中记录新应用的迁移
---
### 2. `prisma migrate dev`(开发环境推荐)
**特点**
- ✅ 创建新迁移(如果有 schema 变更)
-**只执行未应用的迁移**
- ✅ 可能会重置开发数据库(如果使用 shadow database
- ✅ 适合开发环境
**使用场景**
- 本地开发
- Schema 变更后创建迁移
**示例**
```bash
# 开发环境
npm run prisma:migrate
# 或直接使用
prisma migrate dev
```
**执行逻辑**
1. 检查 schema.prisma 是否有变更
2. 如果有变更,创建新迁移文件
3. 查询 `_prisma_migrations` 表找出未应用的迁移
4. **只执行未应用的迁移**(包括新创建的)
5. 记录到 `_prisma_migrations`
---
## 📊 查看迁移状态
### 检查哪些迁移已应用
```bash
# 查看迁移状态
npx prisma migrate status
# 输出示例:
# ✅ Database schema is up to date!
#
# The following migrations have been applied:
# - 20251118035205_init
# - 20251118041000_add_comments
# - 20251118211424_change_log_content_to_text
```
### 直接查询数据库
```sql
-- 查看所有已应用的迁移
SELECT * FROM _prisma_migrations ORDER BY applied_at DESC;
-- 查看迁移名称和状态
SELECT migration_name, applied_at, finished_at
FROM _prisma_migrations
ORDER BY applied_at DESC;
```
---
## 🎯 实际使用场景
### 场景 1生产环境部署
**情况**:生产数据库已经有部分迁移,现在要部署新版本
```bash
# 1. 部署新代码(包含新的迁移文件)
# 2. 运行迁移(只会执行新增的迁移)
npm run prisma:migrate:deploy
# Prisma 会自动:
# - 检查 _prisma_migrations 表
# - 找出未应用的迁移20251120000000_new_feature
# - 只执行这个新迁移
# - 跳过已执行的迁移20251118035205_init
```
**结果**
- ✅ 已执行的迁移不会重复执行
- ✅ 只执行新增的迁移
- ✅ 数据库结构同步到最新状态
---
### 场景 2多环境同步
**情况**:开发环境有 3 个迁移,生产环境只有 2 个
```bash
# 开发环境迁移:
# - 20251118035205_init ✅
# - 20251118041000_add_comments ✅
# - 20251118211424_change_log_content_to_text ✅
# 生产环境迁移:
# - 20251118035205_init ✅
# - 20251118041000_add_comments ✅
# - 20251118211424_change_log_content_to_text ❌(未应用)
# 在生产环境运行:
npm run prisma:migrate:deploy
# Prisma 会:
# - 跳过前两个已应用的迁移
# - 只执行最后一个未应用的迁移
```
---
### 场景 3回滚和修复
**情况**:某个迁移执行失败,需要修复
```bash
# 1. 检查迁移状态
npx prisma migrate status
# 2. 如果迁移失败_prisma_migrations 表中不会有记录
# 3. 修复迁移文件后,重新运行
npm run prisma:migrate:deploy
# Prisma 会:
# - 检查失败的迁移是否已记录
# - 如果没有记录,会重新执行
# - 如果已记录,会跳过
```
---
## ⚠️ 注意事项
### 1. 不要手动修改 `_prisma_migrations` 表
这个表由 Prisma 自动管理,手动修改可能导致迁移状态不一致。
### 2. 迁移文件不要删除
即使迁移已执行,也不要删除 `prisma/migrations` 目录中的迁移文件。这些文件是迁移历史的一部分。
### 3. 生产环境使用 `migrate deploy`
```bash
# ✅ 正确:生产环境
prisma migrate deploy
# ❌ 错误:生产环境不要使用
prisma migrate dev # 可能会重置数据库
```
### 4. 迁移文件顺序很重要
Prisma 按照迁移文件名(时间戳)的顺序执行迁移。确保迁移文件名的时间戳顺序正确。
---
## 🔧 故障排查
### 问题 1迁移状态不一致
**症状**`prisma migrate status` 显示状态不一致
**解决**
```bash
# 1. 检查 _prisma_migrations 表
SELECT * FROM _prisma_migrations;
# 2. 检查迁移文件
ls -la prisma/migrations/
# 3. 如果迁移文件存在但未记录,手动标记(谨慎操作)
# 或者重新运行迁移
prisma migrate deploy
```
### 问题 2迁移重复执行
**症状**:迁移被重复执行
**原因**`_prisma_migrations` 表中没有记录
**解决**
```bash
# 检查迁移记录
npx prisma migrate status
# 如果显示迁移未应用,但数据库结构已存在
# 可能需要手动标记迁移为已应用(谨慎操作)
```
### 问题 3迁移文件丢失
**症状**:迁移文件被删除,但数据库中有记录
**解决**
```bash
# 1. 从版本控制恢复迁移文件
git checkout prisma/migrations/
# 2. 重新运行迁移检查
npx prisma migrate status
```
---
## 📚 相关命令速查
| 命令 | 说明 | 使用场景 |
| ----------------------- | ---------------------- | -------- |
| `prisma migrate deploy` | 只执行未应用的迁移 | 生产环境 |
| `prisma migrate dev` | 创建并执行迁移 | 开发环境 |
| `prisma migrate status` | 查看迁移状态 | 所有环境 |
| `prisma migrate reset` | 重置数据库(开发环境) | 开发环境 |
| `prisma db push` | 直接同步 schema | 快速原型 |
---
## ✅ 总结
**Prisma 迁移机制的核心特点**
1.**自动增量执行**:只执行未应用的迁移
2.**状态跟踪**:通过 `_prisma_migrations` 表跟踪
3.**安全可靠**:不会重复执行已应用的迁移
4.**环境区分**`migrate deploy` 用于生产,`migrate dev` 用于开发
**最佳实践**
- 🎯 生产环境:使用 `prisma migrate deploy`
- 🎯 开发环境:使用 `prisma migrate dev`
- 🎯 定期检查:使用 `prisma migrate status` 查看状态
- 🎯 版本控制:提交所有迁移文件到 Git
---
## 🔗 相关文档
- [Prisma 官方迁移文档](https://www.prisma.io/docs/concepts/components/prisma-migrate)
- [SCHEMA_CHANGE_GUIDE.md](./SCHEMA_CHANGE_GUIDE.md) - Schema 修改指南
- [DATABASE_SETUP.md](./DATABASE_SETUP.md) - 数据库设置指南