Laboratorio di Sistemi Informativi
A.A. 2002/2003
docente: Gianluca Amato
Obiettivi del corso:
Consolidare le nozioni sulle basi di dati apprese nel corso di Sistemi
Informativi, tramite l'uso pratico, in laboratorio, di un DBMS
relazione: MySQL.
Software:
- MySQL: anche
disponibile, insieme al codice sorgente, al sito ufficiale.
- MySQL Control Center:
anche disponibile, insieme al codice sorgente, al sito ufficiale.
- Xitami web server: anche
disponibile, insieme al codice sorgente, al sito ufficiale.
- PHP: anche
disponibile, insieme al codice sorgente, al sito
ufficiale.
- Connector/J:
il driver MySQL per JDBC, disponibile anche, insieme al codice
sorgente, presso il sito ufficiale.
Materiale Didattico:
Sono utili per la consultazione anche:
Lezioni
Testi di riferimento:
- Mark Maslakowski - MySQL Guida completa - Apogeo
- George Reese, Randy Jay Yarger & Tim King - Usare MySQL
(seconda edizione) - O'Reilly HOPS
oppure le versioni in lingua originale
- Mark Maslakowski - Sams Teach Yourself MySQL in 21 Days - Sams
Publishing
- George Reese, Randy Jay Yarger & Tim King - Managing &
Using MySQL (2nd Edition) - O'Reilly
Testi di consultazione:
Per quanto riguarda la teoria delle basi di dati relazionali si
consiglia uno dei seguenti:
- Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati (seconda
edizione) - McGraw-Hill
- Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati: modelli e
linguaggi - McGraw-Hill
Per una guida completa di MySQL, si consiglia:
- Michael "Monty" Widenius, David Axmark, MySQL AB - MySQL
Reference Manual - O'Reilly
Quest'ultimo è disponibile per il download in vari
formati.
Modalità d'esame:
Gli studenti devono sviluppare un progetto, partendo dalla fase di
specifica verbale dei requisiti, passando per l'implementazione della
base di dati (in MySQL) e di una applicazione che la sfrutta (in PHP
oppure in Java). Il progetto, in linea di massima è scelto
liberamente dagli stessi studenti, ma va sottoposto al vaglio del
docente, per evitare il caso di progetti troppo complessi o
eccessivamente semplici. Si può anche lavorare in piccoli gruppi
(max. 3 persone).
Alla fine, bisognerà produrre
- una piccola relazione (una decina di pagine);
- un database con tutte le tabelle necessarie e qualche dato di
esempio.. ATTENZIONE! alla fine quello che mi serve non è il
file
che contiene il database, ma la sequenza di istruzioni SQL che creano
database, tabelle ed eventuali utenti necessari all'applicazione
(più le istruzioni per inserire i dati di esempio). Si ricordi
che è possibile generare gran parte di queste informazioni
automaticamente da un database già in funzione grazie al
programma mysqldump.
- una serie di script PHP e pagine HTML (oppure uno o più
programmi Java) che implementano parte dell'applicazione. Si consiglia
di implementare le funzioni dell'applicazione che sono più
significative, o perchè più originali, o perchè
più complesse, o perchè in qualche maniera
rappresentative
di tutte le altre (ad esempio, in una applicazione che ha una parte
riservata al pubblico e una al personale come AIRdb, l'implementazione
di una funzione per ognuna delle due parti è di solito una buona
scelta). Non è
necessario
sviluppare l'applicazione al completo. Se la parte implementata
è
quella più significativa, sviluppare anche le altre parti meno
interessanti avrà effetto sul tempo che impiegate voi per
terminare il progetto e io per leggerlo... ma non è detto che
abbia effetto sul voto.
La relazione dovrà comprendere:
- una descrizione informale del progetto e dei requisiti;
- l'indicazione dei vari tipi di utenti che potranno interagire con
la base di dati e, per ogni tipo di utente, l'insieme delle operazioni
che esso può effetturare;
- un diagramma ER della base di dati o un diagramma simile che
mostri le entità coinvolte e le relazioni tra di esse (comprese
le cardinalità delle relazioni);
- l'elenco di tutte le tabelle, con i vari campi che le compongono,
e la eventuale spiegazione del significato di quesi campi (ovviamente
non è necessario spiegare il significato di tutti i campi, solo
quelli che non siano auto-esplicativi... il significato del campo NOME
in tabella STUDENTI, ad esempio, è ovvio..)
- una indicazione di quali funzioni dell'applicazione sono state
implementate (e magari perchè la scelta è ricaduta su di
queste).
Se nello sviluppo del progetto vi rendete conto che alcune cose si
possono fare in modi diversi, indicate nella relazione il motivo per
cui
avete scelto una soluzione piuttosto che un'altra (soprattutto quando
la
motivazione non è "perchè ci piaceva di più").
Se avete bisogno di consigli o informazioni, non esitate a contattarmi
per posta elettronica (amato@sci.unich.it)
o direttamente nel mio ufficio. In ogni caso, se avete da
chiedere qualcosa di specifico sul progetto, è meglio se prima
mi
mandate una copia del lavoro fatto fino a quel momento, in modo che
possa dargli un'occhiata e dare risposte più precise.
Una volta finito il progetto, potete farmelo avere per posta
elettronica o di persona. Al momento della consegna fisseremo insieme
una data per lo svolgimento della discussione (tenete conto che devo
avere il tempo di leggere il progetto prima che si possa andare alla
discussione... quindi se avete fretta, pensateci in tempo!!!). Il
progetto potete consegnarlo quando volete, purchè all'interno
del
periodo degli esami previsto dal calendario accademico. Per quanto
riguarda le date degli appelli affisse in bacheca... non contano nulla.
Durante la discussione, dopo una fase iniziale in cui gli studenti
illustrano il funzionamento del progetto, si passa ad una fase di
domande (anche individuali) che possono essere di vario tipo. Ad
esempio:
- chiarimenti su perchè una cosa è fatta in un certo
modo piuttosto che in un altro;
- richieste di sviluppare una query per risolvere un determinato
problema (come si visualizzano tutti i voli che partono da Milano e che
hanno almeno un posto in classe business?)
- richieste di modificare uno dei propri script PHP (o uno dei
propri programma in Java) allo scopo di implementare una nuova
funzionalità dell'applicazione o di modificarne una esistente
(come si modifica lo script per le prenotazioni dei posti di AIRdb in
modo che si possa prenotare più di un posto contemporaneamente?)
Alle domande di tipo pratico si risponde sul campo: nel senso che lo
studente si mette davanti al computer e tenta di risolvere il problema
proposto (anche col mio aiuto, e tenendo conto che non riuscire a
risolverlo ma provare delle cose sensate può andar bene lo
stesso..)