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.

4.9 KiB

Шаг 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 Значение

Результат

  • Созданы все таблицы с связями
  • Накатанные миграции
  • Схема БД готова