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

252 lines
12 KiB
PL/PgSQL
Raw Normal View History

-- ==============================================================================
-- 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 dept_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.dept_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 dept_name VARCHAR(100),
ADD COLUMN card_no VARCHAR(50),
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.dept_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;