Domanda

Supponiamo che io abbia una tabella Studente, abbia un ID int.Ho una serie fissa di 10 domande a scelta multipla con 5 possibili risposte.Ho una tabella di risposte normalizzata che ha l'ID domanda, Student.answer (1-5) e Student.ID

Sto cercando di scrivere una singola query che restituirà tutti i punteggi oltre una certa percentuale.A tal fine ho scritto una semplice UDF che accetta Student.answers e la risposta corretta, quindi ha 20 parametri.

Sto iniziando a chiedermi se sia meglio denormalizzare la tabella delle risposte, inserirla nella mia applicazione e lasciare che sia la mia applicazione a calcolare il punteggio.

Qualcuno ha mai affrontato qualcosa del genere e ha avuto un'intuizione?

È stato utile?

Soluzione

Se ho capito correttamente il tuo schema e la tua domanda, che ne dici di qualcosa del genere:

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

Ciò dovrebbe selezionare gli studenti con un punteggio pari o superiore a 7, ad esempio.Basta modificare la clausola where in base ai tuoi scopi.

Altri suggerimenti

Probabilmente lascerei che sia la tua candidatura a eseguire il punteggio.Guardare Forse normalizzare non è normale di Jeff Atwood.

L'architettura di cui parli potrebbe diventare molto macchinosa a lungo termine e se è necessario modificare le domande ciò significa ulteriori modifiche all'UDF che stai utilizzando.

Penserei che probabilmente potresti eseguire la tua analisi in codice senza necessariamente denormalizzare il tuo database.La denormalizzazione potrebbe anche portare a inflessibilità, o almeno a spese aggiuntive per l’aggiornamento, in futuro.

Assolutamente no, vuoi assolutamente mantenerlo normalizzato.Non è nemmeno una domanda così difficile.

Fondamentalmente, vuoi unire a sinistra le risposte corrette degli studenti con il totale delle risposte per quella domanda e fare un conteggio.Questo ti darà la percentuale corretta.Fallo per ogni studente e inserisci la percentuale minima corretta in una clausola dove.

La denormalizzazione è generalmente considerata l’ultima risorsa.Il problema sembra molto simile alle applicazioni di sondaggio, che sono molto comuni.Senza vedere il modello dati, è difficile proporre una soluzione, ma dirò che è sicuramente possibile.Mi chiedo perché hai bisogno di 20 parametri per quella funzione?

Una soluzione relazionale basata su set sarà più semplice e veloce nella maggior parte dei casi.

Questa query dovrebbe essere abbastanza semplice...supponendo che tu abbia la risposta corretta memorizzata nella tabella delle domande.Hai la risposta corretta memorizzata nella tabella delle domande, giusto?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top