Справка по SQL-запросам — оценка тестов с множественным выбором

StackOverflow https://stackoverflow.com/questions/22417

  •  09-06-2019
  •  | 
  •  

Вопрос

Скажем, у меня есть таблица Student, у нее есть int ID.У меня есть фиксированный набор из 10 вопросов с несколькими вариантами ответов и 5 возможными ответами.У меня есть нормализованная таблица ответов с идентификатором вопроса, Student.ответ (1-5) и Student.ID.

Я пытаюсь написать один запрос, который вернет все оценки, превышающие определенный процент.С этой целью я написал простую пользовательскую функцию, которая принимает Student.ответы и правильный ответ, поэтому имеет 20 параметров.

Я начинаю задаваться вопросом, не лучше ли денормализовать таблицу ответов, перенести ее в свое приложение и позволить моему приложению производить подсчет очков.

Кто-нибудь когда-нибудь решал что-то подобное и имел представление?

Это было полезно?

Решение

Если я правильно понимаю вашу схему и вопрос, как насчет чего-то вроде этого:

select student_name, score
from students
  join (select student_answers.student_id, count(*) as score
        from student_answers, answer_key
        group by student_id
        where student_answers.question_id = answer_key.question_id
          and student_answers.answer = answer_key.answer)
  as student_scores on students.student_id = student_scores.student_id
where score >= 7
order by score, student_name

Например, следует отобрать учащихся, набравших 7 или более баллов.Просто настройте предложениеwhere для своих целей.

Другие советы

Я бы, вероятно, оставил подсчет очков на ваше усмотрение.Проверить Возможно, нормализация — это ненормально Джефф Этвуд.

Архитектура, о которой вы говорите, в долгосрочной перспективе может стать очень громоздкой, и если вам нужно изменить вопросы, это означает дополнительные изменения в используемой вами UDF.

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

Ни в коем случае, вы определенно хотите, чтобы это было нормализовано.Это даже не такой уж и сложный вопрос.

По сути, вы хотите объединить правильные ответы учащихся с общим количеством ответов на этот вопрос и провести подсчет.Это даст вам процент правильности.Сделайте это для каждого учащегося и укажите минимальный процент правильных ответов в пункте «где».

Денормализация обычно считается крайней мерой.Проблема очень похожа на приложения для опросов, которые очень распространены.Не видя вашей модели данных сложно предложить решение, но скажу, что оно однозначно возможно.Мне интересно, зачем этой функции нужно 20 параметров?

Решение на основе реляционного набора в большинстве случаев будет проще и быстрее.

Этот запрос должен быть довольно простым...при условии, что у вас есть правильный ответ, сохраненный в таблице вопросов.У вас же есть правильный ответ в таблице вопросов, верно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top