# 赛事管理 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 '作品预览URL(3D/视频)', `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. **备份数据库**:在执行迁移前备份现有数据