181 lines
8.0 KiB
Markdown
181 lines
8.0 KiB
Markdown
|
|
# 赛事管理 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. **备份数据库**:在执行迁移前备份现有数据
|
|||
|
|
|