Используйте сущности Poll, Question, Option, Submission и Answer. Один ответ связывает прохождение, вопрос и выбранный вариант; правильность хранить не требуется.
Сервис опросов: определение столиц стран
Используйте сущности Poll, Question, Option, Submission и Answer. Один ответ связывает прохождение, вопрос и выбранный вариант; правильность хранить не требуется.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать сервис для проведения опросов. По предоставленной ссылке пользователь видит заголовок, описание и перечень вопросов с вариантами ответов. На каждый вопрос выбирается единственный вариант, правильность ответа не важна. Требуется спроектировать модели данных для хранения такой информации.
Пример вопросов и ответов:
Столица Германии? Берлин * Гамбург МюнхенКёльн
Столица Таиланда? Нонтхабури Пакрет Бангкок Чиангмай
Ответ
Используйте сущности Poll, Question, Option, Submission и Answer. Один ответ связывает прохождение, вопрос и выбранный вариант; правильность хранить не требуется.
Минимальная схема:
Poll(id, slug, title, description)— опрос по уникальной ссылке.Question(id, poll_id, text, position)— упорядоченные вопросы.Option(id, question_id, text, position)— варианты.Submission(id, poll_id, user_id nullable, created_at)— отдельное прохождение.Answer(submission_id, question_id, option_id)— выбор.
Уникальность (submission_id, question_id) запрещает несколько вариантов на один вопрос. Проверяйте, что option относится к question, а question — к опросу прохождения; при необходимости закрепите это составными внешними ключами. Поля is_correct и оценка здесь не нужны. Изменение опубликованного опроса требует версионирования либо запрета правок, чтобы старые ответы не потеряли смысл.