140 lines
4.9 KiB
Markdown
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 | Значение |
|
|
|
|
---
|
|
|
|
## Результат
|
|
|
|
- Созданы все таблицы с связями
|
|
- Накатанные миграции
|
|
- Схема БД готова
|