I L D ATABASE
NOTA: IL SISTEMA E' ATTUALEMENTE IN FASE DI COSTRUZIONE E PERTANTO GLI OGGETTI QUI DESCRITTI POTREBBERO SUBIRE MODIFICHE
DATA: 12 SETTEMBRE 2003
Nel presente capitolo vedremo com'è la struttura del database. In particolare verranno riportate le tabelle con le relazioni che esse possiedono.
Il database realizzato è costituito da una gran quantità di tabelle e di relazioni in modo da ottenere una struttura normalizzata ed espandibile; pertanto, nel seguito verrà mostrato lo schema completo che, in seguito, sarà puntualmente ripreso per poter offrire una dettagliata descrizione delle tabelle e delle relazioni tra esse.
1.1 Struttura del database
In Figura 1-1 è riportato lo schema completo della struttura del database.
!
""""""""
"
#
$
"
""
""
""
""
" " " "
"
$
%$
&
&
!
&
"
"
&
"
&
"
"
' "(
)*
(+ *
, , -
-
."
(/
-
-
, ,
-
( " 0
,,(
123
1
-
-
&
'
4
""
)
Figura 1-1 Schema completo del database
1.2 Descrizione delle tabelle
La descrizione delle tabelle e delle loro relazioni è eseguita raggruppando tabelle funzionalmente correlate in modo da presentare blocchi di strutture omogenee in modo da rendere più agevole la comprensione degli elementi costitutivi.
La descrizione delle relazione tra i campi avviene secondo la seguente sintassi:
nome_campo => tabella::campo
in cui:
• nome_campo: rappresenta il nome del campo della tabella in questione;
• tabella: tabella da cui deriva nome_campo;
• campo: nome del campo originale nella tabella indicata da tabella.
Un esempio può essere il seguente (tabella corrente: docenti_autorizzati):
codice => insegnamenti::codice_ins
che significa che il campo codice della tabella docenti_autorizzati deriva, tramite relazione uno a molti, dal campo codice_ins dalla tabella insegnamenti.
1.2.1 Utenti
Questo blocco di tabelle contiene i dati relativi ai vari tipi di utenti del sistema ed è costituito dalle tabelle:
• docenti
• docenti_autorizzati
• studenti
• stud_autorizzati
• insegnamenti
le cui strutture sono di seguito:
Tabella 1-1 Tabella "docenti"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| username | varchar(32) | | PRI | | |
| password | varchar(32) | | | | |
| diritti | tinyint(1) | YES | | 0 | |
| nome | varchar(255) | YES | | NULL | |
| cognome | varchar(255) | YES | | NULL | |
| note | varchar(255) | YES | | NULL | | +---+---+---+---+---+---+
Tabella 1-2 Tabella "docenti_autorizzati"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| codice_ins | int(11) | | PRI | NULL | auto_increment |
| username | varchar(32) | | | | |
| codice | varchar(32) | | | | | +---+---+---+---+---+---+
username => docenti::username;
codice => insegnamenti::codice_ins
Tabella 1-3 Tabella "studenti"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| matricola | varchar(32) | | PRI | | |
| password | varchar(32) | | | | |
| nome | varchar(255) | YES | | NULL | |
| cognome | varchar(255) | YES | | NULL | |
| note | varchar(255) | YES | | NULL | | +---+---+---+---+---+---+
Tabella 1-4 Tabella "stud_autorizzati"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| codice_ins | int(11) | | PRI | NULL | auto_increment |
| matricola | varchar(32) | | | | |
| codice | varchar(32) | | | | | +---+---+---+---+---+---+
matricola => studenti::matricola codice => insegnamenti::codice_ins
Tabella 1-5 Tabella "insegnamenti"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| codice_ins | varchar(32) | | PRI | | |
| nome_ins | varchar(255) | | | | |
| note | varchar(255) | YES | | NULL | | +---+---+---+---+---+---+
La tabella docenti contiene l'elenco dei docenti con i rispettivi dati anagrafici. Come si nota, tale tabella è "povera" di informazioni personali ma è comunque sempre possibile aggiungere campi mantenendo una struttura compatibile con il sistema. In particolare, in luogo di questa tabella, sarebbe possibile utilizzare l'elenco di docenti disponibile in segreteria.
Nella tabella docenti sono contenuti anche gli (eventuali) amministratori del sistema che, a differenza dei normali docenti, avranno il campo diritti settato a uno.
La tabella docenti_autorizzati contiene il binding tra i docenti e gli insegnamenti; pertanto ogni docente autorizzato è identificato da un proprio codice_ins che definisce univocamente il docente e la sua materia associata [1]. È comunque possibile associare più materie ad un docente e anche più docenti ad una stessa materia.
Gli amministratori, al contrario dei normali docenti, non possono avere questo tipo di legame e quindi un amministratore non è un docente e non è associato ad alcuna materia.
La tabella studenti è analoga alla tabella docenti, così come stud_autorizzati svolge la stessa funzione, per gli studenti, che svolgeva docenti_autorizzati per i docenti.
La tabella insegnamenti contiene l'elenco di tutti gli insegnamenti definiti da un codice (univoco) ed un nome che descrive l'insegnamento.
1.2.2 Quesiti e catalogazione
Questo blocco di tabelle contiene i dati relativi ai quesiti ed alla loro catalogazione ed è costituito dalle tabelle:
• quesiti
• catalogo
• tipologia
• contenuto_livello le cui strutture sono di seguito:
Tabella 1-6 Tabella "quesiti"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| ident | int(11) | | PRI | NULL | auto_increment |
| proprietario | int(11) | | | 0 | |
| diritti | int(1) | YES | | 0 | |
| file | varchar(255) | | | | |
| data | date | YES | | NULL | |
| parole | varchar(255) | YES | | NULL | |
| tipo | tinyint(1) | YES | | 0 | |
| qmd_computerscored | tinyint(1) | YES | | 0 | |
| qmd_itemselection | tinyint(1) | YES | | 0 | |
| qmd_itemsequence | tinyint(1) | YES | | 0 | |
| qmd_itemtype | int(11) | YES | | NULL | |
| qmd_numberofitems | int(2) | YES | | NULL | |
| qmd_questiontype | int(11) | YES | | NULL | |
| qmd_responsetype | int(11) | YES | | NULL | | +---+---+---+---+---+---+
proprietario => docenti_autorizzati::codice_ins qmd_itemtype => qmd_itemtype::type
qmd_questiontype => qmd_questiontype::type qmd_responsetype => qmd_responsetype::type
Tabella 1-7 Tabella "catalogo"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id_catalogo | int(11) | | PRI | NULL | auto_increment |
| username | varchar(32) | | | | |
| nome | varchar(255) | | | | |
| note | varchar(255) | YES | | NULL | | +---+---+---+---+---+---+
username => docenti::username (solo amministratori)
Tabella 1-8 Tabella "tipologia"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id | int(11) | | PRI | NULL | auto_increment |
| padre | int(11) | | | 0 | |
| id_catalogo | int(11) | | | 0 | |
| descrizione | varchar(255) | YES | | NULL | | +---+---+---+---+---+---+
padre => tipologia::id
id_catalogo => catalogo::id_catalogo
Tabella 1-9 Tabella "contenuto_livello"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id_livello | int(11) | | PRI | 0 | |
| ident | int(11) | | PRI | 0 | | +---+---+---+---+---+---+
id_livello => tipologia::id ident => quesiti::ident
(foreign key(id_livello,ident))
La tabella quesiti contiene l'elenco dei quesiti (item e section) di ogni utente. I quesiti sono però fisicamente memorizzati in file xml esterni in opportune direcotory [2]. Di seguito il dettaglio dei campi di tale tabella:
• ident: è l'identificativo del quesito ed è lo stesso valore che appare nell'analogo attributo dei tag item e section dei file xml contenenti i quesiti;
• proprietario: è il codice_ins dell'autore dell'item;
• diritti: se vale 0 allora il quesito è privato, altrimenti è pubblico;
• file: nome del file del quesito;
• data: data di creazione del quesito;
• parole: elenco di parole chiave utili per la ricerca dei quesiti;
• qmd_*: metadata [3].
La tabella catalogo definisce i cataloghi utilizzati per la catalogazione dei quesiti. Ogni catalogo possiede un nome; il proprietario del catalogo è un amministratore (tabella docenti) identificato dal suo username.
Per ogni catalogo è possibile definire una sua suddivisione, cioè una sequenza di rami in cui catalogare quesiti. La struttura dell'albero di ogni catalogo è contenuta nella tabella tipologia in cui, per ogni ramo (definito da descrizione e id) vi è il collegamento al ramo padre (padre) e al catalogo di riferimento (id_catalogo).
Il contenuto di ogni ramo (ovvero i quesiti catalogati) sono elencati nella tabella contenuto_livello. Qui sono presenti gli identificativi dei quesiti (ident) così che risulta possibile catalogare uno stesso quesito in più punti anche di cataloghi differenti (si noti che il campo id_livello identifica il punto e il catalogo in cui è catalogato il quesito).
1.2.3 Test e correzione
Questo blocco di tabelle contiene le informazioni in merito ai test preparati, all'iscrizione agli esami (o auto-valutazioni) e ai risultati di ogni studente che abbia eseguito la prova. Le tabelle in questione sono le seguenti:
• test
• pesi
• iscrizione_esame
• esaminati
le cui strutture sono di seguito:
Tabella 1-10 Tabella "test"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id | int(11) | | PRI | NULL | auto_increment |
| proprietario | int(11) | | | 0 | |
| diritti | int(1) | YES | | 0 | |
| file | varchar(255) | | | | |
| data | date | YES | | NULL | |
| materia | varchar(32) | YES | | NULL | |
| iscrizione | tinyint(1) | YES | | NULL | |
| eseguibile | tinyint(1) | YES | | NULL | |
| qmd_assessmenttype | int(11) | YES | | NULL | |
| qmd_itemselection | tinyint(1) | YES | | 0 | |
| qmd_itemsequence | tinyint(1) | YES | | 0 | |
| qmd_timelimit | int(11) | YES | | NULL | | +---+---+---+---+---+---+
proprietario => docenti_autorizzati::codice_ins materia => insegnamenti::codice_ins
qmd_assessmenttype => qmd_assessmenttype::type
Tabella 1-11 Tabella "pesi"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id | int(11) | | PRI | NULL | auto_increment |
| test | int(11) | YES | | NULL | |
| domanda | int(3) | YES | | NULL | |
| peso | decimal(4,2) | YES | | NULL | | +---+---+---+---+---+---+
test => test::id
Tabella 1-12 Tabella "iscrizione_esame"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id | int(11) | | PRI | NULL | auto_increment |
| test | int(11) | | | 0 | |
| codice_ins | int(11) | | | 0 | |
| eseguito | tinyint(1) | YES | | NULL | |
| punteggio | decimal(5,2) | YES | | NULL | | +---+---+---+---+---+---+
test => test::id
codice_ins => stud_autorizzati::codice_ins
Tabella 1-13 Tabella "esaminati"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id | int(11) | | PRI | NULL | auto_increment |
| id_iscrizione | int(11) | | | 0 | |
| quesito | int(11) | YES | | NULL | |
| section | varchar(255) | YES | | NULL | |
| item | varchar(255) | YES | | NULL | |
| response_ident | varchar(255) | YES | | NULL | |
| tipo_risposta | varchar(20) | YES | | NULL | |
| str_risposta | blob | YES | | NULL | |
| punteggio | decimal(5,2) | YES | | NULL | |
| progressivo | int(2) | YES | | NULL | | +---+---+---+---+---+---+
id_iscrizione => iscizione_esame::id quesito => quesiti::ident
La tabella test contiene l'elenco dei test preparati da ogni docente (svolge per i test una funzione analoga a quella svolta per i quesiti dalla tabella quesiti). La sequenza delle domande presenti nei test è definita in appositi file xml memorizzati nelle directory indicate dal campo file di questa tabella.
Di seguito la descrizione dei campi:
• proprietario: contiene il codice_ins dell'autore del test;
• diritti: campo non usato;
• file: nome della directory in cui è contenuto il file di definizione del test (percorso relativo);
• data: data di svolgimento del test;
• materia: materia cui fa riferimento il test (si noti che sarebbe possibile ugualmente risalire alla materia del test utilizzando la tabella docenti_autorizzati; il fatto che si sia inserito tale ridondanza è per ottenere delle query di ricerca più semplici);
• iscrizione: se questo flag è impostato sul valore zero allora non è possibile iscriversi al test; in caso contrario l'iscrizione è aperta;
• eseguibile: se questo flag è impostato a zero risulta impossibile svolgere il test; in caso contrario è permesso svolgere il test;
• qmd_*: metadata.
La tabella pesi contiene il massimo punteggio assegnabile ad ogni domanda. Tale tabella viene riempita (eventualmente) in fase di correzione se il docente definisce dei pesi diversi dall'unità. I campi sono i seguenti:
• test: indica a quale test il peso fa riferimento;
• domanda: indica il numero della domanda (in sequenza da 1 a max domande) a cui associare il peso;
• peso: peso da assegnare alla domanda.
La tabella iscririzone_esame contiene l'elenco degli iscritti ai test (sia per esami che auto- valutazioni). Il codice id_iscrizione serve per mantenere il binding tra studente (codice_ins) e test (test). Il campo eseguito indica se lo studente ha svolto il test (=1), mentre il campo punteggio contiene il punteggio conseguito nella prova (dopo aver eseguito la correzione).
La tabella esaminati contiene i dati relativi alle risposte fornite da ogni studente e per ogni test (dato ricavato dal campo id_iscrizione). La presenza di tutti questi campi è motivata dal fatto che per ogni iscritto è potenzialmente possibile avere un test diverso (in quanto è possibile avere domande random). Pertanto occorre tener traccia di ogni quesito e di ogni risposta elementare fornita (ogni riga della tabella è una risposta elementare). Non solo, occorre anche mantenere l'esatta sequenza delle domande per poter confrontare i punteggi di ogni studente. I campi impiegati sono perciò i seguenti:
• quesito: è l'identificativo del quesito;
• section: contiene l'identificativo (section::@ident) della sezione in cui è inserita la risposta elementare. Nel caso tale risposta faccia parte di item esterni a sezioni tale campo assumerà valore NO_SI;
• item: analogamente a section, contiene l'identificativo (item::@ident) dell'item in cui è inserita la risposta elementare;
• response_ident: identificativo del tag <response_lid> o <response_str>;
• tipo_risposta: indica il tipo di risposta elementare;
• str_risposta: stringa della risposta. Tale campo può contenere l’identificativo del tag
<response_label> o il testo della risposta a seconda del tipo;
• punteggio: punteggio ottenuto per ogni risposta elementare;
• progressivo: posizione della risposta elementare all'interno dell'intero test.
1.2.4 Metadata
Questo blocco è costituito da tabelle di supporto per mantenere in forma normale elenchi di metadata [3]. Tali elenchi sono usati in altre tabelle e vengono impiegati per una precisa catalogazione di test e quesiti.
Le tabelle in questione sono le seguenti:
• qmd_assessmenttype;
• qmd_itemtype;
• qmd_material;
• qmd_questiontype;
• qmd_responsetype;
• questi_material;
• test_material.
Data la semplicità delle tabelle viene riportata di seguito solo la tabella quesiti_material contenete l'elenco delle tipologie di materiali presenti in ogni quesito (sia item che section):
Tabella 1-14 Tabella "quesiti_material"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id_quesito | int(11) | | PRI | 0 | |
| id_material | int(11) | | PRI | 0 | | +---+---+---+---+---+---+
id_quesito => quesiti::item
id_material => qmd_material::type
Del tutto analoga alla precedente è la tabella test_material che contiene l'elenco di materiali usati in un test.
Le altre tabelle sono tutte della forma:
Tabella 1-15 Tipologia delle tabelle "qmd_*"
+---+---+---+---+---+---+
| Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+
| id | int(11) | | PRI | NULL | auto_increment |
| type | varchar(255) | YES | | NULL | | +---+---+---+---+---+---+
in cui il campo type contiene la stringa del tipo di oggetto.
1.3 Riferimenti
[1] Progetto Ingeneria del Software (Università degli Studi di Parma), Alessandro Maggi, Emanuele Tiso, A.A. 2001/2002
[2] Tesi di Laurea "Gestione di Test on Line rappresentati in XML secondo le specifiche IMS QTI", Coli Emanuele, A.A. 2001/2002 (Università degli Studi di Parma)
[3] IMS Question & Test Interoperability: ASI Information Model Specification Final Specification Version 1.2 (in particolare paragrafi 6.1 e 6.3)
http://www.imsproject.org/question/qtiv1p2/imsqti_asi_infov1p2.html