Files
magistr/.agent/rules/database_schema.md

5.5 KiB
Raw Blame History

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.

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

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

  • id (BIGSERIAL, РК)
  • name (VARCHAR(100), UNIQUE, NOT NULL) - например: 'Бакалавриат', 'Магистратура', 'Специалитет'

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

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

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

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

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

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

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

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

  • id (BIGSERIAL, РК)
  • name (VARCHAR(200), UNIQUE, NOT NULL) - название дисциплины (например, 'Высшая математика')

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

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

  • id (BIGSERIAL, РК)
  • name (VARCHAR(50), UNIQUE, NOT NULL) - вид занятия (Лекция, Практика, Лабораторная работа)

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

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

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

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

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

  • id (BIGSERIAL, РК)
  • name (VARCHAR(50), UNIQUE, NOT NULL) - номер/название аудитории
  • capacity (INT, NOT NULL) - вместимость (количество посадочных мест)
  • is_available (BOOLEAN, DEFAULT TRUE) - статус доступности аудитории для проведения пар

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

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

  • classroom_id (BIGINT, FK -> classrooms.id)
  • equipment_id (BIGINT, FK -> equipments.id)

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

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

  • user_id (BIGINT, FK -> users.id)
  • subject_id (BIGINT, FK -> subjects.id)

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

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

  • id (BIGSERIAL, РК)
  • teacher_id (BIGINT, FK -> users.id) - кто ведет пару
  • subject_id (BIGINT, FK -> subjects.id) - какую дисциплину ведут
  • lesson_type_id (BIGINT, FK -> lesson_types.id) - вид занятия (лекция/практика)
  • classroom_id (BIGINT, FK -> classrooms.id) - где проходит
  • group_id (BIGINT, FK -> student_groups.id) - у какой группы
  • subgroup_id (BIGINT, FK -> subgroups.id, NULLABLE) - конкретная подгруппа (если пара не у всей группы)
  • day_of_week (INT, NOT NULL) - день недели (1=Понедельник ... 7=Воскресенье)
  • is_even_week (BOOLEAN, NOT NULL) - признак четности недели (TRUE = четная, FALSE = нечетная)
  • start_time (TIME, NOT NULL) - время начала пары (например: '08:00:00')
  • end_time (TIME, NOT NULL) - время окончания пары (например: '09:30:00')

Особенности архитектуры БД

  • Используется расширение pgcrypto для шифрования паролей пользователей (bcrypt).
  • Все связи Many-to-Many и внешние ключи настроены с ON DELETE CASCADE там, где это необходимо, для поддержания целостности данных при удалении родительских сущностей.