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