-- 创建数据库 CREATE DATABASE IF NOT EXISTS `campus_activity` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE `campus_activity`; -- 创建用户表 CREATE TABLE `user` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` VARCHAR(50) NOT NULL COMMENT '登录用户名', `password` VARCHAR(255) NOT NULL COMMENT '密码', `name` VARCHAR(50) NOT NULL COMMENT '真实姓名', `student_id` VARCHAR(20) DEFAULT NULL COMMENT '学号', `email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱', `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号', `avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL', `role` TINYINT NOT NULL DEFAULT 0 COMMENT '角色:0-学生,1-管理员', `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-正常', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), UNIQUE KEY `uk_student_id` (`student_id`), KEY `idx_role` (`role`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户表'; -- 创建活动表 CREATE TABLE `activity` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '活动ID', `title` VARCHAR(100) NOT NULL COMMENT '活动名称', `description` TEXT DEFAULT NULL COMMENT '活动简介', `cover_image` VARCHAR(255) DEFAULT NULL COMMENT '封面图片', `start_time` DATETIME NOT NULL COMMENT '开始时间', `end_time` DATETIME NOT NULL COMMENT '结束时间', `registration_deadline` DATETIME DEFAULT NULL COMMENT '报名截止时间', `location` VARCHAR(200) NOT NULL COMMENT '活动地点', `max_participants` INT NOT NULL COMMENT '报名人数上限', `current_participants` INT DEFAULT 0 COMMENT '当前报名人数', `status` TINYINT DEFAULT 0 COMMENT '状态:0-未开始,1-报名中,2-进行中,3-已结束', `category` VARCHAR(50) DEFAULT NULL COMMENT '活动分类', `admin_id` BIGINT NOT NULL COMMENT '创建者ID', `qr_code` VARCHAR(255) DEFAULT NULL COMMENT '签到二维码', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除', `version` INT DEFAULT 0 COMMENT '乐观锁版本号', PRIMARY KEY (`id`), KEY `idx_status` (`status`), KEY `idx_start_time` (`start_time`), KEY `idx_admin_id` (`admin_id`), CONSTRAINT `fk_activity_admin` FOREIGN KEY (`admin_id`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='活动表'; -- 创建报名表 CREATE TABLE `registration` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '报名ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `activity_id` BIGINT NOT NULL COMMENT '活动ID', `ticket_code` VARCHAR(100) DEFAULT NULL COMMENT '电子票唯一码', `ticket_pdf_url` VARCHAR(255) DEFAULT NULL COMMENT '电子票PDF地址', `status` TINYINT DEFAULT 1 COMMENT '状态:0-已取消,1-已报名,2-已签到', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间', `updated_at` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `canceled_at` DATETIME DEFAULT NULL COMMENT '取消时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_activity` (`user_id`, `activity_id`), UNIQUE KEY `uk_ticket_code` (`ticket_code`), KEY `idx_activity_id` (`activity_id`), CONSTRAINT `fk_registration_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`), CONSTRAINT `fk_registration_activity` FOREIGN KEY (`activity_id`) REFERENCES `activity` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='报名表'; -- 创建签到表 CREATE TABLE `check_in` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '签到ID', `registration_id` BIGINT NOT NULL COMMENT '报名ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `activity_id` BIGINT NOT NULL COMMENT '活动ID', `check_in_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '签到时间', `check_in_method` TINYINT DEFAULT 0 COMMENT '签到方式:0-扫码,1-管理员代签', PRIMARY KEY (`id`), UNIQUE KEY `uk_registration_id` (`registration_id`), KEY `idx_activity_id` (`activity_id`), KEY `idx_user_id` (`user_id`), CONSTRAINT `fk_checkin_registration` FOREIGN KEY (`registration_id`) REFERENCES `registration` (`id`), CONSTRAINT `fk_checkin_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`), CONSTRAINT `fk_checkin_activity` FOREIGN KEY (`activity_id`) REFERENCES `activity` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='签到表'; -- 创建评价表 CREATE TABLE `review` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '评价ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `activity_id` BIGINT NOT NULL COMMENT '活动ID', `rating` TINYINT NOT NULL COMMENT '评分(1-5)', `content` TEXT DEFAULT NULL COMMENT '评论内容', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '评价时间', `updated_at` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_activity` (`user_id`, `activity_id`), KEY `idx_activity_id` (`activity_id`), CONSTRAINT `fk_review_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`), CONSTRAINT `fk_review_activity` FOREIGN KEY (`activity_id`) REFERENCES `activity` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评价表';