Le entità che si possono individuare nel problema sono
essenzialmente:
- Corso, perché l'Istituto eroga diversi corsi
- Allievo, per l'anagrafica delle persone che si iscrivono
- Domanda, per le domande del test di ingresso.
Tra Corso e Allievo vi è dunque un'associazione molti
a molti.
Anche tra Allievo e Domanda c'è un'associazione molti a
molti.

Per rappresentare in modo più preciso il modello, conviene
scomporre le due associazioni molti a molti in associazioni uno
a molti, introducendo le entità di legame che ci consentono
di evidenziare anche gli attributi delle associazioni.
Tra Corso e Allievo, inseriamo l'entità Iscrizione, per
registrare la data di iscrizione, il livello conseguito dall'allievo
dopo il test di ingresso e successivamente servirà anche
per il risultato del test finale.
Tra Allievo e Domanda, inseriamo l'entità Risposta che
contiene l'esito di ciascuna domanda per ciascun allievo.

Il modello logico che viene derivato dal modello E/R è
formato dalle seguenti tabelle:
Corsi (KCodCorso, Descrizione, DataInizio, Costo, Docente,
Tutor)
Allievi (KCodAllievo, Cognome, Nome, DataNascita, Email,
Telefono, Indirizzo)
Domande (KNumDom, TestoDomanda, TestoRisposte, RispostaEsatta)
Iscrizioni (ID, DataIscrizione, LivelloIniziale, RisultatoFinale,
CodCorso, CodAllievo)
Risposte (ID, Esito, NumDom, CodAllievo)
(chiavi primarie in neretto, chiavi esterne in corsivo)
Sviluppo del punto 1 (perfezionare l'iscrizione determinando
il livello iniziale)
Dapprima esamino i risultati del test calcolando la percentuale
di risposte esatte: stabilendo per il campo Esito i valori 1 oppure
0 a seconda che la risposta sia esatta o errata, si può
calcolare la somma dei valori 1, contare il numero di risposte
e infine calcolare la percentuale, scrivendo il tutto in una tabella
temporanea Risultati.
SELECT CodAllievo, SUM(Esito)
AS Esatte, Count(Esito) AS NumDomande, SUM(Esito)/Count(Esito)*100
AS Perc INTO Risultati
FROM Risposte
GROUP BY CodAllievo
Ora posso aggiornare il campo LivelloIniziale nella tabella
Iscrizioni sulla base della percentuale conseguita. Posso fare
tre comandi Update per i tre livelli, assegnando i livelli
sulla fase di tre fasce di percentuali: da 0 a 33% = livello 1,
da 34% a 66% = livello 2, oltre 66% = livello3.
UPDATE Iscrizioni
SET LivelloIniziale = 1
WHERE CodAllievo IN (SELECT CodAllievo
FROM Risultati
WHERE Perc < 34)
UPDATE Iscrizioni
SET LivelloIniziale = 2
WHERE CodAllievo IN (SELECT CodAllievo
FROM Risultati
WHERE Perc BETWEEN 34 AND 66)
UPDATE Iscrizioni
SET LivelloIniziale = 3
WHERE CodAllievo IN (SELECT CodAllievo
FROM Risultati
WHERE Perc > 66)
Se si volesse lasciare all'utente la possibilità di definire
le fasce, basta inserire un parametro nel comando Update,
per esempio per il primo livello:
UPDATE Iscrizioni
SET LivelloIniziale = 1
WHERE CodAllievo IN (SELECT CodAllievo
FROM Risultati
WHERE Perc < [percentuale massima per primo livello])
|