создал систему календарного учебного графика
This commit is contained in:
143
docs/DATABASE.md
143
docs/DATABASE.md
@@ -23,7 +23,14 @@ erDiagram
|
||||
specialties {
|
||||
BIGSERIAL id PK
|
||||
VARCHAR name
|
||||
VARCHAR specialty_code
|
||||
VARCHAR specialty_code UK
|
||||
}
|
||||
|
||||
specialty_profiles {
|
||||
BIGSERIAL id PK
|
||||
BIGINT specialty_id FK
|
||||
VARCHAR name
|
||||
TEXT description
|
||||
}
|
||||
|
||||
users {
|
||||
@@ -47,11 +54,12 @@ erDiagram
|
||||
|
||||
student_groups {
|
||||
BIGSERIAL id PK
|
||||
VARCHAR name UK
|
||||
VARCHAR name
|
||||
BIGINT group_size
|
||||
BIGINT education_form_id FK
|
||||
BIGINT department_id FK
|
||||
BIGINT specialty_code FK
|
||||
BIGINT specialty_id FK
|
||||
BIGINT specialty_profile_id FK
|
||||
BIGINT year_start_study
|
||||
TIMESTAMP created_at
|
||||
}
|
||||
@@ -140,20 +148,48 @@ erDiagram
|
||||
DATE end_date
|
||||
}
|
||||
|
||||
holidays {
|
||||
calendar_study_forms {
|
||||
BIGSERIAL id PK
|
||||
DATE date
|
||||
BIGINT academic_year_id FK
|
||||
VARCHAR description
|
||||
VARCHAR name UK
|
||||
TEXT description
|
||||
}
|
||||
|
||||
academic_calendar_matrix {
|
||||
academic_calendar_activity_types {
|
||||
BIGSERIAL id PK
|
||||
BIGINT semester_id FK
|
||||
INT course_number
|
||||
VARCHAR code UK
|
||||
VARCHAR name
|
||||
BOOLEAN allow_schedule
|
||||
VARCHAR color_code
|
||||
INT display_order
|
||||
}
|
||||
|
||||
academic_calendars {
|
||||
BIGSERIAL id PK
|
||||
VARCHAR title
|
||||
BIGINT academic_year_id FK
|
||||
BIGINT specialty_id FK
|
||||
BIGINT specialty_profile_id FK
|
||||
BIGINT study_form_id FK
|
||||
INT course_count
|
||||
TIMESTAMP created_at
|
||||
TIMESTAMP updated_at
|
||||
}
|
||||
|
||||
academic_calendar_days {
|
||||
BIGSERIAL id PK
|
||||
BIGINT calendar_id FK
|
||||
INT course_number
|
||||
DATE date
|
||||
INT week_number
|
||||
VARCHAR activity_type
|
||||
INT day_of_week
|
||||
BIGINT activity_type_id FK
|
||||
}
|
||||
|
||||
student_group_calendar_assignments {
|
||||
BIGSERIAL id PK
|
||||
BIGINT group_id FK
|
||||
BIGINT academic_year_id FK
|
||||
BIGINT calendar_id FK
|
||||
}
|
||||
|
||||
schedule_rules {
|
||||
@@ -186,9 +222,12 @@ erDiagram
|
||||
departments ||--o{ student_groups : "department_id"
|
||||
departments ||--o{ subjects : "department_id"
|
||||
education_forms ||--o{ student_groups : "education_form_id"
|
||||
specialties ||--o{ student_groups : "specialty_code"
|
||||
specialties ||--o{ specialty_profiles : "specialty_id"
|
||||
specialties ||--o{ student_groups : "specialty_id"
|
||||
specialty_profiles ||--o{ student_groups : "specialty_profile_id"
|
||||
student_groups ||--o{ subgroups : "group_id"
|
||||
student_groups ||--o{ schedule_rule_groups : "group_id"
|
||||
student_groups ||--o{ student_group_calendar_assignments : "group_id"
|
||||
users ||--o{ teacher_subjects : "user_id"
|
||||
users ||--o{ teacher_lesson_types : "user_id"
|
||||
subjects ||--o{ teacher_subjects : "subject_id"
|
||||
@@ -200,10 +239,15 @@ erDiagram
|
||||
classrooms ||--o{ classroom_equipments : "classroom_id"
|
||||
equipments ||--o{ classroom_equipments : "equipment_id"
|
||||
academic_years ||--o{ semesters : "academic_year_id"
|
||||
academic_years ||--o{ holidays : "academic_year_id"
|
||||
semesters ||--o{ academic_calendar_matrix : "semester_id"
|
||||
academic_years ||--o{ academic_calendars : "academic_year_id"
|
||||
academic_years ||--o{ student_group_calendar_assignments : "academic_year_id"
|
||||
semesters ||--o{ schedule_rules : "semester_id"
|
||||
specialties ||--o{ academic_calendar_matrix : "specialty_id"
|
||||
specialties ||--o{ academic_calendars : "specialty_id"
|
||||
specialty_profiles ||--o{ academic_calendars : "specialty_profile_id"
|
||||
calendar_study_forms ||--o{ academic_calendars : "study_form_id"
|
||||
academic_calendars ||--o{ academic_calendar_days : "calendar_id"
|
||||
academic_calendars ||--o{ student_group_calendar_assignments : "calendar_id"
|
||||
academic_calendar_activity_types ||--o{ academic_calendar_days : "activity_type_id"
|
||||
schedule_rules ||--o{ schedule_rule_groups : "schedule_rule_id"
|
||||
schedule_rules ||--o{ schedule_rule_slots : "schedule_rule_id"
|
||||
time_slots ||--o{ schedule_rule_slots : "time_slot_id"
|
||||
@@ -229,7 +273,15 @@ erDiagram
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID специальности |
|
||||
| `name` | VARCHAR(255) | Название специальности |
|
||||
| `specialty_code` | VARCHAR(255) | Код ФГОС (напр. `10.03.01`) |
|
||||
| `specialty_code` | VARCHAR(255) UNIQUE | Код ФГОС (напр. `10.03.01`) |
|
||||
|
||||
#### `specialty_profiles` — Профили обучения
|
||||
| Колонка | Тип | Описание |
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID профиля |
|
||||
| `specialty_id` | BIGINT FK → specialties | Специальность, внутри которой существует профиль |
|
||||
| `name` | VARCHAR(255) | Название профиля, уникально внутри специальности |
|
||||
| `description` | TEXT | Описание профиля |
|
||||
|
||||
### Пользователи
|
||||
|
||||
@@ -261,11 +313,12 @@ erDiagram
|
||||
| Колонка | Тип | Описание |
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID |
|
||||
| `name` | VARCHAR(100) UNIQUE | Название группы (напр. `ИВТ-21-1`) |
|
||||
| `name` | VARCHAR(100) | Название группы (напр. `ИВТ-21-1`), не уникальное |
|
||||
| `group_size` | BIGINT | Количество студентов |
|
||||
| `education_form_id` | BIGINT FK → education_forms | Форма обучения |
|
||||
| `department_id` | BIGINT FK → departments | Кафедра |
|
||||
| `specialty_code` | BIGINT FK → specialties | Специальность |
|
||||
| `specialty_id` | BIGINT FK → specialties | Специальность |
|
||||
| `specialty_profile_id` | BIGINT FK → specialty_profiles | Профиль обучения группы |
|
||||
| `year_start_study` | BIGINT | Год начала обучения, используется для вычисления текущего курса |
|
||||
|
||||
#### `subgroups` — Подгруппы
|
||||
@@ -367,23 +420,55 @@ erDiagram
|
||||
| `start_date` | DATE | Дата начала, от неё считается неделя 1 |
|
||||
| `end_date` | DATE | Дата окончания |
|
||||
|
||||
#### `holidays` — Праздники и исключения
|
||||
#### `calendar_study_forms` — Формы обучения календарного графика
|
||||
| Колонка | Тип | Описание |
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID |
|
||||
| `date` | DATE | Неучебная дата |
|
||||
| `academic_year_id` | BIGINT FK → academic_years | Учебный год |
|
||||
| `description` | VARCHAR(255) | Описание |
|
||||
| `name` | VARCHAR(100) UNIQUE | Форма обучения графика, seed: `очная` |
|
||||
| `description` | TEXT | Описание |
|
||||
|
||||
#### `academic_calendar_matrix` — Матрица учебного графика
|
||||
#### `academic_calendar_activity_types` — Коды активностей графика
|
||||
| Колонка | Тип | Описание |
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID |
|
||||
| `semester_id` | BIGINT FK → semesters | Семестр |
|
||||
| `course_number` | INT | Курс |
|
||||
| `code` | VARCHAR(10) UNIQUE | Код из Excel-графика: `Т`, `Э`, `К`, `У`, `П`, `Пд`, `Н`, `Г`, `Д`, `ПА`, `С`, `*`, `=` |
|
||||
| `name` | VARCHAR(100) | Расшифровка кода |
|
||||
| `allow_schedule` | BOOLEAN | Разрешает генерацию обычных пар |
|
||||
| `color_code` | VARCHAR(7) | HEX-цвет для редактора |
|
||||
| `display_order` | INT | Порядок вывода в UI |
|
||||
| `description` | TEXT | Дополнительное описание |
|
||||
|
||||
#### `academic_calendars` — Календарные учебные графики
|
||||
| Колонка | Тип | Описание |
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID |
|
||||
| `title` | VARCHAR(255) | Название графика |
|
||||
| `academic_year_id` | BIGINT FK → academic_years | Учебный год |
|
||||
| `specialty_id` | BIGINT FK → specialties | Специальность |
|
||||
| `week_number` | INT | Номер недели семестра |
|
||||
| `activity_type` | VARCHAR(20) | `THEORY`, `EXAM`, `VACATION`, `PRACTICE` |
|
||||
| `specialty_profile_id` | BIGINT FK → specialty_profiles | Профиль обучения |
|
||||
| `study_form_id` | BIGINT FK → calendar_study_forms | Форма обучения графика |
|
||||
| `course_count` | INT CHECK(> 0) | Количество курсов в сетке |
|
||||
| `created_at` | TIMESTAMP | Дата создания |
|
||||
| `updated_at` | TIMESTAMP | Дата обновления |
|
||||
|
||||
#### `academic_calendar_days` — Дневная сетка календарного графика
|
||||
| Колонка | Тип | Описание |
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID |
|
||||
| `calendar_id` | BIGINT FK → academic_calendars (CASCADE) | Календарный график |
|
||||
| `course_number` | INT | Номер курса |
|
||||
| `date` | DATE | Дата учебного года |
|
||||
| `week_number` | INT | Номер недели от начала учебного года |
|
||||
| `day_of_week` | INT CHECK(1–7) | День недели ISO |
|
||||
| `activity_type_id` | BIGINT FK → academic_calendar_activity_types | Код активности |
|
||||
|
||||
#### `student_group_calendar_assignments` — Назначения графиков группам
|
||||
| Колонка | Тип | Описание |
|
||||
|---------|-----|----------|
|
||||
| `id` | BIGSERIAL PK | ID |
|
||||
| `group_id` | BIGINT FK → student_groups (CASCADE) | Учебная группа |
|
||||
| `academic_year_id` | BIGINT FK → academic_years (CASCADE) | Учебный год |
|
||||
| `calendar_id` | BIGINT FK → academic_calendars (CASCADE) | Назначенный график |
|
||||
|
||||
#### `schedule_rules` — Правила расписания
|
||||
| Колонка | Тип | Описание |
|
||||
@@ -426,11 +511,13 @@ erDiagram
|
||||
4. Flyway запускается **программно** при первом обращении к БД тенанта (`TenantConfigWatcher.initDatabaseForTenant()`)
|
||||
5. Настройка `baselineOnMigrate=true` — если в БД уже есть данные, Flyway начнёт с baseline
|
||||
|
||||
> Текущая ветка календарного учебного графика является осознанным исключением: `V1__init.sql` переписан как новая базовая схема, а применение предполагает полный сброс БД без переноса старых данных.
|
||||
|
||||
### Текущие миграции
|
||||
|
||||
| Файл | Описание |
|
||||
|------|----------|
|
||||
| `V1__init.sql` | Инициализация: справочники, динамическое расписание, тестовые правила, триггеры, комментарии |
|
||||
| `V1__init.sql` | Инициализация: справочники, профили специальностей, календарные учебные графики, динамическое расписание, тестовые правила, триггеры, комментарии |
|
||||
|
||||
### Накатывание на существующих тенантов
|
||||
|
||||
|
||||
Reference in New Issue
Block a user