83 lines
4.1 KiB
PL/PgSQL
83 lines
4.1 KiB
PL/PgSQL
-- ==============================================================================
|
|
-- RailwaySystem 数据库 V2 迁移脚本: 006_indexes.sql
|
|
-- 适用数据库: KingbaseES V009R003C018 (schema: public)
|
|
-- 执行目标: 创建业务核心查询索引、外键索引与部分唯一索引
|
|
-- 事务边界: 全程在显式事务 BEGIN ... COMMIT 中执行
|
|
-- 设计依据: RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0 及 Round 1 审查要求
|
|
-- 核心原则:
|
|
-- 1. 主键与普通 UNIQUE 自动建立的唯一索引不重复创建
|
|
-- 2. 为所有外键关联列建立独立索引,杜绝全表扫描与锁表
|
|
-- 3. 排课多维冲突检测建立针对性复合时间索引
|
|
-- 4. 学习记录来源事件使用双非空过滤的部分唯一索引防逃逸
|
|
-- ==============================================================================
|
|
|
|
BEGIN;
|
|
|
|
-- 1. train_teacher 教师表索引
|
|
CREATE INDEX idx_teacher_user_id ON train_teacher (user_id);
|
|
CREATE INDEX idx_teacher_name ON train_teacher (t_name);
|
|
|
|
-- 2. train_student 学员表索引
|
|
CREATE INDEX idx_student_name ON train_student (s_name);
|
|
CREATE INDEX idx_student_org ON train_student (org_name);
|
|
CREATE INDEX idx_student_user_id ON train_student (user_id);
|
|
|
|
-- 3. train_course 课程表索引
|
|
CREATE INDEX idx_course_name ON train_course (c_name);
|
|
CREATE INDEX idx_course_status ON train_course (status);
|
|
|
|
-- 4. train_resource 教学资源表索引
|
|
CREATE INDEX idx_resource_type ON train_resource (resource_type);
|
|
CREATE INDEX idx_resource_status ON train_resource (status);
|
|
|
|
-- 5. train_course_resource 课程资源关联表索引
|
|
CREATE INDEX idx_course_resource_course ON train_course_resource (c_id);
|
|
CREATE INDEX idx_course_resource_resource ON train_course_resource (resource_id);
|
|
|
|
-- 6. train_electronic_board 电子班牌外键索引
|
|
CREATE INDEX idx_board_classroom ON train_electronic_board (bind_classroom_id);
|
|
|
|
-- 7. train_plan_course 培训班课程表索引
|
|
CREATE INDEX idx_plan_course_plan ON train_plan_course (plan_id);
|
|
CREATE INDEX idx_plan_course_course ON train_plan_course (c_id);
|
|
|
|
-- 8. train_enrollment 参训学员表索引
|
|
CREATE INDEX idx_enrollment_plan ON train_enrollment (plan_id);
|
|
CREATE INDEX idx_enrollment_student ON train_enrollment (student_id);
|
|
CREATE INDEX idx_enrollment_status ON train_enrollment (enrollment_status);
|
|
|
|
-- 9. train_lesson 排课表多维时间冲突检索复合索引
|
|
CREATE INDEX idx_lesson_plan_course ON train_lesson (plan_course_id);
|
|
CREATE INDEX idx_lesson_teacher_time ON train_lesson (t_id, start_time, end_time);
|
|
CREATE INDEX idx_lesson_classroom_time ON train_lesson (class_room_id, start_time, end_time);
|
|
CREATE INDEX idx_lesson_site_time ON train_lesson (site_id, start_time, end_time);
|
|
|
|
-- 10. train_accommodation 住宿安排表索引
|
|
CREATE INDEX idx_accommodation_dorm ON train_accommodation (dorm_id);
|
|
|
|
-- 11. train_student_checkin 考勤打卡表索引
|
|
CREATE INDEX idx_checkin_lesson ON train_student_checkin (lesson_id);
|
|
CREATE INDEX idx_checkin_enrollment ON train_student_checkin (enrollment_id);
|
|
CREATE INDEX idx_checkin_board ON train_student_checkin (board_id);
|
|
|
|
-- 12. train_score_item 成绩项配置表索引
|
|
CREATE INDEX idx_score_item_plan ON train_score_item (plan_id);
|
|
CREATE INDEX idx_score_item_plan_course ON train_score_item (plan_course_id);
|
|
|
|
-- 13. train_student_score 学员成绩明细表索引
|
|
CREATE INDEX idx_student_score_enrollment ON train_student_score (enrollment_id);
|
|
CREATE INDEX idx_student_score_item ON train_student_score (score_item_id);
|
|
|
|
-- 14. train_study_duration 学习时长表索引
|
|
CREATE INDEX idx_study_enrollment ON train_study_duration (enrollment_id);
|
|
CREATE INDEX idx_study_plan_course ON train_study_duration (plan_course_id);
|
|
CREATE INDEX idx_study_resource ON train_study_duration (resource_id);
|
|
CREATE INDEX idx_study_sync ON train_study_duration (sync_time);
|
|
|
|
-- 15. train_study_duration 幂等防重部分唯一索引 (必须 source_system 与 source_event_id 均非空方防重)
|
|
CREATE UNIQUE INDEX uq_idx_study_source_event
|
|
ON train_study_duration (source_system, source_event_id)
|
|
WHERE source_system IS NOT NULL AND source_event_id IS NOT NULL;
|
|
|
|
COMMIT;
|