Files
railwaysystem/RuoYi-Vue/sql/train/v2/rollback/000_phase05_exact_schema.sql
T

365 lines
16 KiB
PL/PgSQL

-- ==============================================================================
-- RailwaySystem 数据库 V2 回滚基线: 000_phase05_exact_schema.sql
-- 适用数据库: KingbaseES V009R003C018 (schema: public)
-- 执行目标: 精确定义 Phase 0.5 历史基线 14 张培训业务表的完整物理 DDL
-- 依据来源: codebase-audit 13_live_database_snapshot.md 真实元数据基线
-- 包含内容:
-- 1. 14 张表物理字段定义、NOT NULL、DEFAULT
-- 2. 14 个 PRIMARY KEY (8 个 varchar(32), 6 个 bigint GENERATED BY DEFAULT AS IDENTITY)
-- 3. 7 组历史业务 UNIQUE 约束
-- 4. 24 组历史业务 FOREIGN KEY 约束
-- 5. 9 个 update_time 触发器 (绑定 func_train_update_modifytime)
-- 说明: 本文件为 Phase 0.5 原始结构标准,作为回滚操作的唯一结构依据,杜绝 CTAS 推断结构
-- ==============================================================================
-- 1. train_teacher 教师主档
CREATE TABLE train_teacher (
t_id VARCHAR(32) NOT NULL,
t_name VARCHAR(30) NOT NULL,
t_gender CHAR(2),
t_birth DATE,
t_department VARCHAR(50) NOT NULL,
t_title VARCHAR(30),
t_phone VARCHAR(20),
t_email VARCHAR(50),
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_teacher_pkey PRIMARY KEY (t_id)
);
-- 2. train_student 学员表
CREATE TABLE train_student (
s_id VARCHAR(32) NOT NULL,
s_name VARCHAR(30) NOT NULL,
s_gender CHAR(2),
s_birth DATE,
s_department VARCHAR(50) NOT NULL,
s_major VARCHAR(50) NOT NULL,
s_class VARCHAR(30),
s_phone VARCHAR(20),
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_student_pkey PRIMARY KEY (s_id)
);
-- 3. train_course 课程表
CREATE TABLE train_course (
c_id VARCHAR(32) NOT NULL,
c_name VARCHAR(100) NOT NULL,
c_type VARCHAR(30),
c_duration INTEGER,
teaching_objective TEXT,
course_content TEXT,
attach_doc TEXT,
attach_video TEXT,
attach_model_link TEXT,
model_resource_ids TEXT,
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_course_pkey PRIMARY KEY (c_id)
);
-- 4. train_class_plan 开班计划表
CREATE TABLE train_class_plan (
plan_id VARCHAR(32) NOT NULL,
plan_name VARCHAR(100) NOT NULL,
c_id VARCHAR(32) NOT NULL,
start_time TIMESTAMP NOT NULL,
end_time TIMESTAMP NOT NULL,
train_address VARCHAR(100),
t_id VARCHAR(32) NOT NULL,
recruit_num INTEGER,
apply_condition TEXT,
plan_status SMALLINT DEFAULT 0,
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_class_plan_pkey PRIMARY KEY (plan_id)
);
-- 5. train_dormitory_info 宿舍信息表
CREATE TABLE train_dormitory_info (
dorm_id VARCHAR(32) NOT NULL,
dorm_building VARCHAR(50),
dorm_room VARCHAR(30) NOT NULL,
bed_total INTEGER,
bed_used INTEGER DEFAULT 0,
lock_device_sn VARCHAR(64),
dorm_status SMALLINT DEFAULT 1,
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_dormitory_info_pkey PRIMARY KEY (dorm_id),
CONSTRAINT uk_dorm_build_room UNIQUE (dorm_building, dorm_room)
);
-- 6. train_dorm_auth 宿舍门禁表
CREATE TABLE train_dorm_auth (
auth_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
student_id VARCHAR(32) NOT NULL,
plan_id VARCHAR(32) NOT NULL,
dorm_id VARCHAR(32) NOT NULL,
bed_no VARCHAR(20),
face_sync_status SMALLINT DEFAULT 0,
auth_start TIMESTAMP,
auth_end TIMESTAMP,
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_dorm_auth_pkey PRIMARY KEY (auth_id),
CONSTRAINT uk_student_plan_dormauth UNIQUE (student_id, plan_id)
);
-- 7. train_classroom_info 教室信息表
CREATE TABLE train_classroom_info (
class_room_id VARCHAR(32) NOT NULL,
room_name VARCHAR(60) NOT NULL,
room_location VARCHAR(100),
capacity INTEGER,
room_status SMALLINT DEFAULT 1,
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_classroom_info_pkey PRIMARY KEY (class_room_id)
);
-- 8. train_training_site 实训场地表
CREATE TABLE train_training_site (
site_id VARCHAR(32) NOT NULL,
site_name VARCHAR(80) NOT NULL,
site_location VARCHAR(100),
capacity INTEGER,
site_device TEXT,
site_status SMALLINT DEFAULT 1,
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_training_site_pkey PRIMARY KEY (site_id)
);
-- 9. train_class_report 报到记录表
CREATE TABLE train_class_report (
report_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
plan_id VARCHAR(32) NOT NULL,
student_id VARCHAR(32) NOT NULL,
report_way SMALLINT,
report_device_sn VARCHAR(64),
report_time TIMESTAMP,
report_status SMALLINT DEFAULT 0,
alloc_dorm_id VARCHAR(32),
alloc_classroom_id VARCHAR(32),
alloc_site_id VARCHAR(32),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT train_class_report_pkey PRIMARY KEY (report_id),
CONSTRAINT uk_plan_stu_report UNIQUE (plan_id, student_id)
);
-- 10. train_electronic_board 电子班牌表
CREATE TABLE train_electronic_board (
board_id VARCHAR(32) NOT NULL,
board_sn VARCHAR(64) NOT NULL,
bind_classroom_id VARCHAR(32),
bind_plan_id VARCHAR(32),
board_ip VARCHAR(50),
board_content VARCHAR(500),
board_playmode SMALLINT DEFAULT 1,
support_checkin_type VARCHAR(30),
board_status SMALLINT DEFAULT 1,
last_heartbeat TIMESTAMP,
create_user VARCHAR(32) NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(200),
CONSTRAINT train_electronic_board_pkey PRIMARY KEY (board_id),
CONSTRAINT uk_board_sn UNIQUE (board_sn)
);
-- 11. train_student_checkin 考勤签到表
CREATE TABLE train_student_checkin (
checkin_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
plan_id VARCHAR(32) NOT NULL,
c_id VARCHAR(32) NOT NULL,
student_id VARCHAR(32) NOT NULL,
board_id VARCHAR(32),
checkin_way SMALLINT,
checkin_time TIMESTAMP,
checkin_status SMALLINT,
lesson_start_time TIMESTAMP,
lesson_end_time TIMESTAMP,
CONSTRAINT train_student_checkin_pkey PRIMARY KEY (checkin_id),
CONSTRAINT uk_lesson_stu_checkin UNIQUE (plan_id, c_id, student_id, lesson_start_time)
);
-- 12. train_score_info 成绩信息表 (历史旧表)
CREATE TABLE train_score_info (
score_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
plan_id VARCHAR(32),
c_id VARCHAR(32),
student_id VARCHAR(32),
course_score NUMERIC(5,2),
train_score NUMERIC(5,2),
exam_score NUMERIC(5,2),
source_type SMALLINT,
source_system VARCHAR(50),
import_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT train_score_info_pkey PRIMARY KEY (score_id),
CONSTRAINT uk_score_plan_course_stu UNIQUE (plan_id, c_id, student_id)
);
-- 13. train_study_duration 学习时长表
CREATE TABLE train_study_duration (
dur_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
student_id VARCHAR(32),
plan_id VARCHAR(32),
c_id VARCHAR(32),
device_type VARCHAR(50),
start_time TIMESTAMP,
end_time TIMESTAMP,
study_seconds INTEGER,
sync_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT train_study_duration_pkey PRIMARY KEY (dur_id)
);
-- 14. train_student_portrait 学员画像表
CREATE TABLE train_student_portrait (
portrait_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
student_id VARCHAR(32) NOT NULL,
plan_id VARCHAR(32) NOT NULL,
total_study_hour NUMERIC(8,2),
avg_score NUMERIC(5,2),
checkin_rate NUMERIC(5,2),
label_tag TEXT,
portrait_content TEXT,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT train_student_portrait_pkey PRIMARY KEY (portrait_id),
CONSTRAINT uk_stu_plan_portrait UNIQUE (student_id, plan_id)
);
-- ==============================================================================
-- 历史 24 个外键约束 (FOREIGN KEY CONSTRAINTS - 全部 ON DELETE NO ACTION)
-- ==============================================================================
-- train_class_plan (2 FK)
ALTER TABLE train_class_plan ADD CONSTRAINT fk_classplan_course
FOREIGN KEY (c_id) REFERENCES train_course (c_id) ON DELETE NO ACTION;
ALTER TABLE train_class_plan ADD CONSTRAINT fk_classplan_teacher
FOREIGN KEY (t_id) REFERENCES train_teacher (t_id) ON DELETE NO ACTION;
-- train_dorm_auth (3 FK)
ALTER TABLE train_dorm_auth ADD CONSTRAINT fk_dormauth_stu
FOREIGN KEY (student_id) REFERENCES train_student (s_id) ON DELETE NO ACTION;
ALTER TABLE train_dorm_auth ADD CONSTRAINT fk_dormauth_plan
FOREIGN KEY (plan_id) REFERENCES train_class_plan (plan_id) ON DELETE NO ACTION;
ALTER TABLE train_dorm_auth ADD CONSTRAINT fk_dormauth_dorm
FOREIGN KEY (dorm_id) REFERENCES train_dormitory_info (dorm_id) ON DELETE NO ACTION;
-- train_class_report (5 FK)
ALTER TABLE train_class_report ADD CONSTRAINT fk_report_plan
FOREIGN KEY (plan_id) REFERENCES train_class_plan (plan_id) ON DELETE NO ACTION;
ALTER TABLE train_class_report ADD CONSTRAINT fk_report_stu
FOREIGN KEY (student_id) REFERENCES train_student (s_id) ON DELETE NO ACTION;
ALTER TABLE train_class_report ADD CONSTRAINT fk_report_dorm
FOREIGN KEY (alloc_dorm_id) REFERENCES train_dormitory_info (dorm_id) ON DELETE NO ACTION;
ALTER TABLE train_class_report ADD CONSTRAINT fk_report_classroom
FOREIGN KEY (alloc_classroom_id) REFERENCES train_classroom_info (class_room_id) ON DELETE NO ACTION;
ALTER TABLE train_class_report ADD CONSTRAINT fk_report_site
FOREIGN KEY (alloc_site_id) REFERENCES train_training_site (site_id) ON DELETE NO ACTION;
-- train_electronic_board (2 FK)
ALTER TABLE train_electronic_board ADD CONSTRAINT fk_board_classroom
FOREIGN KEY (bind_classroom_id) REFERENCES train_classroom_info (class_room_id) ON DELETE NO ACTION;
ALTER TABLE train_electronic_board ADD CONSTRAINT fk_board_plan
FOREIGN KEY (bind_plan_id) REFERENCES train_class_plan (plan_id) ON DELETE NO ACTION;
-- train_student_checkin (4 FK)
ALTER TABLE train_student_checkin ADD CONSTRAINT fk_checkin_plan
FOREIGN KEY (plan_id) REFERENCES train_class_plan (plan_id) ON DELETE NO ACTION;
ALTER TABLE train_student_checkin ADD CONSTRAINT fk_checkin_course
FOREIGN KEY (c_id) REFERENCES train_course (c_id) ON DELETE NO ACTION;
ALTER TABLE train_student_checkin ADD CONSTRAINT fk_checkin_stu
FOREIGN KEY (student_id) REFERENCES train_student (s_id) ON DELETE NO ACTION;
ALTER TABLE train_student_checkin ADD CONSTRAINT fk_checkin_board
FOREIGN KEY (board_id) REFERENCES train_electronic_board (board_id) ON DELETE NO ACTION;
-- train_score_info (3 FK)
ALTER TABLE train_score_info ADD CONSTRAINT fk_score_plan
FOREIGN KEY (plan_id) REFERENCES train_class_plan (plan_id) ON DELETE NO ACTION;
ALTER TABLE train_score_info ADD CONSTRAINT fk_score_course
FOREIGN KEY (c_id) REFERENCES train_course (c_id) ON DELETE NO ACTION;
ALTER TABLE train_score_info ADD CONSTRAINT fk_score_stu
FOREIGN KEY (student_id) REFERENCES train_student (s_id) ON DELETE NO ACTION;
-- train_study_duration (3 FK)
ALTER TABLE train_study_duration ADD CONSTRAINT fk_duration_stu
FOREIGN KEY (student_id) REFERENCES train_student (s_id) ON DELETE NO ACTION;
ALTER TABLE train_study_duration ADD CONSTRAINT fk_duration_plan
FOREIGN KEY (plan_id) REFERENCES train_class_plan (plan_id) ON DELETE NO ACTION;
ALTER TABLE train_study_duration ADD CONSTRAINT fk_duration_course
FOREIGN KEY (c_id) REFERENCES train_course (c_id) ON DELETE NO ACTION;
-- train_student_portrait (2 FK)
ALTER TABLE train_student_portrait ADD CONSTRAINT fk_portrait_stu
FOREIGN KEY (student_id) REFERENCES train_student (s_id) ON DELETE NO ACTION;
ALTER TABLE train_student_portrait ADD CONSTRAINT fk_portrait_plan
FOREIGN KEY (plan_id) REFERENCES train_class_plan (plan_id) ON DELETE NO ACTION;
-- ==============================================================================
-- 历史 9 个 update_time 触发器与辅助函数
-- ==============================================================================
CREATE OR REPLACE FUNCTION func_train_update_modifytime()
RETURNS TRIGGER AS $$
BEGIN
NEW.update_time = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER trig_train_teacher_modify
BEFORE UPDATE ON train_teacher
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_student_modify
BEFORE UPDATE ON train_student
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_course_modify
BEFORE UPDATE ON train_course
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_classroom_modify
BEFORE UPDATE ON train_classroom_info
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_trainsite_modify
BEFORE UPDATE ON train_training_site
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_board_modify
BEFORE UPDATE ON train_electronic_board
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_dorminfo_modify
BEFORE UPDATE ON train_dormitory_info
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_classplan_modify
BEFORE UPDATE ON train_class_plan
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();
CREATE OR REPLACE TRIGGER trig_train_dormauth_modify
BEFORE UPDATE ON train_dorm_auth
FOR EACH ROW EXECUTE FUNCTION func_train_update_modifytime();