-- ============================================================================== -- 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();