You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Шаг 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 |
Значение |
Результат
- Созданы все таблицы с связями
- Накатанные миграции
- Схема БД готова