Сведения о вопросе

Drake

21:06, 1st October, 2020

Теги

dynamic-sql    

SQL Запрос Справки-Оценка Множественного Выбора Тестов

Просмотров: 443   Ответов: 6

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

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

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

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



  Сведения об ответе

Chhiki

12:32, 12th August, 2020

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

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


  Сведения об ответе

qwerty101

17:42, 8th August, 2020

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


  Сведения об ответе

Chhiki

21:14, 12th August, 2020

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

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


  Сведения об ответе

+-*/

08:05, 2nd August, 2020

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

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


  Сведения об ответе

ITSME

16:45, 27th August, 2020

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

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


  Сведения об ответе

lool

04:02, 26th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться