library-picturebook-activity/backend/sql/competition.sql

277 lines
16 KiB
MySQL
Raw Normal View History

2025-12-09 11:10:36 +08:00
-- ============================================
-- 赛事管理模块数据库表结构
-- ============================================
-- 1. 赛事表
2025-11-23 14:04:20 +08:00
CREATE TABLE `t_contest` (
2025-12-09 11:10:36 +08:00
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
2025-11-23 14:04:20 +08:00
`contest_name` varchar(127) NOT NULL COMMENT '赛事名称',
`contest_type` varchar(31) NOT NULL COMMENT '赛事类型字典contest_typeindividual/team',
2025-12-09 11:10:36 +08:00
`contest_state` varchar(31) NOT NULL DEFAULT 'unpublished' COMMENT '赛事状态未发布unpublished 已发布published',
2025-11-23 14:04:20 +08:00
`start_time` datetime NOT NULL COMMENT '赛事开始时间',
`end_time` datetime NOT NULL COMMENT '赛事结束时间',
`address` varchar(512) DEFAULT NULL COMMENT '线下地址',
`content` text COMMENT '赛事详情',
2025-12-09 11:10:36 +08:00
`contest_tenants` json DEFAULT NULL COMMENT '赛事参赛范围授权租户ID数组',
2025-11-23 14:04:20 +08:00
`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 '联系人二维码',
2025-12-09 11:10:36 +08:00
`organizers` json DEFAULT NULL COMMENT '主办单位数组',
`co_organizers` json DEFAULT NULL COMMENT '协办单位数组',
`sponsors` json DEFAULT NULL COMMENT '赞助单位数组',
2025-11-23 14:04:20 +08:00
`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 '作品提交结束时间',
2025-12-09 11:10:36 +08:00
`review_rule_id` int DEFAULT NULL COMMENT '评审规则id',
2025-11-23 14:04:20 +08:00
`review_start_time` datetime NOT NULL COMMENT '评审开始时间',
`review_end_time` datetime NOT NULL COMMENT '评审结束时间',
`result_publish_time` datetime DEFAULT NULL COMMENT '结果发布时间',
2025-12-09 11:10:36 +08:00
`creator` int DEFAULT NULL COMMENT '创建人ID',
`modifier` int DEFAULT NULL COMMENT '修改人ID',
2025-11-23 14:04:20 +08:00
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2025-12-09 11:10:36 +08:00
`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`)
2025-11-23 14:04:20 +08:00
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事表';
2025-12-09 11:10:36 +08:00
-- 2. 赛事附件表
2025-11-23 14:04:20 +08:00
CREATE TABLE `t_contest_attachment` (
2025-12-09 11:10:36 +08:00
`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',
2025-11-23 14:04:20 +08:00
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2025-12-09 11:10:36 +08:00
`valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态1-有效2-失效)',
PRIMARY KEY (`id`),
KEY `idx_contest` (`contest_id`)
2025-11-23 14:04:20 +08:00
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='赛事附件';
2025-12-09 11:10:36 +08:00
-- 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. 参赛作品表
2025-11-23 14:04:20 +08:00
CREATE TABLE `t_contest_work` (
2025-12-09 11:10:36 +08:00
`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',
2025-11-23 14:04:20 +08:00
`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 '提交时间',
2025-12-09 11:10:36 +08:00
`submitter_user_id` int DEFAULT NULL COMMENT '提交人用户id',
2025-11-23 14:04:20 +08:00
`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建模元数据模型类型、版本、参数',
2025-12-09 11:10:36 +08:00
`creator` int DEFAULT NULL COMMENT '创建人ID',
`modifier` int DEFAULT NULL COMMENT '修改人ID',
2025-11-23 14:04:20 +08:00
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2025-12-09 11:10:36 +08:00
`valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态1-有效2-失效)',
2025-11-23 14:04:20 +08:00
PRIMARY KEY (`id`),
UNIQUE KEY `uk_work_no` (`work_no`),
2025-12-09 11:10:36 +08:00
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`)
2025-11-23 14:04:20 +08:00
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='参赛作品';
2025-12-09 11:10:36 +08:00
-- 8. 作品附件文件表
2025-11-23 14:04:20 +08:00
CREATE TABLE `t_contest_work_attachment` (
2025-12-09 11:10:36 +08:00
`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',
2025-11-23 14:04:20 +08:00
`file_name` varchar(255) NOT NULL COMMENT '文件名',
`file_url` varchar(255) NOT NULL COMMENT '文件路径',
2025-12-09 11:10:36 +08:00
`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',
2025-11-23 14:04:20 +08:00
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
2025-12-09 11:10:36 +08:00
KEY `idx_work_file` (`tenant_id`,`contest_id`,`work_id`)
2025-11-23 14:04:20 +08:00
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品附件文件表';
2025-12-09 11:10:36 +08:00
-- 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',
2025-11-23 14:04:20 +08:00
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2025-12-09 11:10:36 +08:00
`valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态1-有效2-失效)',
2025-11-23 14:04:20 +08:00
PRIMARY KEY (`id`),
2025-12-09 11:10:36 +08:00
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='比赛评委关联表';
2025-11-23 14:04:20 +08:00
2025-12-09 11:10:36 +08:00
-- 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. 作品评分表
2025-11-23 14:04:20 +08:00
CREATE TABLE `t_contest_work_score` (
2025-12-09 11:10:36 +08:00
`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',
2025-11-23 14:04:20 +08:00
`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 '评分时间',
2025-12-09 11:10:36 +08:00
`creator` int DEFAULT NULL COMMENT '创建人ID',
`modifier` int DEFAULT NULL COMMENT '修改人ID',
2025-11-23 14:04:20 +08:00
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2025-12-09 11:10:36 +08:00
`valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态1-有效2-失效)',
2025-11-23 14:04:20 +08:00
PRIMARY KEY (`id`),
2025-12-09 11:10:36 +08:00
KEY `idx_contest_work_judge` (`contest_id`, `work_id`, `judge_id`),
KEY `idx_work` (`work_id`),
KEY `idx_assignment` (`assignment_id`)
2025-11-23 14:04:20 +08:00
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='作品评分表';
2025-12-09 11:10:36 +08:00
-- 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',
2025-11-23 14:04:20 +08:00
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2025-12-09 11:10:36 +08:00
`valid_state` int NOT NULL DEFAULT 1 COMMENT '有效状态1-有效2-失效)',
2025-11-23 14:04:20 +08:00
PRIMARY KEY (`id`),
2025-12-09 11:10:36 +08:00
KEY `idx_contest` (`contest_id`),
KEY `idx_publish_time` (`publish_time`),
KEY `idx_notice_type` (`notice_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='赛事公告表';