Clone
8
Database
Daniil edited this page 2026-03-18 18:36:54 +00:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
description
description
Полное описание схемы базы данных проекта

Описание базы данных: Система расписания университета

В этом правиле содержится полное описание структуры базы данных PostgreSQL, используемой в проекте.

Основные сущности и таблицы

1. Пользователи и роли (users)

Хранит учетные записи пользователей системы.

  • id (BIGSERIAL, РК)
  • username (VARCHAR(50), UNIQUE, NOT NULL) - логин
  • password (VARCHAR(255), NOT NULL) - хэш пароля (используется bcrypt через pgcrypto)
  • role (VARCHAR(20), NOT NULL, DEFAULT 'STUDENT') - роль пользователя. Возможные значения: ADMIN, TEACHER, STUDENT.
  • created_at (TIMESTAMP, DEFAULT, CURRENT_TIMESTAMP)
  • updated_at (TIMESTAMP, DEFAULT, CURRENT_TIMESTAMP)
  • full_name (VARCHAR(255)) - Полное ФИО
  • job_title (VARCHAR(255)) - Специальность преподавателя (доцент, профессор)
  • department_id (BIGINT, REFERENCES) - Идентификатор кафедры

2. Формы обучения (education_forms)

Справочник форм обучения.

  • id (BIGSERIAL, РК)
  • name (VARCHAR(100), UNIQUE, NOT NULL) - например: 'Бакалавриат', 'Магистратура', 'Специалитет'
  • description (TEXT) - Описание
  • created_at (TIMESTAMP, DEFAULT, CURRENT_TIMESTAMP) - Дата и время создания

3. Студенческие группы (student_groups)

Справочник учебных групп.

  • id (BIGSERIAL, РК)
  • name (VARCHAR(100), UNIQUE, NOT NULL) - название группы (например, 'ИВТ-21-1')
  • group_size - Количество студентов
  • education_form_id (BIGINT, FK -> education_forms.id) - привязка к форме обучения
  • course - курс
  • created_at - дата и время создания
  • department_id (BIGINT, REFERENCES) - Идентификатор кафедры

4. Подгруппы (subgroups)

Разделение групп на подгруппы (для лабораторных и практик).

  • id (BIGSERIAL, РК)
  • group_id (BIGINT, FK -> student_groups.id) - Идентификатор группы
  • name (VARCHAR(100), NOT NULL) - название подгруппы (например, 'Подгруппа 1')
  • student_capacity - Количество студентов в подгруппе

5. Дисциплины (subjects)

Справочник учебных предметов.

  • id (BIGSERIAL, РК)
  • name (VARCHAR(200), UNIQUE, NOT NULL) - название дисциплины (например, 'Высшая математика')
  • code (VARCHAR(20)) - Код предмета
  • description (TEXT) - Описание предмета
  • created_at (TIMESTAMP, DEFAULT, CURRENT_TIMESTAMP) - Дата и время создания
  • department_id (BIGINT, REFERENCES) - Идентификатор кафедры

6. Типы занятий (lesson_types)

Справочник видов учебных занятий.

  • id (BIGSERIAL, РК)
  • name (VARCHAR(50), UNIQUE, NOT NULL) - вид занятия (Лекция, Практика, Лабораторная работа)
  • color_code (VARCHAR(7), DEFAULT) - Цветовой код для типа урока
  • duration_minutes (INT, DEFAULT, 90) - Длительность урока в минутах

7. Оборудование (equipments)

Справочник доступного оборудования для аудиторий.

  • id (BIGSERIAL, РК)
  • name (VARCHAR(50), UNIQUE, NOT NULL) - например, 'Проектор', 'ПК', 'Лаборатория', 'Интерактивная доска'
  • description (TEXT) - Описание оборудования
  • inventory_number (VARCHAR(50)) - Инвентарный номер оборудования

8. Аудиторный фонд (classrooms)

Справочник аудиторий университета.

  • id (BIGSERIAL, РК)
  • name (VARCHAR(50), UNIQUE, NOT NULL) - номер/название аудитории
  • capacity (INT, NOT NULL) - вместимость (количество посадочных мест)
  • building (VARCHAR(50)) - Корпус
  • floor (INT) - Этаж
  • is_available (BOOLEAN, DEFAULT TRUE) - статус доступности аудитории для проведения пар
  • description (TEXT) - Описание аудитории
  • created_at (TIMESTAMP, DEFAULT, CURRENT_TIMESTAMP) - Дата и время создания

9. Привязка оборудования к аудиториям (classroom_equipments)

Связующая таблица (Many-to-Many) для указания, какое оборудование есть в аудитории.

  • classroom_id (BIGINT, FK -> classrooms.id) - ID аудитории
  • equipment_id (BIGINT, FK -> equipments.id) - ID оборудования
  • quantity (INT, DEFAULT, 1 CHECK -> quantity > 0) - Дата и время создания
  • notes (TEXT) - Примечания к записи

10. Привязка преподавателей к дисциплинам (teacher_subjects)

Связующая таблица (Many-to-Many). Определяет, какие предметы имеет право вести преподаватель.

  • user_id (BIGINT, FK -> users.id) - ID преподавателя
  • subject_id (BIGINT, FK -> subjects.id) - ID предмета
  • qualification_level (VARCHAR(50)) - Уровень квалификации преподавателя
  • experience_years (INT) - Опыт преподавания

11. Расписание занятий (Пар) (lessons)

Главная таблица, хранящая сетку расписания. Связывает все основные сущности в рамках одного учебного занятия.

  • id (BIGSERIAL, РК)
  • teacher_id (BIGINT, FK -> users.id) - кто ведет пару
  • group_id (BIGINT NOT NULL REFERENCES student_groups(id))
  • subject_id (BIGINT, FK -> subjects.id) - какую дисциплину ведут
  • lesson_format (VARCHAR(255) NOT NULL) - Формат урока
  • type_lesson (VARCHAR(255) NOT NULL) - Тип урока
  • classroom_id (BIGINT NOT NULL REFERENCES) - ID аудитории, в которой проходит урок
  • day (VARCHAR(255) NOT NULL) - День недели, в который проходит урок
  • week (VARCHAR(255) NOT NULL) - Номер недели, в которой проходит урок
  • time (VARCHAR(255) NOT NULL) - Время урока

12. Кафедры (departments)

  • id (BIGSERIAL, UNIQUE, PRIMARY KEY, NOT NULL)
  • name (VARCHAR(255), NOT NULL) - название кафедры
  • department_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).
  • Все связи Many-to-Many и внешние ключи настроены с ON DELETE CASCADE там, где это необходимо, для поддержания целостности данных при удалении родительских сущностей.