Обновить Database

2026-03-18 17:56:32 +00:00
parent a964c1d071
commit 2c534fcf53

@@ -18,7 +18,7 @@ description: Полное описание схемы базы данных пр
- `updated_at` - `updated_at`
- `full_name` - `full_name`
- `job_title` - `job_title`
- `departement_id` - `department_id`
### 2. Формы обучения (`education_forms`) ### 2. Формы обучения (`education_forms`)
Справочник форм обучения. Справочник форм обучения.
@@ -31,59 +31,107 @@ description: Полное описание схемы базы данных пр
Справочник учебных групп. Справочник учебных групп.
- `id` (BIGSERIAL, РК) - `id` (BIGSERIAL, РК)
- `name` (VARCHAR(100), UNIQUE, NOT NULL) - название группы (например, 'ИВТ-21-1') - `name` (VARCHAR(100), UNIQUE, NOT NULL) - название группы (например, 'ИВТ-21-1')
- `group_size`
- `education_form_id` (BIGINT, FK -> education_forms.id) - привязка к форме обучения - `education_form_id` (BIGINT, FK -> education_forms.id) - привязка к форме обучения
- `course`
- `created_at`
- `department_id`
### 4. Подгруппы (`subgroups`) ### 4. Подгруппы (`subgroups`)
Разделение групп на подгруппы (для лабораторных и практик). Разделение групп на подгруппы (для лабораторных и практик).
- `id` (BIGSERIAL, РК) - `id` (BIGSERIAL, РК)
- `group_id` (BIGINT, FK -> student_groups.id) - `group_id` (BIGINT, FK -> student_groups.id)
- `name` (VARCHAR(100), NOT NULL) - название подгруппы (например, 'Подгруппа 1') - `name` (VARCHAR(100), NOT NULL) - название подгруппы (например, 'Подгруппа 1')
- `student_capacity`
### 5. Дисциплины (`subjects`) ### 5. Дисциплины (`subjects`)
Справочник учебных предметов. Справочник учебных предметов.
- `id` (BIGSERIAL, РК) - `id` (BIGSERIAL, РК)
- `name` (VARCHAR(200), UNIQUE, NOT NULL) - название дисциплины (например, 'Высшая математика') - `name` (VARCHAR(200), UNIQUE, NOT NULL) - название дисциплины (например, 'Высшая математика')
- `code`
- `description`
- `created_at`
- `department_id`
### 6. Типы занятий (`lesson_types`) ### 6. Типы занятий (`lesson_types`)
Справочник видов учебных занятий. Справочник видов учебных занятий.
- `id` (BIGSERIAL, РК) - `id` (BIGSERIAL, РК)
- `name` (VARCHAR(50), UNIQUE, NOT NULL) - вид занятия (Лекция, Практика, Лабораторная работа) - `name` (VARCHAR(50), UNIQUE, NOT NULL) - вид занятия (Лекция, Практика, Лабораторная работа)
- `color_code`
- `duration_minutes`
### 7. Оборудование (`equipments`) ### 7. Оборудование (`equipments`)
Справочник доступного оборудования для аудиторий. Справочник доступного оборудования для аудиторий.
- `id` (BIGSERIAL, РК) - `id` (BIGSERIAL, РК)
- `name` (VARCHAR(50), UNIQUE, NOT NULL) - например, 'Проектор', 'ПК', 'Лаборатория', 'Интерактивная доска' - `name` (VARCHAR(50), UNIQUE, NOT NULL) - например, 'Проектор', 'ПК', 'Лаборатория', 'Интерактивная доска'
- `description`
- `inventory_number`
### 8. Аудиторный фонд (`classrooms`) ### 8. Аудиторный фонд (`classrooms`)
Справочник аудиторий университета. Справочник аудиторий университета.
- `id` (BIGSERIAL, РК) - `id` (BIGSERIAL, РК)
- `name` (VARCHAR(50), UNIQUE, NOT NULL) - номер/название аудитории - `name` (VARCHAR(50), UNIQUE, NOT NULL) - номер/название аудитории
- `capacity` (INT, NOT NULL) - вместимость (количество посадочных мест) - `capacity` (INT, NOT NULL) - вместимость (количество посадочных мест)
- `building`
- `floor`
- `is_available` (BOOLEAN, DEFAULT TRUE) - статус доступности аудитории для проведения пар - `is_available` (BOOLEAN, DEFAULT TRUE) - статус доступности аудитории для проведения пар
- `description`
- `created_at`
### 9. Привязка оборудования к аудиториям (`classroom_equipments`) ### 9. Привязка оборудования к аудиториям (`classroom_equipments`)
Связующая таблица (Many-to-Many) для указания, какое оборудование есть в аудитории. Связующая таблица (Many-to-Many) для указания, какое оборудование есть в аудитории.
- `classroom_id` (BIGINT, FK -> classrooms.id) - `classroom_id` (BIGINT, FK -> classrooms.id)
- `equipment_id` (BIGINT, FK -> equipments.id) - `equipment_id` (BIGINT, FK -> equipments.id)
- `quantity`
- `notes`
### 10. Привязка преподавателей к дисциплинам (`teacher_subjects`) ### 10. Привязка преподавателей к дисциплинам (`teacher_subjects`)
Связующая таблица (Many-to-Many). Определяет, какие предметы имеет право вести преподаватель. Связующая таблица (Many-to-Many). Определяет, какие предметы имеет право вести преподаватель.
- `user_id` (BIGINT, FK -> users.id) - `user_id` (BIGINT, FK -> users.id)
- `subject_id` (BIGINT, FK -> subjects.id) - `subject_id` (BIGINT, FK -> subjects.id)
- `qualification_level`
- `experience_years`
### 11. Расписание занятий (Пар) (`lessons`) ### 11. Расписание занятий (Пар) (`lessons`)
Главная таблица, хранящая сетку расписания. Связывает все основные сущности в рамках одного учебного занятия. Главная таблица, хранящая сетку расписания. Связывает все основные сущности в рамках одного учебного занятия.
- `id` (BIGSERIAL, РК) - `id` (BIGSERIAL, РК)
- `teacher_id` (BIGINT, FK -> users.id) - кто ведет пару - `teacher_id` (BIGINT, FK -> users.id) - кто ведет пару
- `group_id`
- `subject_id` (BIGINT, FK -> subjects.id) - какую дисциплину ведут - `subject_id` (BIGINT, FK -> subjects.id) - какую дисциплину ведут
- `lesson_type_id` (BIGINT, FK -> lesson_types.id) - вид занятия (лекция/практика) - `lesson_format`
- `classroom_id` (BIGINT, FK -> classrooms.id) - где проходит - `type_lesson`
- `group_id` (BIGINT, FK -> student_groups.id) - у какой группы - `classroom_id`
- `subgroup_id` (BIGINT, FK -> subgroups.id, NULLABLE) - конкретная подгруппа (если пара не у всей группы) - `day`
- `day_of_week` (INT, NOT NULL) - день недели (1=Понедельник ... 7=Воскресенье) - `week`
- `is_even_week` (BOOLEAN, NOT NULL) - признак четности недели (TRUE = четная, FALSE = нечетная) - `time`
- `start_time` (TIME, NOT NULL) - время начала пары (например: '08:00:00')
- `end_time` (TIME, NOT NULL) - время окончания пары (например: '09:30:00') ### 12. Кафедры (`departments`)
`id` (BIGSERIAL, UNIQUE, PRIMARY KEY, NOT NULL)
`name` (VARCHAR(255), NOT NULL) - название кафедры
`code` (BIGINT, UNIQUE, NOT NULL)
### 13. Данные к составлению расписания (`schedule_data`)
`id` (BIGSERIAL, PRIMARY KEY)
`department_id` (BIGINT, NOT NULL) - Идентификатор кафедры
`semester` (INT, NOT NULL) - Номер семестра
`group_id` (BIGINT, NOT NULL) - Идентификатор группы
`subjects_id` (BIGINT, NOT NULL) - Идентификатор предмета
`lesson_type_id` (BIGINT, NOT NULL) - Идентификатор типа занятия
`number_of_hours` (INT, NOT NULL) - Количество часов
`is_division` (BOOLEAN, DEFAULT, NOT NULL) - Является ли занятие разделенным
`teacher_id` (BIGINT, NOT NULL) - Идентификатор преподавателя
`semester_type` (VARCHAR(255), NOT NULL) - Тип семестра (Весенний, Осенний)
`period` (VARCHAR(255), NOT NULL) - период занятий (год/год)
### 14. (`flyway_schema_history`)
### 15. (`specialties`)
`id` (BIGSERIAL, PRIMARY KEY)
`name` (VARCHAR(255), NOT NULL)
`specialty_code` (VARCHAR(255), NOT NULL)
## Особенности архитектуры БД ## Особенности архитектуры БД
- Используется расширение `pgcrypto` для шифрования паролей пользователей (`bcrypt`). - Используется расширение `pgcrypto` для шифрования паролей пользователей (`bcrypt`).