library-picturebook-activity/backend/sql/competition_fixes.md

181 lines
8.0 KiB
Markdown
Raw Normal View History

2025-11-23 14:04:20 +08:00
# 赛事管理 SQL 文件修复清单
## ⚠️ 需要修复的问题
### 1. 删除重复的表定义
**问题位置:** 第125-144行
**问题描述:** `t_contest_work_score` 表被定义了两次第104-123行和第125-144行
**修复方案:** 删除第125-144行的重复定义
```sql
-- 删除以下重复定义第125-144行
CREATE TABLE `t_contest_work_score` (
`id` varchar(63) NOT NULL COMMENT '主键id',
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品评分表';
```
### 2. 修复表定义语法错误
**问题位置:** 第102行
**问题描述:** `t_contest_work_attachment` 表定义末尾有多余的逗号
**修复方案:** 删除第101行末尾的逗号
```sql
-- 第101行删除末尾逗号
KEY `idx_work_file` (`tenant_key`,`contest_id`,`work_id`), -- ❌ 错误:末尾有逗号
KEY `idx_work_file` (`tenant_key`,`contest_id`,`work_id`) -- ✅ 正确:删除逗号
```
### 3. 修复索引字段名错误
**问题位置:** 第183行
**问题描述:** `t_contest_team` 表的唯一索引引用了不存在的字段 `name`,实际字段名是 `team_name`
**修复方案:** 将索引字段名改为 `team_name`
```sql
-- 第183行修改前
UNIQUE KEY `uk_team_name` (`tenant_key`,`contest_id`,`name`), -- ❌ 错误:字段名错误
-- 修改后:
UNIQUE KEY `uk_team_name` (`tenant_key`,`contest_id`,`team_name`), -- ✅ 正确
```
### 4. 修复索引字段不存在错误
**问题位置:** 第82行
**问题描述:** `t_contest_work` 表的索引 `idx_submit_filter` 引用了不存在的字段 `review_status`
**修复方案:** 删除该索引或修改为存在的字段
```sql
-- 第82行修改前
KEY `idx_submit_filter` (`tenant_key`,`contest_id`,`submit_time`,`review_status`) -- ❌ 错误review_status 字段不存在
-- 修改方案1删除该索引如果不需要
-- 直接删除这一行
-- 修改方案2修改为存在的字段如果需要该索引
KEY `idx_submit_filter` (`tenant_key`,`contest_id`,`submit_time`,`status`) -- ✅ 使用 status 字段
```
## 📝 修复后的完整 SQL关键部分
### t_contest_work_attachment 表(修复后)
```sql
CREATE TABLE `t_contest_work_attachment` (
`id` varchar(63) NOT NULL COMMENT '主键id',
`tenant_key` varchar(127) NOT NULL COMMENT '所属租户键',
`contest_id` varchar(63) NOT NULL COMMENT '赛事id',
`work_id` varchar(63) NOT NULL COMMENT '作品id',
`file_name` varchar(255) NOT NULL COMMENT '文件名',
`file_url` varchar(255) NOT NULL COMMENT '文件路径',
`format` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件类型png,mp4',
`file_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '素材类型image,video',
`size` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '文件大小',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人',
`modifier` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '修改人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_work_file` (`tenant_key`,`contest_id`,`work_id`) -- ✅ 已删除末尾逗号
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品附件文件表';
```
### t_contest_work 表(修复后)
```sql
CREATE TABLE `t_contest_work` (
`id` varchar(63) NOT NULL COMMENT '主键id',
`tenant_key` varchar(127) NOT NULL COMMENT '作品所属租户键',
`contest_id` varchar(63) NOT NULL COMMENT '赛事id',
`entry_id` varchar(63) NOT NULL COMMENT '参赛报名实体id',
`work_no` varchar(63) DEFAULT NULL COMMENT '作品编号(展示用唯一编号)',
`title` varchar(255) NOT NULL COMMENT '作品标题',
`description` text DEFAULT NULL COMMENT '作品说明',
`files` json DEFAULT NULL COMMENT '作品文件列表(简易场景)',
`version` int NOT NULL DEFAULT 1 COMMENT '作品版本号(递增)',
`is_latest` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否最新版本1是/0否',
`status` varchar(31) NOT NULL DEFAULT 'submitted' COMMENT '作品状态submitted/locked/reviewing/rejected/accepted',
`submit_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间',
`submitter_user_id` varchar(63) DEFAULT NULL COMMENT '提交人用户id',
`submitter_account_no` varchar(127) DEFAULT NULL COMMENT '提交人账号(手机号/学号)',
`submit_source` varchar(31) NOT NULL DEFAULT 'teacher' COMMENT '提交来源teacher/student/team_leader',
`preview_url` varchar(255) DEFAULT NULL COMMENT '作品预览URL3D/视频)',
`ai_model_meta` json DEFAULT NULL COMMENT 'AI建模元数据模型类型、版本、参数',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人',
`modifier` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '修改人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`valid_state` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT '有效状态1-有效2-失效)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_work_no` (`work_no`),
KEY `idx_work_contest_latest` (`tenant_key`,`contest_id`,`is_latest`),
KEY `idx_work_entry` (`entry_id`),
KEY `idx_submit_filter` (`tenant_key`,`contest_id`,`submit_time`,`status`) -- ✅ 已修复:使用 status 字段
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='参赛作品';
```
### t_contest_team 表(修复后)
```sql
CREATE TABLE `t_contest_team` (
`id` varchar(63) NOT NULL COMMENT '主键id',
`tenant_key` varchar(127) NOT NULL COMMENT '团队所属租户键',
`contest_id` varchar(63) NOT NULL COMMENT '赛事id',
`team_name` varchar(127) NOT NULL COMMENT '团队名称(租户内唯一)',
`leader_account_id` varchar(63) NOT NULL COMMENT '团队负责人用户id',
`max_members` int DEFAULT NULL COMMENT '团队最大成员数',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人',
`modifier` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '修改人',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`valid_state` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT '有效状态1-有效2-失效)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_team_name` (`tenant_key`,`contest_id`,`team_name`), -- ✅ 已修复:使用 team_name 字段
KEY `idx_contest` (`contest_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事团队';
```
## 🔍 验证步骤
修复完成后,请执行以下验证:
1. **语法检查**
```bash
# 使用 MySQL 客户端检查语法
mysql -u root -p < competition.sql
```
2. **表结构验证**
```sql
-- 检查表是否存在
SHOW TABLES LIKE 't_contest%';
-- 检查表结构
DESCRIBE t_contest_work;
DESCRIBE t_contest_work_attachment;
DESCRIBE t_contest_team;
DESCRIBE t_contest_work_score;
```
3. **索引验证**
```sql
-- 检查索引是否正确
SHOW INDEX FROM t_contest_work;
SHOW INDEX FROM t_contest_team;
```
## 📌 建议
在修复 SQL 文件后,建议:
1. **创建数据库迁移文件**:使用 Prisma Migrate 或手动创建迁移
2. **更新 Prisma Schema**:将修复后的表结构同步到 `schema.prisma`
3. **测试数据插入**:插入测试数据验证表结构正确性
4. **备份数据库**:在执行迁移前备份现有数据