Frage

Angenommen, ich habe einen Student-Tisch, er hat eine int-ID.Ich habe einen festen Satz von 10 Multiple-Choice-Fragen mit 5 möglichen Antworten.Ich habe eine normalisierte Antworttabelle mit der Frage-ID, der Student.answer (1-5) und der Student.ID

Ich versuche, eine einzelne Abfrage zu schreiben, die alle Ergebnisse über einem bestimmten Prozentsatz zurückgibt.Zu diesem Zweck habe ich eine einfache UDF geschrieben, die die Student.answers und die richtige Antwort akzeptiert, also 20 Parameter hat.

Ich frage mich langsam, ob es besser ist, die Antworttabelle zu denormalisieren, sie in meine Anwendung zu integrieren und die Bewertung von meiner Anwendung durchführen zu lassen.

Hat jemand jemals so etwas in Angriff genommen und hat Einsicht?

War es hilfreich?

Lösung

Wenn ich Ihr Schema und Ihre Frage richtig verstehe, wie wäre es dann mit so etwas:

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

Dadurch sollen beispielsweise die Schüler mit einer Punktzahl von 7 oder mehr ausgewählt werden.Passen Sie einfach die where-Klausel an Ihre Zwecke an.

Andere Tipps

Ich würde es wahrscheinlich Ihrer Bewerbung überlassen, die Bewertung vorzunehmen.Kasse Vielleicht ist Normalisieren nicht normal von Jeff Atwood.

Die Architektur, von der Sie sprechen, könnte auf lange Sicht sehr umständlich werden, und wenn Sie die Fragen ändern müssen, bedeutet dies weitere Änderungen an der von Ihnen verwendeten UDF.

Ich denke, Sie könnten Ihre Analyse wahrscheinlich im Code durchführen, ohne unbedingt Ihre Datenbank zu denormalisieren.Eine Denormalisierung könnte später auch zu Inflexibilität oder zumindest zu höheren Aktualisierungskosten führen.

Auf keinen Fall, Sie möchten es auf jeden Fall normalisieren.Es ist nicht einmal eine so schwierige Frage.

Grundsätzlich möchten Sie die korrekten Antworten der Schüler mit den Gesamtantworten für diese Frage verbinden und eine Zählung durchführen.Dadurch erhalten Sie den richtigen Prozentsatz.Machen Sie das für jeden Schüler und geben Sie den richtigen Mindestprozentsatz in eine Where-Klausel ein.

Die Denormalisierung gilt im Allgemeinen als letzter Ausweg.Das Problem scheint bei Umfrageanwendungen sehr ähnlich zu sein, die sehr häufig vorkommen.Ohne Ihr Datenmodell zu sehen, ist es schwierig, eine Lösung vorzuschlagen, aber ich sage, dass es definitiv möglich ist.Ich frage mich, warum Sie für diese Funktion 20 Parameter benötigen.

Eine relationale satzbasierte Lösung wird in den meisten Fällen einfacher und schneller sein.

Diese Abfrage sollte recht einfach sein ...Vorausgesetzt, Sie haben die richtige Antwort in der Fragentabelle gespeichert.Die richtige Antwort ist doch in der Fragentabelle gespeichert, oder?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top