Files
BOSS/BOSSBackEnd/sql/sql.sql
2026-01-10 21:55:01 +08:00

239 lines
13 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.
/* =========================
Boss 招聘系统 - 全量建表SQL无外键
MySQL 8.x / InnoDB / utf8mb4
========================= */
-- 1) 建库(可选:你已有库就注释掉)
CREATE DATABASE IF NOT EXISTS boss
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_0900_ai_ci;
USE boss;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- 2) 清理(按依赖大致逆序,避免报错)
DROP TABLE IF EXISTS `interview`;
DROP TABLE IF EXISTS `boss_application_decision`;
DROP TABLE IF EXISTS `application`;
DROP TABLE IF EXISTS `job_posting`;
DROP TABLE IF EXISTS `resume`;
DROP TABLE IF EXISTS `company`;
DROP TABLE IF EXISTS `boss`;
DROP TABLE IF EXISTS `admin`;
DROP TABLE IF EXISTS `user`;
SET FOREIGN_KEY_CHECKS = 1;
-- =========================
-- admin 管理员表
-- =========================
CREATE TABLE `admin`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT '管理员ID',
`username` VARCHAR(64) NOT NULL COMMENT '登录名(唯一)',
`password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希',
`admin_name` VARCHAR(64) NULL COMMENT '管理员姓名',
`phone` VARCHAR(32) NULL,
`email` VARCHAR(128) NULL,
`status` TINYINT DEFAULT 1 NOT NULL COMMENT '状态0禁用 1正常',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`is_deleted` TINYINT DEFAULT 0 NOT NULL,
`deleted_at` DATETIME NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_username` (`username`)
) ENGINE=InnoDB COMMENT '管理员表';
CREATE INDEX `idx_admin_status` ON `admin` (`status`, `created_at`);
-- =========================
-- user 候选人用户表注意user 用反引号)
-- =========================
CREATE TABLE `user`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT '用户ID',
`user_account` VARCHAR(64) NOT NULL COMMENT '登录名(唯一)',
`password` VARCHAR(255) NOT NULL COMMENT '密码哈希',
`phone` VARCHAR(32) NULL COMMENT '手机号',
`email` VARCHAR(128) NULL COMMENT '邮箱',
`username` VARCHAR(64) NULL COMMENT '昵称',
`status` TINYINT DEFAULT 1 NOT NULL COMMENT '状态0禁用 1正常',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`is_deleted` TINYINT DEFAULT 0 NOT NULL COMMENT '软删0否 1是',
`deleted_at` DATETIME NULL,
`profile` TINYTEXT NULL COMMENT '简介',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_username` (`user_account`)
) ENGINE=InnoDB COMMENT '候选人用户表';
CREATE INDEX `idx_user_email` ON `user` (`email`);
CREATE INDEX `idx_user_phone` ON `user` (`phone`);
CREATE INDEX `idx_user_status` ON `user` (`status`, `created_at`);
-- =========================
-- company 公司表
-- =========================
CREATE TABLE `company`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT '公司ID',
`name` VARCHAR(128) NOT NULL COMMENT '公司名',
`industry` VARCHAR(128) NULL COMMENT '行业',
`size_range` VARCHAR(64) NULL COMMENT '规模如1-50/50-200',
`website` VARCHAR(255) NULL COMMENT '官网',
`address` VARCHAR(255) NULL COMMENT '地址',
`intro` TEXT NULL COMMENT '公司介绍',
`status` TINYINT DEFAULT 1 NOT NULL COMMENT '状态0禁用 1正常',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_company_name` (`name`)
) ENGINE=InnoDB COMMENT '公司表';
CREATE INDEX `idx_company_industry` ON `company` (`industry`);
CREATE INDEX `idx_company_status` ON `company` (`status`, `created_at`);
-- =========================
-- boss 招聘方账号表
-- =========================
CREATE TABLE `boss`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT 'BossID',
`username` VARCHAR(64) NOT NULL COMMENT '登录名(唯一)',
`password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希',
`boss_name` VARCHAR(64) NULL COMMENT '负责人姓名',
`phone` VARCHAR(32) NULL COMMENT '手机号',
`email` VARCHAR(128) NULL COMMENT '邮箱',
`company_id` BIGINT UNSIGNED NULL COMMENT '公司ID无外键建议配公司表',
`company_name` VARCHAR(128) NULL COMMENT '公司名(冗余字段,方便展示)',
`status` TINYINT DEFAULT 1 NOT NULL COMMENT '状态0禁用 1正常',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`is_deleted` TINYINT DEFAULT 0 NOT NULL,
`deleted_at` DATETIME NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_boss_username` (`username`)
) ENGINE=InnoDB COMMENT 'Boss招聘方账号表';
CREATE INDEX `idx_boss_company` ON `boss` (`company_id`);
CREATE INDEX `idx_boss_email` ON `boss` (`email`);
CREATE INDEX `idx_boss_phone` ON `boss` (`phone`);
-- =========================
-- job_posting 岗位表
-- =========================
CREATE TABLE `job_posting`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT '岗位ID',
`boss_id` BIGINT UNSIGNED NOT NULL COMMENT 'BossID无外键',
`company_id` BIGINT UNSIGNED NULL COMMENT '公司ID无外键',
`title` VARCHAR(128) NOT NULL COMMENT '岗位名称',
`location` VARCHAR(128) NULL COMMENT '地点',
`job_type` VARCHAR(64) NULL COMMENT '类型:全职/实习',
`salary_min` INT NULL,
`salary_max` INT NULL,
`description` TEXT NULL COMMENT '描述',
`requirement` TEXT NULL COMMENT '要求',
`status` TINYINT DEFAULT 1 NOT NULL COMMENT '状态0草稿 1发布 2关闭',
`publish_at` DATETIME NULL,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT '岗位表';
CREATE INDEX `idx_job_boss` ON `job_posting` (`boss_id`, `status`, `publish_at`);
CREATE INDEX `idx_job_company` ON `job_posting` (`company_id`, `status`, `publish_at`);
CREATE INDEX `idx_job_status_time` ON `job_posting` (`status`, `publish_at`);
CREATE INDEX `idx_job_title` ON `job_posting` (`title`);
-- =========================
-- resume 简历表
-- =========================
CREATE TABLE `resume`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT '简历ID',
`user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID无外键',
`resume_title` VARCHAR(128) DEFAULT '默认简历' NOT NULL COMMENT '简历标题',
`is_default` TINYINT DEFAULT 0 NOT NULL COMMENT '是否默认0否 1是',
`summary` TEXT NULL COMMENT '摘要',
`content` LONGTEXT NULL COMMENT '正文可存Markdown/JSON/HTML',
`attachment_url` VARCHAR(512) NULL COMMENT '附件URLPDF/Word',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
`is_deleted` TINYINT DEFAULT 0 NOT NULL,
`deleted_at` DATETIME NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT '简历表';
CREATE INDEX `idx_resume_user` ON `resume` (`user_id`, `created_at`);
CREATE INDEX `idx_resume_user_default` ON `resume` (`user_id`, `is_default`);
-- =========================
-- application 用户投递记录表
-- =========================
CREATE TABLE `application`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT '投递ID',
`user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID无外键',
`resume_id` BIGINT UNSIGNED NULL COMMENT '简历ID无外键可为空',
`job_id` BIGINT UNSIGNED NULL COMMENT '岗位ID无外键建议配岗位表',
`boss_id` BIGINT UNSIGNED NULL COMMENT 'BossID无外键冗余字段便于查',
`status` TINYINT DEFAULT 0 NOT NULL COMMENT '状态0已投递 1已撤回 2已过期',
`applied_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '投递时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_apply_user_job` (`user_id`, `job_id`)
) ENGINE=InnoDB COMMENT '用户投递记录表';
CREATE INDEX `idx_apply_boss_time` ON `application` (`boss_id`, `applied_at`);
CREATE INDEX `idx_apply_job_time` ON `application` (`job_id`, `applied_at`);
CREATE INDEX `idx_apply_status` ON `application` (`status`, `applied_at`);
CREATE INDEX `idx_apply_user_time` ON `application` (`user_id`, `applied_at`);
-- =========================
-- boss_application_decision Boss处理投递表
-- =========================
CREATE TABLE `boss_application_decision`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT 'ID',
`application_id` BIGINT UNSIGNED NOT NULL COMMENT '投递ID无外键',
`boss_id` BIGINT UNSIGNED NOT NULL COMMENT 'BossID无外键',
`decision` TINYINT NOT NULL COMMENT '处理结果1接受/进入流程 2拒绝 3待定',
`stage` TINYINT DEFAULT 0 NOT NULL COMMENT '阶段0筛选 1邀面 2面试 3Offer 4结束',
`note` VARCHAR(512) NULL COMMENT '备注',
`decided_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '处理时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_decision_application` (`application_id`)
) ENGINE=InnoDB COMMENT 'Boss处理投递接受/拒绝)表';
CREATE INDEX `idx_decision_boss_time` ON `boss_application_decision` (`boss_id`, `decided_at`);
CREATE INDEX `idx_decision_decision` ON `boss_application_decision` (`decision`, `decided_at`);
CREATE INDEX `idx_decision_stage` ON `boss_application_decision` (`stage`, `decided_at`);
-- =========================
-- interview 面试安排表
-- =========================
CREATE TABLE `interview`
(
`id` BIGINT UNSIGNED AUTO_INCREMENT COMMENT '面试ID',
`application_id` BIGINT UNSIGNED NOT NULL COMMENT '投递ID无外键',
`boss_id` BIGINT UNSIGNED NOT NULL COMMENT 'BossID无外键',
`user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID无外键',
`interview_time` DATETIME NOT NULL COMMENT '面试时间',
`mode` TINYINT DEFAULT 0 NOT NULL COMMENT '方式0线上 1线下',
`location` VARCHAR(255) NULL COMMENT '地点/会议链接',
`status` TINYINT DEFAULT 0 NOT NULL COMMENT '状态0待确认 1已确认 2已完成 3取消',
`note` VARCHAR(512) NULL,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_interview_app` (`application_id`)
) ENGINE=InnoDB COMMENT '面试安排表';
CREATE INDEX `idx_interview_boss_time` ON `interview` (`boss_id`, `interview_time`);
CREATE INDEX `idx_interview_status` ON `interview` (`status`, `interview_time`);
CREATE INDEX `idx_interview_user_time` ON `interview` (`user_id`, `interview_time`);