# 04. RailwaySystem 数据模型总览 > **文档定位**:面向技术人员与数据管理者的领域数据模型概览,重点梳理 10 大核心业务实体及其关联关系。 > **当前基线**:Final Candidate `5a49b2e2988bf23ca2a70568264c05b24dfda1b6` (`origin/feat/cicd-pipeline`) --- ## 1. 核心实体领域关系拓扑 系统底层数据模型围绕“**开班计划**”为核心驱动中枢,建立了学员、课程、师资与空间资源的网状关联模型: ```mermaid graph TD Plan["开班计划 (train_class_plan)
主键: plan_id (UUID 32位)"] Course["标准课程库 (train_course)
主键: c_id (自增序列)"] PlanCourse["本期课程绑定 (train_plan_course)
主键: plan_course_id (自增序列)"] Student["学员主档 (train_student)
主键: s_id (UUID 32位)"] Enrollment["参训档案 (train_enrollment)
主键: enrollment_id (自增序列)"] Lesson["排课课次 (train_lesson)
主键: lesson_id (自增序列)"] Classroom["理论教室 (train_classroom_info)
主键: class_room_id (UUID 32位)"] Site["实训场地 (train_training_site)
主键: site_id (UUID 32位)"] Board["电子班牌 (train_electronic_board)
主键: board_id (UUID 32位)"] Report["现场报到流水 (train_class_report)
主键: report_id (自增序列)"] Checkin["课次考勤打卡 (train_student_checkin)
主键: checkin_id (自增序列)"] Plan -->|1:N 课程绑定| PlanCourse Course -->|1:N 课程实例| PlanCourse Plan -->|1:N 班级档案| Enrollment Student -->|1:N 参训履历| Enrollment PlanCourse -->|1:N 安排课次| Lesson Plan -->|1:N 课表从属| Lesson Enrollment -->|1:N 核验流水| Report Enrollment -->|1:N 课堂考勤| Checkin Lesson -->|1:N 考勤记录| Checkin Classroom -.->|XOR 互斥场地| Lesson Site -.->|XOR 互斥场地| Lesson Classroom -->|1:N 设备绑定| Board ``` --- ## 2. 十大核心业务实体职责说明 | 核心实体表名 | 对应领域概念 | 核心业务主键 | 核心职责与外键关联 | | :--- | :--- | :--- | :--- | | **`train_class_plan`** | 开班计划 | `plan_id` (UUID 32位) | 承载培训班全生命周期(名称、起止日期、计划状态、报到截止时间、核定人数)。 | | **`train_course`** | 标准课程库 | `c_id` (自增序列) | 培训课程标准资产库(课程编码、课程名、建议课时、状态)。 | | **`train_plan_course`** | 本期课程绑定 | `plan_course_id` (自增序列) | 记录特定开班计划选用的课程,外键关联 `plan_id` 与 `c_id`,并绑定授课教师 `t_id`。 | | **`train_student`** | 学员主数据档案 | `s_id` (UUID 32位) | 学员基础档案,含脱敏姓名、散列与加密存储的身份证号、联系电话及单位名称。 | | **`train_enrollment`** | 参训履历档案 | `enrollment_id` (自增序列) | 记录学员参与特定培训班的报名档案,外键关联 `plan_id` 与 `student_id`,维护参训状态。 | | **`train_lesson`** | 具体课次安排 | `lesson_id` (自增序列) | 记录排课课次,外键关联 `plan_id`、`plan_course_id`、`t_id` 及场地(教室或实训场地互斥)。 | | **`train_classroom_info`**| 理论教室 | `class_room_id` (UUID 32位)| 教学空间实体,定义容纳人数、多媒体配置及可用状态。 | | **`train_training_site`** | 实训演练基地 | `site_id` (UUID 32位) | 室外或专业实操演练基地,外键关联课次,与教室互斥。 | | **`train_class_report`** | 现场开班报到流水 | `report_id` (自增序列) | 记录学员现场报到核验事件,外键关联 `enrollment_id`,记录核验方式与时间。 | | **`train_student_checkin`**| 课次考勤打卡记录 | `checkin_id` (自增序列) | 唯一约束 `UNIQUE(enrollment_id, lesson_id)`,记录打卡时间、考勤状态及人工修正标志。 | | **`train_electronic_board`**| 电子班牌物联终端 | `board_id` (UUID 32位) | 外键关联 `class_room_id`,记录设备序列号 `board_sn`、IP 地址及通信端点。 | --- ## 3. 关键物理约束与完整性保证 1. **唯一性约束防重叠**: - 同一培训班内同一学员只能有一条有效档案:`uq_train_enrollment(plan_id, student_id)`。 - 同一学员在同一课次只能产生一条考勤结论:`uq_train_student_checkin(enrollment_id, lesson_id)`。 - 电子班牌硬件序列号全局唯一:`uq_train_electronic_board_sn(board_sn)`。 2. **空间场地 XOR 互斥**: - 课次表(`train_lesson`)中通过数据库检查约束 `chk_lesson_venue` 强制保证理论教室 `class_room_id` 与实训场地 `site_id` 必须二选一填报,杜绝孤立课次或双重占用。 3. **时间逻辑有效性约束**: - 课次起止时间强制满足 `lesson_end_time > lesson_start_time`。 --- ## 4. 全量物理表事实源链接 关于系统全部 21 张物理表的完整字段清单、数据类型、索引策略与外键级联定义,请直接查阅冻结事实源: * 📚 **[docs/database-v2/01_table_inventory.md](../database-v2/01_table_inventory.md)**(21 张物理表全景字段字典) * 📑 **[docs/database-v2/03_constraint_index_review.md](../database-v2/03_constraint_index_review.md)**(数据库约束与索引优化审查)