# 数据库迁移说明 - 模板市场功能 ## 📋 概述 模板市场功能需要创建3个新的数据库表: 1. `workflow_templates` - 工作流模板表 2. `template_ratings` - 模板评分表 3. `template_favorites` - 模板收藏表 ## 🔧 迁移方式 ### 方式一:执行SQL脚本(推荐) **SQL脚本位置**: `backend/create_template_market_tables.sql` **执行命令**: ```bash # 使用MySQL客户端 mysql -h [数据库地址] -u [用户名] -p [数据库名] < backend/create_template_market_tables.sql # 例如(根据您的配置): mysql -h gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com -P 24936 -u root -p agent_db < backend/create_template_market_tables.sql ``` ### 方式二:重启后端服务(自动创建) 如果后端服务配置了自动创建表(使用 `Base.metadata.create_all`),重启服务后会自动创建表。 **重启命令**: ```bash # Docker方式 docker-compose restart backend # 或直接重启uvicorn进程 ``` ### 方式三:通过Python脚本创建 ```python from app.core.database import engine, Base from app.models.workflow_template import WorkflowTemplate, TemplateRating, TemplateFavorite # 创建表 Base.metadata.create_all(bind=engine) ``` ## ✅ 验证表是否创建成功 ### 方法一:通过MySQL客户端查询 ```sql SHOW TABLES LIKE 'workflow_template%'; SHOW TABLES LIKE 'template_%'; ``` 应该看到: - `workflow_templates` - `template_ratings` - `template_favorites` ### 方法二:通过API测试 ```bash # 登录获取token curl -X POST http://101.43.95.130:8037/api/v1/auth/login \ -d "username=test_user&password=test_password123" # 测试模板市场API curl -X GET http://101.43.95.130:8037/api/v1/template-market \ -H "Authorization: Bearer " ``` 如果返回200状态码和空数组 `[]`,说明表已创建成功。 ## 📊 表结构说明 ### workflow_templates(工作流模板表) | 字段 | 类型 | 说明 | |------|------|------| | id | CHAR(36) | 模板ID(主键) | | name | VARCHAR(100) | 模板名称 | | description | TEXT | 模板描述 | | category | VARCHAR(50) | 分类 | | tags | JSON | 标签列表 | | nodes | JSON | 节点配置 | | edges | JSON | 边配置 | | thumbnail | VARCHAR(500) | 缩略图URL | | is_public | BOOLEAN | 是否公开 | | is_featured | BOOLEAN | 是否精选 | | view_count | INT | 查看次数 | | use_count | INT | 使用次数 | | rating_count | INT | 评分次数 | | rating_avg | FLOAT | 平均评分 | | user_id | CHAR(36) | 创建者ID(外键) | | created_at | DATETIME | 创建时间 | | updated_at | DATETIME | 更新时间 | ### template_ratings(模板评分表) | 字段 | 类型 | 说明 | |------|------|------| | id | CHAR(36) | 评分ID(主键) | | template_id | CHAR(36) | 模板ID(外键) | | user_id | CHAR(36) | 用户ID(外键) | | rating | INT | 评分(1-5) | | comment | TEXT | 评论 | | created_at | DATETIME | 创建时间 | | updated_at | DATETIME | 更新时间 | **唯一约束**: `(template_id, user_id)` - 每个用户对每个模板只能评分一次 ### template_favorites(模板收藏表) | 字段 | 类型 | 说明 | |------|------|------| | id | CHAR(36) | 收藏ID(主键) | | template_id | CHAR(36) | 模板ID(外键) | | user_id | CHAR(36) | 用户ID(外键) | | created_at | DATETIME | 创建时间 | **唯一约束**: `(template_id, user_id)` - 每个用户对每个模板只能收藏一次 ## 🐛 常见问题 ### 问题1: 表创建失败 - 外键约束错误 **原因**: `users` 表不存在或结构不匹配 **解决**: 确保 `users` 表已存在且 `id` 字段类型为 `CHAR(36)` ### 问题2: JSON字段不支持 **原因**: MySQL版本过低(需要5.7+) **解决**: 升级MySQL版本或使用 `TEXT` 类型替代 `JSON` ### 问题3: 表已存在错误 **原因**: 表已经创建过 **解决**: 使用 `CREATE TABLE IF NOT EXISTS` 可以安全地重复执行 ## 📝 迁移检查清单 - [ ] SQL脚本已创建 - [ ] 执行SQL脚本或重启后端服务 - [ ] 验证表是否创建成功 - [ ] 测试模板市场API - [ ] 测试前端模板市场页面 ## 🎯 迁移完成后 迁移完成后,您可以: 1. **使用模板市场功能**: - 分享工作流模板 - 搜索和浏览模板 - 收藏和评分模板 - 使用模板创建工作流 2. **使用批量操作功能**(不依赖新表): - 批量执行工作流 - 批量导出工作流 - 批量删除工作流 --- **SQL脚本位置**: `backend/create_template_market_tables.sql` **最后更新**: 2024年1月17日