Справка по SQL-запросам - оценка тестов с несколькими вариантами ответов - PullRequest
0 голосов
/ 22 августа 2008

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

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

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

Кто-нибудь когда-нибудь занимался чем-то подобным и имел понимание?

Ответы [ 6 ]

2 голосов
/ 22 августа 2008

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

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 для ваших целей.

1 голос
/ 22 августа 2008

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

0 голосов
/ 22 августа 2008

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

0 голосов
/ 22 августа 2008

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

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

0 голосов
/ 22 августа 2008

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

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

0 голосов
/ 22 августа 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...