Обновить Database

2026-02-27 20:10:49 +00:00
parent 1f886b95c1
commit 6853accde5
2 changed files with 83 additions and 1 deletions

83
Database.md Normal file

@@ -0,0 +1,83 @@
---
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` там, где это необходимо, для поддержания целостности данных при удалении родительских сущностей.

@@ -1 +0,0 @@
Добро пожаловать в вики.