Files
TestingWebApp/docs/шаги/02-database-design.md
Константин Лебединский b42a3c3d55 docs folder with steps
2026-03-21 16:06:24 +05:00

140 lines
4.9 KiB
Markdown

# Шаг 2: Проектирование базы данных
## Цель
Спроектировать и создать структуру базы данных для хранения всех сущностей системы.
---
## Задачи
### 2.1. Сущности базы данных
#### Таблица: `departments` (Подразделения)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| name | VARCHAR(255) | Название подразделения |
| created_at | TIMESTAMP | Дата создания |
| updated_at | TIMESTAMP | Дата обновления |
#### Таблица: `users` (Пользователи)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| login | VARCHAR(100) | Уникальный логин |
| password_hash | VARCHAR(255) | Хеш пароля |
| full_name | VARCHAR(255) | ФИО |
| role | ENUM | 'hr', 'manager', 'employee' |
| department_id | UUID | FK -> departments |
| is_active | BOOLEAN | Активна ли учётная запись |
| created_at | TIMESTAMP | Дата создания |
| updated_at | TIMESTAMP | Дата обновления |
#### Таблица: `tests` (Тесты)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| title | VARCHAR(255) | Название теста |
| description | TEXT | Описание (опционально) |
| passing_threshold | INTEGER | Порог зачёта (%) |
| time_limit | INTEGER | Таймер в минутах (nullable) |
| allow_back | BOOLEAN | Возврат к предыдущему |
| is_active | BOOLEAN | Активен |
| is_versioned | BOOLEAN | Есть версии |
| created_by | UUID | FK -> users |
| created_at | TIMESTAMP | Дата создания |
| updated_at | TIMESTAMP | Дата обновления |
#### Таблица: `test_versions` (Версии тестов)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| test_id | UUID | FK -> tests |
| version | INTEGER | Номер версии |
| is_active | BOOLEAN | Активная версия |
| created_at | TIMESTAMP | Дата создания |
#### Таблица: `questions` (Вопросы)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| test_version_id | UUID | FK -> test_versions |
| text | TEXT | Текст вопроса |
| question_order | INTEGER | Порядок вопроса |
| has_multiple_answers | BOOLEAN | Несколько правильных |
#### Таблица: `answer_options` (Варианты ответов)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| question_id | UUID | FK -> questions |
| text | TEXT | Текст варианта |
| is_correct | BOOLEAN | Правильный ответ |
| option_order | INTEGER | Порядок варианта |
#### Таблица: `test_assignments` (Назначения тестов)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| test_version_id | UUID | FK -> test_versions |
| assigned_by | UUID | FK -> users |
| deadline | DATE | Срок сдачи |
| max_attempts | INTEGER | Допустимое число попыток |
| created_at | TIMESTAMP | Дата назначения |
#### Таблица: `test_assignment_targets` (Получатели назначений)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| assignment_id | UUID | FK -> test_assignments |
| target_type | ENUM | 'department', 'user' |
| target_id | UUID | FK (department или user) |
#### Таблица: `test_attempts` (Попытки прохождения)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| test_version_id | UUID | FK -> test_versions |
| user_id | UUID | FK -> users |
| attempt_number | INTEGER | Номер попытки |
| status | ENUM | 'in_progress', 'completed', 'expired' |
| started_at | TIMESTAMP | Начало |
| completed_at | TIMESTAMP | Завершение |
| correct_count | INTEGER | Правильных ответов |
| total_questions | INTEGER | Всего вопросов |
| passed | BOOLEAN | Зачёт |
#### Таблица: `user_answers` (Ответы пользователя)
| Поле | Тип | Описание |
|------|-----|----------|
| id | UUID | PK |
| attempt_id | UUID | FK -> test_attempts |
| question_id | UUID | FK -> questions |
| selected_options | UUID[] | Выбранные варианты |
#### Таблица: `settings` (Настройки)
| Поле | Тип | Описание |
|------|-----|----------|
| key | VARCHAR(100) | PK |
| value | TEXT | Значение |
---
## Результат
- Созданы все таблицы с связями
- Накатанные миграции
- Схема БД готова