library-picturebook-activity/backend/sql/competition.sql
2025-12-09 11:10:36 +08:00

277 lines
16 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================
-- 赛事管理模块数据库表结构
-- ============================================
-- 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_typeindividual/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 '作品预览URL3D/视频)',
`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='赛事公告表';