docs folder with steps
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# Шаг 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 | Значение |
|
||||
|
||||
---
|
||||
|
||||
## Результат
|
||||
|
||||
- Созданы все таблицы с связями
|
||||
- Накатанные миграции
|
||||
- Схема БД готова
|
||||
Reference in New Issue
Block a user