0

Student テーブルがあるとします。これには int ID があります。5 つの可能な回答を持つ 10 の多肢選択問題の固定セットがあります。質問 ID、Student.answer (1-5)、および Student.ID を持つ正規化された回答テーブルがあります。

特定の割合を超えるすべてのスコアを返す単一のクエリを作成しようとしています。この目的のために、Student.answers と正解を受け入れる単純な UDF を作成したので、20 個のパラメーターがあります。

回答テーブルを非正規化し、それを自分のアプリケーションに取り込み、自分のアプリケーションでスコアリングを行う方がよいかどうか疑問に思い始めています。

このようなことに取り組み、洞察力を持っている人はいますか?

4

6 に答える 6

2

あなたのスキーマと質問を正しく理解していれば、次のようなことはどうですか:

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 句を調整するだけです。

于 2008-08-22T14:11:58.577 に答える
1

スコアリングの実行は、おそらくアプリケーションに任せるでしょう。Jeff Atwood の「Maybe Normalizing Isn't Normal」をご覧ください。

于 2008-08-22T13:58:59.167 に答える
0

あなたが話しているアーキテクチャは、長期的には非常に扱いにくくなる可能性があり、質問を変更する必要がある場合は、使用している UDF をさらに変更する必要があります。

データベースを必ずしも非正規化することなく、おそらくコードで分析を行うことができると思います。非正規化は、今後、柔軟性の欠如、または少なくとも更新費用の追加にもつながる可能性があります。

于 2008-08-22T14:00:51.753 に答える
0

まさか、あなたは間違いなくそれを正規化しておきたいのです。それほど難しいクエリではありません。

基本的には、生徒の正解をその質問の合計回答と合わせて、カウントを行います。これにより、正しいパーセントが得られます。これを生徒ごとに行い、最小正解率を where 句に入れます。

于 2008-08-22T14:01:58.427 に答える
0

一般に、非正規化は最後の手段と見なされます。この問題は、非常に一般的な調査アプリケーションと非常によく似ているようです。データ モデルを確認せずに解決策を提案することは困難ですが、それは間違いなく可能であると言えます。なぜその関数に 20 個のパラメーターが必要なのだろうか?

リレーショナル セット ベースのソリューションは、ほとんどの場合、よりシンプルで高速です。

于 2008-08-22T14:02:13.683 に答える
0

このクエリは非常に簡単なはずです...質問テーブルに正しい答えが格納されていると仮定します。問題テーブルに正解が保存されていますよね?

于 2008-08-22T14:28:35.353 に答える