Files
railwaysystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql
T

252 lines
12 KiB
PL/PgSQL
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.
-- ==============================================================================
-- RailwaySystem 数据库 V2 迁移脚本: 003_alter_master_tables.sql
-- 适用数据库: KingbaseES V009R003C018 (schema: public)
-- 执行目标: 调整 8 张主数据表结构至 V2 规范模型
-- 事务边界: 全程在显式事务 BEGIN ... COMMIT 中执行
-- 设计依据: RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0 及 Round 1 审查要求
-- 包含表:
-- 1. train_teacher (保留1行数据,先加新列,旧列待008迁移并校验后设NOT NULL并删除旧列)
-- 2. train_student (0行,删除高校学籍旧列,增加企业主档与加密列,规范source_type语义)
-- 3. train_course (0行,删除旧附件字段,增加课程编码与审计列)
-- 4. train_classroom_info (0行,对齐公共审计字段)
-- 5. train_training_site (0行,对齐公共审计字段)
-- 6. train_electronic_board (0行,解绑计划ID,board_name 必填无默认空串)
-- 7. train_dormitory_info (0行,重构为容量与性别属性,删除预测默认值,增加 capacity > 0 CHECK)
-- 8. train_class_plan (0行,解绑单课程c_id与单教师t_id,升级为多课程架构)
-- ==============================================================================
BEGIN;
-- ==============================================================================
-- 步骤 1: 移除主数据表上绑定的旧 update_time 触发器
-- ==============================================================================
DROP TRIGGER IF EXISTS trig_train_teacher_modify ON train_teacher;
DROP TRIGGER IF EXISTS trig_train_student_modify ON train_student;
DROP TRIGGER IF EXISTS trig_train_course_modify ON train_course;
DROP TRIGGER IF EXISTS trig_train_classroom_modify ON train_classroom_info;
DROP TRIGGER IF EXISTS trig_train_trainsite_modify ON train_training_site;
DROP TRIGGER IF EXISTS trig_train_board_modify ON train_electronic_board;
DROP TRIGGER IF EXISTS trig_train_dorminfo_modify ON train_dormitory_info;
DROP TRIGGER IF EXISTS trig_train_classplan_modify ON train_class_plan;
-- ==============================================================================
-- 步骤 2: 显式解除阻塞主数据列删除或变更的旧外键约束 (不使用 CASCADE)
-- ==============================================================================
-- train_class_plan 上的旧外键 (指向 train_course 和 train_teacher)
ALTER TABLE train_class_plan DROP CONSTRAINT IF EXISTS fk_classplan_course;
ALTER TABLE train_class_plan DROP CONSTRAINT IF EXISTS fk_classplan_teacher;
-- train_electronic_board 上的旧外键 (指向 train_class_plan)
ALTER TABLE train_electronic_board DROP CONSTRAINT IF EXISTS fk_board_plan;
-- ==============================================================================
-- 步骤 3: 调整 train_teacher (有 1 行真实数据,暂不删除旧列,留待 008 迁移数据)
-- ==============================================================================
ALTER TABLE train_teacher
ADD COLUMN user_id BIGINT,
ADD COLUMN org_name VARCHAR(100),
ADD COLUMN job_title VARCHAR(50),
ADD COLUMN status SMALLINT DEFAULT 1,
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0';
ALTER TABLE train_teacher
ALTER COLUMN t_name TYPE VARCHAR(50),
ALTER COLUMN t_gender TYPE CHAR(1),
ALTER COLUMN t_email TYPE VARCHAR(100),
ALTER COLUMN remark TYPE VARCHAR(500);
COMMENT ON COLUMN train_teacher.user_id IS 'sys_user登录账号逻辑关联ID';
COMMENT ON COLUMN train_teacher.org_name IS '所属单位/部门名称 (由旧 t_department 迁移)';
COMMENT ON COLUMN train_teacher.job_title IS '职务/职称 (由旧 t_title 迁移)';
COMMENT ON COLUMN train_teacher.status IS '状态 (1:正常, 0:停用)';
COMMENT ON COLUMN train_teacher.del_flag IS '删除标志 (0:存在, 2:删除)';
-- ==============================================================================
-- 步骤 4: 调整 train_student (当前 0 行)
-- ==============================================================================
-- 4.1 淘汰高校模式旧字段与旧审计字段
ALTER TABLE train_student
DROP COLUMN IF EXISTS s_department,
DROP COLUMN IF EXISTS s_major,
DROP COLUMN IF EXISTS s_class,
DROP COLUMN IF EXISTS create_user;
-- 4.2 增加企业培训新主档字段、加密字段与公共审计字段
ALTER TABLE train_student
ADD COLUMN user_id BIGINT,
ADD COLUMN org_name VARCHAR(100),
ADD COLUMN s_email VARCHAR(100),
ADD COLUMN id_card_ciphertext TEXT,
ADD COLUMN id_card_hash VARCHAR(128),
ADD COLUMN id_card_last4 VARCHAR(4),
ADD COLUMN face_ref VARCHAR(255),
ADD COLUMN source_type SMALLINT DEFAULT 1 NOT NULL,
ADD COLUMN status SMALLINT DEFAULT 1 NOT NULL,
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0' NOT NULL;
ALTER TABLE train_student
ALTER COLUMN s_name TYPE VARCHAR(50),
ALTER COLUMN s_gender TYPE CHAR(1),
ALTER COLUMN remark TYPE VARCHAR(500);
COMMENT ON COLUMN train_student.user_id IS 'sys_user账号逻辑关联';
COMMENT ON COLUMN train_student.org_name IS '所属单位/部门';
COMMENT ON COLUMN train_student.id_card_ciphertext IS '身份证可逆加密密文';
COMMENT ON COLUMN train_student.id_card_hash IS '身份证精确匹配Hash (防重)';
COMMENT ON COLUMN train_student.id_card_last4 IS '身份证后四位展示';
COMMENT ON COLUMN train_student.face_ref IS '人脸特征或图像凭证引用';
COMMENT ON COLUMN train_student.source_type IS '人员主档进入系统的来源 (1:管理员录入, 2:Excel批量导入, 3:铁路内部业务平台同步)';
COMMENT ON COLUMN train_student.status IS '主档状态 (1:正常, 0:停用)';
COMMENT ON COLUMN train_student.del_flag IS '删除标志 (0:存在, 2:删除)';
-- ==============================================================================
-- 步骤 5: 调整 train_course (当前 0 行)
-- ==============================================================================
-- 5.1 淘汰旧集中附件字段 (已解耦迁入 train_resource 与 train_course_resource)
ALTER TABLE train_course
DROP COLUMN IF EXISTS attach_doc,
DROP COLUMN IF EXISTS attach_video,
DROP COLUMN IF EXISTS attach_model_link,
DROP COLUMN IF EXISTS model_resource_ids,
DROP COLUMN IF EXISTS create_user;
-- 5.2 增加课程编码与标准审计字段
ALTER TABLE train_course
ADD COLUMN c_code VARCHAR(50),
ADD COLUMN status SMALLINT DEFAULT 1 NOT NULL,
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0' NOT NULL;
ALTER TABLE train_course
ALTER COLUMN remark TYPE VARCHAR(500);
COMMENT ON COLUMN train_course.c_code IS '课程统一业务编码';
COMMENT ON COLUMN train_course.status IS '课程状态 (1:正常, 0:停用)';
COMMENT ON COLUMN train_course.del_flag IS '删除标志 (0:存在, 2:删除)';
-- ==============================================================================
-- 步骤 6: 调整 train_classroom_info (当前 0 行)
-- ==============================================================================
ALTER TABLE train_classroom_info
DROP COLUMN IF EXISTS create_user;
ALTER TABLE train_classroom_info
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0' NOT NULL;
ALTER TABLE train_classroom_info
ALTER COLUMN remark TYPE VARCHAR(500),
ALTER COLUMN room_status SET NOT NULL;
COMMENT ON COLUMN train_classroom_info.del_flag IS '删除标志 (0:存在, 2:删除)';
-- ==============================================================================
-- 步骤 7: 调整 train_training_site (当前 0 行)
-- ==============================================================================
ALTER TABLE train_training_site
DROP COLUMN IF EXISTS create_user;
ALTER TABLE train_training_site
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0' NOT NULL;
ALTER TABLE train_training_site
ALTER COLUMN remark TYPE VARCHAR(500),
ALTER COLUMN site_status SET NOT NULL;
COMMENT ON COLUMN train_training_site.del_flag IS '删除标志 (0:存在, 2:删除)';
-- ==============================================================================
-- 步骤 8: 调整 train_electronic_board (当前 0 行)
-- ==============================================================================
-- 8.1 移除计划绑定列与旧播放字段
ALTER TABLE train_electronic_board
DROP COLUMN IF EXISTS bind_plan_id,
DROP COLUMN IF EXISTS board_content,
DROP COLUMN IF EXISTS board_playmode,
DROP COLUMN IF EXISTS create_user;
-- 8.2 增加设备名称 (必填,严禁空串默认)、API端点与审计字段
ALTER TABLE train_electronic_board
ADD COLUMN board_name VARCHAR(100) NOT NULL,
ADD COLUMN api_endpoint VARCHAR(255),
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0' NOT NULL;
ALTER TABLE train_electronic_board
ALTER COLUMN support_checkin_type TYPE VARCHAR(50),
ALTER COLUMN remark TYPE VARCHAR(500),
ALTER COLUMN board_status SET NOT NULL;
COMMENT ON COLUMN train_electronic_board.board_name IS '电子班牌名称 (必填)';
COMMENT ON COLUMN train_electronic_board.api_endpoint IS '设备交互/推送接口地址';
COMMENT ON COLUMN train_electronic_board.bind_classroom_id IS '绑定的物理教室ID';
COMMENT ON COLUMN train_electronic_board.del_flag IS '删除标志 (0:存在, 2:删除)';
-- ==============================================================================
-- 步骤 9: 调整 train_dormitory_info (当前 0 行)
-- ==============================================================================
-- 9.1 移除静态床位统计列
ALTER TABLE train_dormitory_info
DROP COLUMN IF EXISTS bed_total,
DROP COLUMN IF EXISTS bed_used,
DROP COLUMN IF EXISTS create_user;
-- 9.2 增加楼层、房间额定容量、适用性别 (杜绝业务默认值猜测,增加容量正数 CHECK)
ALTER TABLE train_dormitory_info
ADD COLUMN dorm_floor VARCHAR(20) NOT NULL,
ADD COLUMN capacity INTEGER NOT NULL,
ADD COLUMN gender_type SMALLINT DEFAULT 0 NOT NULL,
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0' NOT NULL;
ALTER TABLE train_dormitory_info
ALTER COLUMN dorm_building SET NOT NULL,
ALTER COLUMN dorm_room SET NOT NULL,
ALTER COLUMN remark TYPE VARCHAR(500),
ALTER COLUMN dorm_status SET NOT NULL;
ALTER TABLE train_dormitory_info DROP CONSTRAINT IF EXISTS chk_dorm_capacity;
ALTER TABLE train_dormitory_info ADD CONSTRAINT chk_dorm_capacity CHECK (capacity > 0);
COMMENT ON COLUMN train_dormitory_info.dorm_floor IS '所在楼层 (管理员真实录入)';
COMMENT ON COLUMN train_dormitory_info.capacity IS '房间核定床位容量 (正整数,无默认值)';
COMMENT ON COLUMN train_dormitory_info.gender_type IS '适用性别 (0:不限, 1:男, 2:女)';
COMMENT ON COLUMN train_dormitory_info.del_flag IS '删除标志 (0:存在, 2:删除)';
-- ==============================================================================
-- 步骤 10: 调整 train_class_plan (当前 0 行)
-- ==============================================================================
-- 10.1 彻底剥离旧单课 c_id 和旧单教师 t_id
ALTER TABLE train_class_plan
DROP COLUMN IF EXISTS c_id,
DROP COLUMN IF EXISTS t_id,
DROP COLUMN IF EXISTS create_user;
-- 10.2 增加报到截止时间与标准审计列
ALTER TABLE train_class_plan
ADD COLUMN report_deadline TIMESTAMP,
ADD COLUMN create_by VARCHAR(64),
ADD COLUMN update_by VARCHAR(64),
ADD COLUMN del_flag CHAR(1) DEFAULT '0' NOT NULL;
ALTER TABLE train_class_plan
ALTER COLUMN plan_name TYPE VARCHAR(150),
ALTER COLUMN train_address TYPE VARCHAR(200),
ALTER COLUMN remark TYPE VARCHAR(500),
ALTER COLUMN plan_status SET NOT NULL;
COMMENT ON COLUMN train_class_plan.report_deadline IS '学员现场报到截止时间';
COMMENT ON COLUMN train_class_plan.del_flag IS '删除标志 (0:存在, 2:删除)';
COMMIT;