-- ============================================ -- 赛事管理模块数据库表结构 -- ============================================ -- 1. 赛事表 CREATE TABLE `t_contest` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `contest_name` varchar(127) NOT NULL COMMENT '赛事名称', `contest_type` varchar(31) NOT NULL COMMENT '赛事类型,字典:contest_type:individual/team', `contest_state` varchar(31) NOT NULL DEFAULT 'unpublished' COMMENT '赛事状态(未发布:unpublished 已发布:published)', `start_time` datetime NOT NULL COMMENT '赛事开始时间', `end_time` datetime NOT NULL COMMENT '赛事结束时间', `address` varchar(512) DEFAULT NULL COMMENT '线下地址', `content` text COMMENT '赛事详情', `contest_tenants` json DEFAULT NULL COMMENT '赛事参赛范围(授权租户ID数组)', `cover_url` varchar(255) DEFAULT NULL COMMENT '封面url', `poster_url` varchar(255) DEFAULT NULL COMMENT '海报url', `contact_name` varchar(63) DEFAULT NULL COMMENT '联系人', `contact_phone` varchar(63) DEFAULT NULL COMMENT '联系电话', `contact_qrcode` varchar(255) DEFAULT NULL COMMENT '联系人二维码', `organizers` json DEFAULT NULL COMMENT '主办单位数组', `co_organizers` json DEFAULT NULL COMMENT '协办单位数组', `sponsors` json DEFAULT NULL COMMENT '赞助单位数组', `register_start_time` datetime NOT NULL COMMENT '报名开始时间', `register_end_time` datetime NOT NULL COMMENT '报名结束时间', `register_state` varchar(31) DEFAULT NULL COMMENT '报名任务状态,映射写死:启动(started),已关闭(closed)', `submit_rule` varchar(31) NOT NULL DEFAULT 'once' COMMENT '提交规则:once/resubmit', `submit_start_time` datetime NOT NULL COMMENT '作品提交开始时间', `submit_end_time` datetime NOT NULL COMMENT '作品提交结束时间', `review_rule_id` int DEFAULT NULL COMMENT '评审规则id', `review_start_time` datetime NOT NULL COMMENT '评审开始时间', `review_end_time` datetime NOT NULL COMMENT '评审结束时间', `result_publish_time` datetime DEFAULT NULL COMMENT '结果发布时间', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), UNIQUE KEY `uk_contest_name` (`contest_name`), KEY `idx_contest_state` (`contest_state`), KEY `idx_contest_time` (`start_time`, `end_time`), KEY `idx_review_rule` (`review_rule_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事表'; -- 2. 赛事附件表 CREATE TABLE `t_contest_attachment` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `contest_id` int NOT NULL COMMENT '赛事id', `file_name` varchar(100) NOT NULL COMMENT '文件名', `file_url` varchar(255) NOT NULL COMMENT '文件路径', `format` varchar(255) DEFAULT NULL COMMENT '文件类型(png,mp4)', `file_type` varchar(255) DEFAULT NULL COMMENT '素材类型(image,video)', `size` varchar(255) DEFAULT '0' COMMENT '文件大小', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), KEY `idx_contest` (`contest_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事附件'; -- 3. 评审规则表 CREATE TABLE `t_contest_review_rule` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `contest_id` int NOT NULL COMMENT '赛事id', `rule_name` varchar(127) NOT NULL COMMENT '规则名称', `dimensions` json NOT NULL COMMENT '评分维度配置JSON', `calculation_rule` varchar(31) DEFAULT 'average' COMMENT '计算规则:average/max/min/weighted', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), KEY `idx_contest` (`contest_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评审规则表'; -- 4. 赛事团队表 CREATE TABLE `t_contest_team` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `tenant_id` int NOT NULL COMMENT '团队所属租户ID', `contest_id` int NOT NULL COMMENT '赛事id', `team_name` varchar(127) NOT NULL COMMENT '团队名称(租户内唯一)', `leader_user_id` int NOT NULL COMMENT '团队负责人用户id', `max_members` int DEFAULT NULL COMMENT '团队最大成员数', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), UNIQUE KEY `uk_team_name` (`tenant_id`,`contest_id`,`team_name`), KEY `idx_contest` (`contest_id`), KEY `idx_leader` (`leader_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事团队'; -- 5. 团队成员表 CREATE TABLE `t_contest_team_member` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `tenant_id` int NOT NULL COMMENT '成员所属租户ID', `team_id` int NOT NULL COMMENT '团队id', `user_id` int NOT NULL COMMENT '成员用户id', `role` varchar(31) NOT NULL DEFAULT 'member' COMMENT '成员角色:member/leader/mentor', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_member_once` (`tenant_id`,`team_id`,`user_id`), KEY `idx_team` (`team_id`), KEY `idx_user` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='团队成员'; -- 6. 赛事报名表 CREATE TABLE `t_contest_registration` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `contest_id` int NOT NULL COMMENT '赛事id', `tenant_id` int NOT NULL COMMENT '所属租户ID(学校/机构)', `registration_type` varchar(20) DEFAULT NULL COMMENT '报名类型:individual(个人)/team(团队)', `team_id` int DEFAULT NULL COMMENT '团队id', `team_name` varchar(255) DEFAULT NULL COMMENT '团队名称快照(团队赛)', `user_id` int NOT NULL COMMENT '账号id', `account_no` varchar(64) NOT NULL COMMENT '报名账号(记录报名快照)', `account_name` varchar(100) NOT NULL COMMENT '报名账号名称(记录报名快照)', `role` varchar(63) DEFAULT NULL COMMENT '报名角色快照:leader(队长)/member(队员)/mentor(指导教师)', `registration_state` varchar(31) NOT NULL DEFAULT 'pending' COMMENT '报名状态:pending(待审核)、passed(已通过)、rejected(已拒绝)、withdrawn(已撤回)', `registrant` int DEFAULT NULL COMMENT '实际报名人用户ID(老师报名填老师用户ID)', `registration_time` datetime NOT NULL COMMENT '报名时间', `reason` varchar(1023) DEFAULT NULL COMMENT '审核理由', `operator` int DEFAULT NULL COMMENT '审核人用户ID', `operation_date` datetime DEFAULT NULL COMMENT '审核时间', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_contest_tenant` (`contest_id`, `tenant_id`), KEY `idx_user_contest` (`user_id`, `contest_id`), KEY `idx_team` (`team_id`), KEY `idx_registration_state` (`registration_state`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛事报名人员记录表'; -- 7. 参赛作品表 CREATE TABLE `t_contest_work` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `tenant_id` int NOT NULL COMMENT '作品所属租户ID', `contest_id` int NOT NULL COMMENT '赛事id', `registration_id` int NOT NULL COMMENT '报名记录id(关联t_contest_registration.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` int 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` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), UNIQUE KEY `uk_work_no` (`work_no`), KEY `idx_work_contest_latest` (`tenant_id`,`contest_id`,`is_latest`), KEY `idx_work_registration` (`registration_id`), KEY `idx_submit_filter` (`tenant_id`,`contest_id`,`submit_time`,`status`), KEY `idx_contest_status` (`contest_id`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='参赛作品'; -- 8. 作品附件文件表 CREATE TABLE `t_contest_work_attachment` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `tenant_id` int NOT NULL COMMENT '所属租户ID', `contest_id` int NOT NULL COMMENT '赛事id', `work_id` int NOT NULL COMMENT '作品id', `file_name` varchar(255) NOT NULL COMMENT '文件名', `file_url` varchar(255) NOT NULL COMMENT '文件路径', `format` varchar(255) DEFAULT NULL COMMENT '文件类型(png,mp4)', `file_type` varchar(255) DEFAULT NULL COMMENT '素材类型(image,video)', `size` varchar(255) DEFAULT '0' COMMENT '文件大小', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `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_id`,`contest_id`,`work_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品附件文件表'; -- 9. 比赛评委关联表(比赛与评委的多对多关系) CREATE TABLE `t_contest_judge` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `contest_id` int NOT NULL COMMENT '比赛id', `judge_id` int NOT NULL COMMENT '评委用户id', `specialty` varchar(255) DEFAULT NULL COMMENT '评审专业领域(可选)', `weight` decimal(3,2) DEFAULT NULL COMMENT '评审权重(可选,用于加权平均计算)', `description` text DEFAULT NULL COMMENT '评委在该比赛中的说明', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), UNIQUE KEY `uk_contest_judge` (`contest_id`, `judge_id`), KEY `idx_contest` (`contest_id`), KEY `idx_judge` (`judge_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='比赛评委关联表'; -- 10. 作品分配表(评委分配作品) CREATE TABLE `t_contest_work_judge_assignment` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `contest_id` int NOT NULL COMMENT '赛事id', `work_id` int NOT NULL COMMENT '作品id', `judge_id` int NOT NULL COMMENT '评委用户id', `assignment_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '分配时间', `status` varchar(31) NOT NULL DEFAULT 'assigned' COMMENT '分配状态:assigned/reviewing/completed', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_work_judge` (`work_id`, `judge_id`), KEY `idx_contest_judge` (`contest_id`, `judge_id`), KEY `idx_work` (`work_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作品分配表'; -- 11. 作品评分表 CREATE TABLE `t_contest_work_score` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `tenant_id` int NOT NULL COMMENT '所属租户ID', `contest_id` int NOT NULL COMMENT '赛事id', `work_id` int NOT NULL COMMENT '作品id', `assignment_id` int NOT NULL COMMENT '分配记录id(关联t_contest_work_judge_assignment)', `judge_id` int NOT NULL COMMENT '评委用户id', `judge_name` varchar(127) NOT NULL COMMENT '评委姓名', `dimension_scores` json NOT NULL COMMENT '各维度评分JSON,格式:{"dimension1": 85, "dimension2": 90, ...}', `total_score` decimal(10,2) NOT NULL COMMENT '总分(根据评审规则计算)', `comments` text DEFAULT NULL COMMENT '评语', `score_time` datetime NOT NULL COMMENT '评分时间', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), KEY `idx_contest_work_judge` (`contest_id`, `work_id`, `judge_id`), KEY `idx_work` (`work_id`), KEY `idx_assignment` (`assignment_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品评分表'; -- 12. 赛事公告表 CREATE TABLE `t_contest_notice` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id', `contest_id` int NOT NULL COMMENT '赛事id', `title` varchar(255) NOT NULL COMMENT '公告标题', `content` text NOT NULL COMMENT '公告内容', `notice_type` varchar(31) NOT NULL DEFAULT 'manual' COMMENT '公告类型:system/manual/urgent', `priority` int DEFAULT 0 COMMENT '优先级(数字越大优先级越高)', `publish_time` datetime DEFAULT NULL COMMENT '发布时间', `creator` int DEFAULT NULL COMMENT '创建人ID', `modifier` int DEFAULT NULL COMMENT '修改人ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态(1-有效,2-失效)', PRIMARY KEY (`id`), KEY `idx_contest` (`contest_id`), KEY `idx_publish_time` (`publish_time`), KEY `idx_notice_type` (`notice_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛事公告表';