Если бы у меня был выбор дизайна таблицы, и следующие утверждения верны:
- Вы знаете максимальное количество вариантов ответа на вопрос /
- Каждый выбор просто проверяется / не проверяется.
- Каждый ответ должен быть классифицирован как правильный / неправильный, а не отмечен какой-либо шкалой. (Вроде на 70% верно.)
Затем, учитывая производительность, я бы рассмотрел следующую таблицу вместо представленной вами:
QuestionAnswers
(
UserID int,
QuestionID int,
Choice1 bool,
Choice2 bool,
...
ChoiceMax bool
)
Да, это уродливо с точки зрения нормализации, но эта денормализация снизит производительность и упростит запросы - всего одно обновление / вставка для одного вопроса. (И я обновил бы сначала и вставил бы, только если затронутые строки равны нулю.)
Также определение правильности ответа будет также более простым - со следующей таблицей:
QuestionCorrectAnswers
(
QuestionID int,
Choice1 bool,
Choice2 bool,
...
ChoiceMax bool
)
Все, что вам нужно сделать, это просто найти строку в QuestionCorrectAnswers
с той же комбинацией вариантов, что и пользователь.