213 lines
12 KiB
PL/PgSQL
213 lines
12 KiB
PL/PgSQL
-- ==============================================================================
|
|||
|
|
-- RailwaySystem 数据库 V2 迁移脚本: 002_create_new_tables.sql
|
||
|
|
-- 适用数据库: KingbaseES V009R003C018 (schema: public)
|
||
|
|
-- 执行目标: 创建数据库 V2 新增的 8 张核心培训业务表
|
||
|
|
-- 事务边界: 全程在显式事务 BEGIN ... COMMIT 中执行
|
||
|
|
-- 设计依据: RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0 及 Round 1 审查要求
|
||
|
|
-- 规范要求:
|
||
|
|
-- 1. 主键为 bigint GENERATED BY DEFAULT AS IDENTITY 或 varchar(32)
|
||
|
|
-- 2. 时间类型统一使用 timestamp,禁用 DATETIME / ON UPDATE CURRENT_TIMESTAMP
|
||
|
|
-- 3. 状态与布尔统一使用 smallint
|
||
|
|
-- 4. train_lesson.t_id 设为 NOT NULL
|
||
|
|
-- 5. train_student_score.score 设为 NOT NULL (删除 DEFAULT 0) 并增加 score >= 0 CHECK
|
||
|
|
-- 6. train_lesson 增加 venue_type 与教室/场地的单行互斥 CHECK
|
||
|
|
-- 7. 字典语义严格对齐 V2 冻结稿
|
||
|
|
-- ==============================================================================
|
||
|
|
|
||
|
|
BEGIN;
|
||
|
|
|
||
|
|
-- 1. 统一教学资源主表
|
||
|
|
CREATE TABLE train_resource (
|
||
|
|
resource_id VARCHAR(32) NOT NULL,
|
||
|
|
resource_name VARCHAR(150) NOT NULL,
|
||
|
|
resource_type SMALLINT NOT NULL,
|
||
|
|
resource_url TEXT NOT NULL,
|
||
|
|
description TEXT,
|
||
|
|
status SMALLINT NOT NULL DEFAULT 1,
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
update_by VARCHAR(64),
|
||
|
|
update_time TIMESTAMP,
|
||
|
|
remark VARCHAR(500),
|
||
|
|
del_flag CHAR(1) NOT NULL DEFAULT '0',
|
||
|
|
CONSTRAINT pk_train_resource PRIMARY KEY (resource_id)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_resource IS '统一教学资源表 (文档、视频、3D模型、VR资源、外部教学链接、其他)';
|
||
|
|
COMMENT ON COLUMN train_resource.resource_id IS '资源唯一ID';
|
||
|
|
COMMENT ON COLUMN train_resource.resource_name IS '资源名称';
|
||
|
|
COMMENT ON COLUMN train_resource.resource_type IS '资源类型 (1:文档, 2:视频, 3:3D模型, 4:VR资源, 5:外部教学链接, 6:其他)';
|
||
|
|
COMMENT ON COLUMN train_resource.resource_url IS '资源存储地址/在线链接';
|
||
|
|
COMMENT ON COLUMN train_resource.description IS '资源描述/使用说明';
|
||
|
|
COMMENT ON COLUMN train_resource.status IS '状态 (1:正常, 0:停用)';
|
||
|
|
COMMENT ON COLUMN train_resource.del_flag IS '删除标志 (0:存在, 2:删除)';
|
||
|
|
|
||
|
|
-- 2. 课程与资源多对多关联表
|
||
|
|
CREATE TABLE train_course_resource (
|
||
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||
|
|
c_id VARCHAR(32) NOT NULL,
|
||
|
|
resource_id VARCHAR(32) NOT NULL,
|
||
|
|
sort_no INTEGER DEFAULT 0,
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
CONSTRAINT pk_train_course_resource PRIMARY KEY (id)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_course_resource IS '课程与教学资源关联表 (N:M)';
|
||
|
|
COMMENT ON COLUMN train_course_resource.id IS '自增主键';
|
||
|
|
COMMENT ON COLUMN train_course_resource.c_id IS '课程ID';
|
||
|
|
COMMENT ON COLUMN train_course_resource.resource_id IS '资源ID';
|
||
|
|
COMMENT ON COLUMN train_course_resource.sort_no IS '排序号';
|
||
|
|
|
||
|
|
-- 3. 培训班与课程关联表
|
||
|
|
CREATE TABLE train_plan_course (
|
||
|
|
plan_course_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||
|
|
plan_id VARCHAR(32) NOT NULL,
|
||
|
|
c_id VARCHAR(32) NOT NULL,
|
||
|
|
sort_no INTEGER DEFAULT 0,
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
remark VARCHAR(500),
|
||
|
|
CONSTRAINT pk_train_plan_course PRIMARY KEY (plan_course_id)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_plan_course IS '培训班课程关联表 (一期培训包含哪些课程)';
|
||
|
|
COMMENT ON COLUMN train_plan_course.plan_course_id IS '培训课程实例ID (核心ID之一)';
|
||
|
|
COMMENT ON COLUMN train_plan_course.plan_id IS '培训班ID';
|
||
|
|
COMMENT ON COLUMN train_plan_course.c_id IS '课程ID';
|
||
|
|
COMMENT ON COLUMN train_plan_course.sort_no IS '排课先后顺序号';
|
||
|
|
|
||
|
|
-- 4. 参训学员登记表 (系统最核心关系: 谁参加哪个班)
|
||
|
|
CREATE TABLE train_enrollment (
|
||
|
|
enrollment_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||
|
|
plan_id VARCHAR(32) NOT NULL,
|
||
|
|
student_id VARCHAR(32) NOT NULL,
|
||
|
|
source_type SMALLINT NOT NULL,
|
||
|
|
enrollment_status SMALLINT NOT NULL DEFAULT 0,
|
||
|
|
accommodation_required SMALLINT NOT NULL,
|
||
|
|
join_time TIMESTAMP,
|
||
|
|
complete_time TIMESTAMP,
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
update_by VARCHAR(64),
|
||
|
|
update_time TIMESTAMP,
|
||
|
|
remark VARCHAR(500),
|
||
|
|
CONSTRAINT pk_train_enrollment PRIMARY KEY (enrollment_id)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_enrollment IS '参训学员登记表 (学员参加培训班全生命周期主表)';
|
||
|
|
COMMENT ON COLUMN train_enrollment.enrollment_id IS '参训档案ID (核心ID之一)';
|
||
|
|
COMMENT ON COLUMN train_enrollment.plan_id IS '培训班ID';
|
||
|
|
COMMENT ON COLUMN train_enrollment.student_id IS '学员长期主档ID引用';
|
||
|
|
COMMENT ON COLUMN train_enrollment.source_type IS '参训名单来源,具体字典值由 train_enrollment_source 定义';
|
||
|
|
COMMENT ON COLUMN train_enrollment.enrollment_status IS '参训状态 (0:待报到, 1:已报到, 2:请假, 3:放弃, 4:已完成)';
|
||
|
|
COMMENT ON COLUMN train_enrollment.accommodation_required IS '是否需要住宿 (0:否, 1:是)';
|
||
|
|
COMMENT ON COLUMN train_enrollment.join_time IS '入班报到时间';
|
||
|
|
COMMENT ON COLUMN train_enrollment.complete_time IS '培训完成/结课时间';
|
||
|
|
|
||
|
|
-- 5. 教学活动排课表 (排课课次必要包含授课教师,且场地类型与教室/实训场地严格互斥)
|
||
|
|
CREATE TABLE train_lesson (
|
||
|
|
lesson_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||
|
|
plan_course_id BIGINT NOT NULL,
|
||
|
|
t_id VARCHAR(32) NOT NULL,
|
||
|
|
start_time TIMESTAMP NOT NULL,
|
||
|
|
end_time TIMESTAMP NOT NULL,
|
||
|
|
venue_type SMALLINT NOT NULL,
|
||
|
|
class_room_id VARCHAR(32),
|
||
|
|
site_id VARCHAR(32),
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
update_by VARCHAR(64),
|
||
|
|
update_time TIMESTAMP,
|
||
|
|
remark VARCHAR(500),
|
||
|
|
CONSTRAINT pk_train_lesson PRIMARY KEY (lesson_id),
|
||
|
|
CONSTRAINT chk_lesson_venue CHECK (
|
||
|
|
(venue_type = 1 AND class_room_id IS NOT NULL AND site_id IS NULL) OR
|
||
|
|
(venue_type = 2 AND site_id IS NOT NULL AND class_room_id IS NULL)
|
||
|
|
)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_lesson IS '课次教学活动表 (具体一次上课/实训安排)';
|
||
|
|
COMMENT ON COLUMN train_lesson.lesson_id IS '课次ID (核心ID之一)';
|
||
|
|
COMMENT ON COLUMN train_lesson.plan_course_id IS '所属培训课程实例ID';
|
||
|
|
COMMENT ON COLUMN train_lesson.t_id IS '授课教师ID (课次必要组成)';
|
||
|
|
COMMENT ON COLUMN train_lesson.start_time IS '课次开始时间';
|
||
|
|
COMMENT ON COLUMN train_lesson.end_time IS '课次结束时间';
|
||
|
|
COMMENT ON COLUMN train_lesson.venue_type IS '场地类型 (1:普通教室, 2:实训场地)';
|
||
|
|
COMMENT ON COLUMN train_lesson.class_room_id IS '普通教室ID (当场地类型为教室时必填且场地为空)';
|
||
|
|
COMMENT ON COLUMN train_lesson.site_id IS '实训场地ID (当场地类型为实训场地时必填且教室为空)';
|
||
|
|
|
||
|
|
-- 6. 学员住宿安排表 (房间必填 + 床位可选)
|
||
|
|
CREATE TABLE train_accommodation (
|
||
|
|
accommodation_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||
|
|
enrollment_id BIGINT NOT NULL,
|
||
|
|
dorm_id VARCHAR(32) NOT NULL,
|
||
|
|
bed_no VARCHAR(20),
|
||
|
|
assigned_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
accommodation_status SMALLINT NOT NULL DEFAULT 0,
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
update_by VARCHAR(64),
|
||
|
|
update_time TIMESTAMP,
|
||
|
|
remark VARCHAR(500),
|
||
|
|
CONSTRAINT pk_train_accommodation PRIMARY KEY (accommodation_id)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_accommodation IS '学员住宿安排表 (本次参训住宿分配)';
|
||
|
|
COMMENT ON COLUMN train_accommodation.accommodation_id IS '住宿安排ID';
|
||
|
|
COMMENT ON COLUMN train_accommodation.enrollment_id IS '参训档案ID';
|
||
|
|
COMMENT ON COLUMN train_accommodation.dorm_id IS '分配宿舍房间ID';
|
||
|
|
COMMENT ON COLUMN train_accommodation.bed_no IS '分配床位号 (可选)';
|
||
|
|
COMMENT ON COLUMN train_accommodation.assigned_time IS '分配时间';
|
||
|
|
COMMENT ON COLUMN train_accommodation.accommodation_status IS '住宿状态 (0:预分配, 1:已入住, 2:已退宿)';
|
||
|
|
|
||
|
|
-- 7. 培训班考核成绩项配置表 (用户自由配置分值与权重)
|
||
|
|
CREATE TABLE train_score_item (
|
||
|
|
score_item_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||
|
|
plan_id VARCHAR(32) NOT NULL,
|
||
|
|
plan_course_id BIGINT,
|
||
|
|
item_name VARCHAR(100) NOT NULL,
|
||
|
|
item_type SMALLINT NOT NULL DEFAULT 1,
|
||
|
|
weight NUMERIC(5,2) NOT NULL DEFAULT 0.00,
|
||
|
|
full_score NUMERIC(5,2) NOT NULL DEFAULT 100.00,
|
||
|
|
sort_no INTEGER DEFAULT 0,
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
update_by VARCHAR(64),
|
||
|
|
update_time TIMESTAMP,
|
||
|
|
remark VARCHAR(500),
|
||
|
|
CONSTRAINT pk_train_score_item PRIMARY KEY (score_item_id)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_score_item IS '考核成绩项配置表 (某培训班的成绩构成规则)';
|
||
|
|
COMMENT ON COLUMN train_score_item.score_item_id IS '成绩项ID';
|
||
|
|
COMMENT ON COLUMN train_score_item.plan_id IS '培训班ID';
|
||
|
|
COMMENT ON COLUMN train_score_item.plan_course_id IS '关联培训课程ID (为空表示全班综合项)';
|
||
|
|
COMMENT ON COLUMN train_score_item.item_name IS '考核项目名称';
|
||
|
|
COMMENT ON COLUMN train_score_item.item_type IS '项目类型 (1:理论考试, 2:实操演练, 3:出勤考核, 4:综合评价)';
|
||
|
|
COMMENT ON COLUMN train_score_item.weight IS '所占综合权重百分比 (0~100)';
|
||
|
|
COMMENT ON COLUMN train_score_item.full_score IS '满分设定 (默认 100)';
|
||
|
|
COMMENT ON COLUMN train_score_item.sort_no IS '展示顺序';
|
||
|
|
|
||
|
|
-- 8. 学员单项得分明细表 (参训学员在某考核项上的实际成绩,无默认0,有行即有分且非负)
|
||
|
|
CREATE TABLE train_student_score (
|
||
|
|
score_id BIGINT GENERATED BY DEFAULT AS IDENTITY,
|
||
|
|
enrollment_id BIGINT NOT NULL,
|
||
|
|
score_item_id BIGINT NOT NULL,
|
||
|
|
score NUMERIC(7,2) NOT NULL,
|
||
|
|
source_type SMALLINT NOT NULL,
|
||
|
|
source_system VARCHAR(100),
|
||
|
|
source_event_id VARCHAR(100),
|
||
|
|
import_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
create_by VARCHAR(64),
|
||
|
|
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
update_by VARCHAR(64),
|
||
|
|
update_time TIMESTAMP,
|
||
|
|
remark VARCHAR(500),
|
||
|
|
CONSTRAINT pk_train_student_score PRIMARY KEY (score_id),
|
||
|
|
CONSTRAINT chk_student_score_nonneg CHECK (score >= 0.00)
|
||
|
|
);
|
||
|
|
COMMENT ON TABLE train_student_score IS '学员成绩明细表 (某学员某成绩项得分,未录入成绩不生成记录)';
|
||
|
|
COMMENT ON COLUMN train_student_score.score_id IS '成绩明细ID';
|
||
|
|
COMMENT ON COLUMN train_student_score.enrollment_id IS '参训档案ID';
|
||
|
|
COMMENT ON COLUMN train_student_score.score_item_id IS '关联成绩项ID';
|
||
|
|
COMMENT ON COLUMN train_student_score.score IS '实际得分 (非负,未录成绩不建行,0为真实0分)';
|
||
|
|
COMMENT ON COLUMN train_student_score.source_type IS '录入来源类型 (1:人工录入, 2:理论考试系统, 3:实操设备, 4:外部导入)';
|
||
|
|
COMMENT ON COLUMN train_student_score.source_system IS '来源外部系统名称';
|
||
|
|
COMMENT ON COLUMN train_student_score.source_event_id IS '来源外部事件/单号ID (用于幂等)';
|
||
|
|
COMMENT ON COLUMN train_student_score.import_time IS '成绩写入/同步时间';
|
||
|
|
|
||
|
|
COMMIT;
|