8.0 KiB
8.0 KiB
赛事管理 SQL 文件修复清单
⚠️ 需要修复的问题
1. 删除重复的表定义
问题位置: 第125-144行
问题描述: t_contest_work_score 表被定义了两次(第104-123行和第125-144行)
修复方案: 删除第125-144行的重复定义
-- 删除以下重复定义(第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行末尾的逗号
-- 第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
-- 第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
修复方案: 删除该索引或修改为存在的字段
-- 第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 表(修复后)
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 表(修复后)
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 表(修复后)
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='赛事团队';
🔍 验证步骤
修复完成后,请执行以下验证:
-
语法检查
# 使用 MySQL 客户端检查语法 mysql -u root -p < competition.sql -
表结构验证
-- 检查表是否存在 SHOW TABLES LIKE 't_contest%'; -- 检查表结构 DESCRIBE t_contest_work; DESCRIBE t_contest_work_attachment; DESCRIBE t_contest_team; DESCRIBE t_contest_work_score; -
索引验证
-- 检查索引是否正确 SHOW INDEX FROM t_contest_work; SHOW INDEX FROM t_contest_team;
📌 建议
在修复 SQL 文件后,建议:
- 创建数据库迁移文件:使用 Prisma Migrate 或手动创建迁移
- 更新 Prisma Schema:将修复后的表结构同步到
schema.prisma - 测试数据插入:插入测试数据验证表结构正确性
- 备份数据库:在执行迁移前备份现有数据