문제

Student 테이블이 있고 int ID가 있다고 가정해 보겠습니다.저는 5개의 답변이 가능한 고정된 10개의 객관식 질문 세트를 가지고 있습니다.질문 ID, Student.answer(1-5) 및 Student.ID가 있는 정규화된 답변 테이블이 있습니다.

특정 백분율 이상의 모든 점수를 반환하는 단일 쿼리를 작성하려고 합니다.이를 위해 Student.answers와 정답을 허용하는 간단한 UDF를 작성하여 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에 더 많은 변경이 필요하다는 의미입니다.

데이터베이스를 반드시 비정규화하지 않고도 코드에서 분석을 수행할 수 있을 것이라고 생각합니다.비정규화는 유연성이 떨어지거나 적어도 업데이트에 비용이 추가될 수 있습니다.

절대, 당신은 그것을 표준화된 상태로 유지하고 싶을 것입니다.그다지 어려운 질문도 아닙니다.

기본적으로, 해당 질문에 대한 총 답변과 함께 학생들의 정답을 결합하고 계산을 수행하려고 합니다.그러면 정확한 비율이 나옵니다.각 학생에 대해 그렇게 하고 where 절에 최소 정답률을 입력하세요.

비정규화는 일반적으로 최후의 수단으로 간주됩니다.이 문제는 매우 일반적인 설문 조사 응용 프로그램과 매우 유사해 보입니다.데이터 모델을 보지 않고는 솔루션을 제안하기 어렵지만 확실히 가능하다고 말씀드리고 싶습니다.해당 함수에 왜 20개의 매개변수가 필요한지 궁금합니다.

대부분의 경우 관계형 집합 기반 솔루션이 더 간단하고 빠릅니다.

이 쿼리는 매우 쉬울 것입니다 ...질문 테이블에 정답이 저장되어 있다고 가정합니다.질문 테이블에 정답이 저장되어 있죠?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top