Вопросы с несколькими вариантами ответов проектирование схемы базы данных

Допустим, мы хотим создать приложение для викторины, где пользователь может создать викторину со следующими характеристиками:

  • Пользователи могут выбирать вопросы для викторины из набора заранее определенных вопросов.
  • Каждый вопрос может иметь несколько вариантов (choices); 2, 3, 5, 6, 9, это не имеет значения.
  • Вопросы и их варианты добавляются администраторами (через Django Admin API)

Я придумал довольно простой дизайн схемы:

enter image description here

Вот что происходит в приведенной выше схеме:

  • Каждый вопрос может иметь несколько вариантов ответа
  • QA сопоставляет вопрос с ответом, выбранным пользователем, который выполнил/прошел тест
  • Каждый представленный тест может содержать несколько вопросов вместе с ответами

Одним из недостатков этого подхода является то, что я могу сопоставить вопросы с ответами, которые не входят в список вариантов ответа данного конкретного вопроса. Например, я создаю два вопроса;

  1. Are you Married?
  2. What is your favorite drink?

На первый вопрос у меня есть следующие варианты:

  1. Yes
  2. No

Для второго вопроса у меня есть следующие варианты:

  1. Water
  2. Soda
  3. Fresh Juice

Используя Django Admin API, я могу сопоставить первый вопрос; Are you married? с выбором второго варианта; soda

Как я могу избежать этого? И какие еще недостатки вы видите в этом подходе? Есть ли лучший способ разработки такого рода схем???

Я использую Django для этого конкретного проекта.

Существуют различные варианты дизайна, но ваша схема хорошо подходит для своей цели (предполагается, что вы хотите иметь гибкость в отношении всего набора вопросов/ответов).

Я рекомендую использовать ModelMultipleChoiceField в Django для поля выбора в вашей модели QA. Оно будет содержать набор queryset, содержащий связанные варианты выбора (которые вы получаете путем запроса всех вариантов выбора, связанных с вопросом в модели Question). Таким образом, вы ограничиваете выбор только теми вариантами, которые связаны с вопросом.

Если набор вопросов/ответов фиксирован и меняются только выбранные вопросы/ответы, тогда могут быть лучшие варианты (например, вы можете использовать метод Django choices для определения вариантов ответа на вопрос, вместо того чтобы помещать их в отдельную модель).

Вернуться на верх