106 lines
5.7 KiB
SQL
106 lines
5.7 KiB
SQL
-- 创建数据库
|
||
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='评价表'; |