diff --git a/Database.md b/Database.md index f046f38..4947190 100644 --- a/Database.md +++ b/Database.md @@ -14,96 +14,96 @@ description: Полное описание схемы базы данных пр - `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` -- `updated_at` -- `full_name` -- `job_title` -- `department_id` +- `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` -- `created_at` +- `description` (TEXT) - Описание +- `created_at` (TIMESTAMP, DEFAULT, CURRENT_TIMESTAMP) - Дата и время создания ### 3. Студенческие группы (`student_groups`) Справочник учебных групп. - `id` (BIGSERIAL, РК) - `name` (VARCHAR(100), UNIQUE, NOT NULL) - название группы (например, 'ИВТ-21-1') -- `group_size` +- `group_size` - Количество студентов - `education_form_id` (BIGINT, FK -> education_forms.id) - привязка к форме обучения -- `course` -- `created_at` -- `department_id` +- `course` - курс +- `created_at` - дата и время создания +- `department_id` (BIGINT, REFERENCES) - Идентификатор кафедры ### 4. Подгруппы (`subgroups`) Разделение групп на подгруппы (для лабораторных и практик). - `id` (BIGSERIAL, РК) -- `group_id` (BIGINT, FK -> student_groups.id) +- `group_id` (BIGINT, FK -> student_groups.id) - Идентификатор группы - `name` (VARCHAR(100), NOT NULL) - название подгруппы (например, 'Подгруппа 1') -- `student_capacity` +- `student_capacity` - Количество студентов в подгруппе ### 5. Дисциплины (`subjects`) Справочник учебных предметов. - `id` (BIGSERIAL, РК) - `name` (VARCHAR(200), UNIQUE, NOT NULL) - название дисциплины (например, 'Высшая математика') -- `code` -- `description` -- `created_at` -- `department_id` +- `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` -- `duration_minutes` +- `color_code` (VARCHAR(7), DEFAULT) - Цветовой код для типа урока +- `duration_minutes` (INT, DEFAULT, 90) - Длительность урока в минутах ### 7. Оборудование (`equipments`) Справочник доступного оборудования для аудиторий. - `id` (BIGSERIAL, РК) - `name` (VARCHAR(50), UNIQUE, NOT NULL) - например, 'Проектор', 'ПК', 'Лаборатория', 'Интерактивная доска' -- `description` -- `inventory_number` +- `description` (TEXT) - Описание оборудования +- `inventory_number` (VARCHAR(50)) - Инвентарный номер оборудования ### 8. Аудиторный фонд (`classrooms`) Справочник аудиторий университета. - `id` (BIGSERIAL, РК) - `name` (VARCHAR(50), UNIQUE, NOT NULL) - номер/название аудитории - `capacity` (INT, NOT NULL) - вместимость (количество посадочных мест) -- `building` -- `floor` +- `building` (VARCHAR(50)) - Корпус +- `floor` (INT) - Этаж - `is_available` (BOOLEAN, DEFAULT TRUE) - статус доступности аудитории для проведения пар -- `description` -- `created_at` +- `description` (TEXT) - Описание аудитории +- `created_at` (TIMESTAMP, DEFAULT, CURRENT_TIMESTAMP) - Дата и время создания ### 9. Привязка оборудования к аудиториям (`classroom_equipments`) Связующая таблица (Many-to-Many) для указания, какое оборудование есть в аудитории. -- `classroom_id` (BIGINT, FK -> classrooms.id) -- `equipment_id` (BIGINT, FK -> equipments.id) -- `quantity` -- `notes` +- `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) -- `subject_id` (BIGINT, FK -> subjects.id) -- `qualification_level` -- `experience_years` +- `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` +- `group_id` (BIGINT NOT NULL REFERENCES student_groups(id)) - `subject_id` (BIGINT, FK -> subjects.id) - какую дисциплину ведут -- `lesson_format` -- `type_lesson` -- `classroom_id` -- `day` -- `week` -- `time` +- `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)