Basi di Dati e Sistemi Informativi

Laurea in Informatica - Università di Padova
Anno Accademico 2013/2014

Paolo Baldan

Mauro Conti

Annunci

Obiettivi del corso

L'obiettivo del corso è quello di introdurre lo studente alle tecniche di progettazione delle basi di dati. Si analizzeranno varie fasi dell'attività di progetto: analisi dei requisiti, progettazione concettuale della base di dati, trasformazione del progetto concettuale in un progetto logico, e implementazione delle funzionalità necessarie mediante un linguaggio di definizione e manipolazione dei dati che a questo progetto logico faccia riferimento. Si affronteranno anche alcune problematiche relative all'accesso alle basi di dati nei linguaggi di programmazione ed alla realizzazione di intefacce web alle basi di dati. Il corso dà luogo al conseguimento di 10 CFU.

Programma di massima del corso

  1. Introduzione
    1. Basi di dati e sistemi di gestione di basi di dati (DBMS)
    2. Architettura di un DBMS
    3. La progettazione di una base di dati
  2. La progettazione concettuale di una base di dati
    1. Il modello concettuale a oggetti
    2. Progettazione concettuale di basi di dati mediante modello a oggetti
  3. La progettazione logica di una base di dati
    1. Il modello relazionale
    2. L'algebra ed il calcolo relazionale
    3. Progettazione logica di basi di dati mediante traduzione di schemi a oggetti in schemi relazionali
  4. La normalizzazione di schemi relazionali
    1. Dipendenze funzionali
    2. Scomposizione di relazioni, con preservazione di dati e/o dipendenze
    3. Forme normali per gli schemi di relazione (1NF, 2NF, 3NF e BCNF) e scomposizioni in forma normale.
  5. Il linguaggio SQL
    1. Il data definition language di SQL
    2. Il data manipulation language di SQL
    3. Conoscenza procedurale: trigger, stored procedure.
    4. Transazioni
  6. Basi di dati nelle applicazioni
    1. SQL nelle applicazioni (SQL embedded, call level interface)
    2. Acesso tramite web: PHP e pagine web dinamiche

Orario del corso

Il corso fa parte del II anno del Corso di Laurea in Informatica, Università di Padova, ed è collocato nel III trimestre dell'Anno Accademico 2013/2014, con inizio il 07.04.2014, con il seguente orario:
 
Giorno Orario Aula
Lunedì 13.30 - 15.15 P200
Martedì 13.30 - 15.15 LuM250
Mercoledì 13.30 - 15.15 LuM250
Giovedì 15.30 - 17.15 LuM250
Venerdì 13.30 - 15.15 LuM250

Il corso è tenuto dal prof. Paolo Baldan e dal prof. Mauro Conti, che si occuperà principalmente della gestione del progetto e del laboratorio.

Modalità d'Esame

Le date degli appelli sono normalmente disponibili alla corrispondente pagina del Dipartimento di Matematica.

L'esame consiste in una prova scritta, in un progetto, e in una prova orale. La consegna del progetto è condizione necessaria per poter sostenere la prova scritta (vedi la sezione Progetto per le modalità di esecuzione e consegna). Il progetto contribuisce alla valutazione per 3 crediti su 10.

Il progetto può essere consegnato una sola volta per l'intero anno accademico. Progetti evidentemente indecenti o, peggio, copiati pregiudicheranno la possibilità di sostenere l'esame per l'anno accademico corrente.

La prova scritta contiene domande ed esercizi focalizzati principalmente su:

Integrazione: Chi ha sostenuto Basi di dati 1 nel vecchio ordinamento e dovesse quindi fare l'integrazione dovrà fare solo una parte dello scritto (relativa ai punti 5.3, 5.4, 6.1 e 6.2 del programma), ed il progetto. Questo può essere il progetto di BD1, esteso in modo da rispettare le nuove specifiche. In ogni caso, deve contattarmi prima dell'esame.

Alcuni testi dei precedenti appelli si possono trovare qui.

Per poter sostenere una determinata prova scritta è indispensabile essersi registrati alla corrispondente prova mediante il sistema UNIWEB. Questo è normalmente possibile solo fino a due giorni prima dell'esame stesso (la lista chiude due giorni prima dell'esame stesso alla mezzanotte).

Per poter sostenere la prova orale è necessario aver superato con esito sufficiente la prova scritta nel medesimo appello (e quindi aver consegnato il progetto). Il voto dello scritto non rimane valido per gli appelli successivi. Il progetto consegnato rimane valido per gli appelli successivi, anche in caso di mancato superamento di una prova scritta e\o di una prova orale.

Chi si fosse registrato a una lista di prenotazione e decidesse di non presentarsi è pregato di cancellarsi dalla lista o, in caso la lista fosse già chiusa, di darne tempestiva comunicazione al docente.

Durante l'esame non è possibile consultare testi, appunti o altro materiale. Chi copia o consulta bigliettini (o affini) vedrà annullato lo scritto corrente e non potrà sostenere l'appello successivo.

Il Progetto

In linea di massima, il lavoro consiste nella progettazione e nello sviluppo di una base di dati e della relativa interfaccia WEB, per un'organizzazione a scelta dello studente, che potrà quindi applicare le proprie conoscenze alla soluzione di un caso reale di interesse applicativo proprio o di propri familiari, amici, etc. Esempi possono essere una base di dati per automatizzare le esigenze informative del negozio gestito dalla famiglia dello studente, della squadra sportiva che lo studente allena, del circolo culturale di cui lo studente è membro, ecc. Il livello di complessità della base di dati deve essere simile a quello delle basi di dati relative alla Biblioteca o alla Segreteria Studenti discusse a lezione in varie riprese (e riportate nel libro di testo, nei Capitoli 2 e 3 rispettivamente).

L'interfaccia WEB dovrà utilizzare le nozioni viste a lezione:

e dovrà permettere di inserire, cancellare e ricercare record nella base di dati, secondo le specifiche esigenze dell'organizzazione modellata.

Il progetto può essere svolto singolarmente o a coppie.

Il lavoro deve obbligatoriamente comprendere:

  1. Una descrizione descrizione generale del caso di studio (abstract), che lo delinei e contestualizzi, seguita da una descrizione testuale dei requisiti, come risultanti da una ipotetica analisi dei requisiti. Questa deve consistere in una analisi puntuale, nello stile degli esempi visti a lezione per i due casi citati sopra (Biblioteca o alla Segreteria Studenti). A questo livello, si possono descrivere anche le operazioni tipiche che si vogliono svolgere sulla base di dati, che influenzeranno il progetto dell'interfaccia.
  2. La progettazione dello schema concettuale della base di dati nel modello a oggetti. Il formalismo grafico da utilizzare è obbligatoriamente quello visto a lezione e riportato nel libro. I vincoli di integrità (chiavi, not null, possono essere indicati nello schema). Se vi fossero altri vincoli ritenuti significativi se ne può dare una descrizione testuale o in linguaggio semi-formale, come visto a lezione. Per disegnare lo schema un programma free interessante è Gnome Dia.
  3. La progettazione dello schema logico della base di dati. Si può dare
    • uno schema grafico che riporti solo il nome delle relazioni e quindi specificare lo schema delle relazioni e i vincoli di chiave e not null, mediante una descrizione testuale (vedi slide 35-38 qui)
    • uno schema completo che riporti anche nomi e tipi degli attributi, vincoli di chiave e not null. (vedi slide 39 qui) Per altri vincoli, se lo si ritiene opportuno, si può dare una descrizione testuale come nel caso precedente.
    In ogni caso, è opportuno commentare le scelte effettuate nella trasformazione (ad es. per quanto riguarda la codifica delle gerarchie di classi).
  4. L'implementazione dello schema logico nel DDL nel linguaggio SQL.
  5. La realizzazione di alcune interrogazioni significative nel DML del linguaggio SQL; per ciascuna di queste interrogazioni, numerata in modo progressivo, oltre al codice, va riportata una descrizione testuale di cosa l'interrogazione si propone di fare.
  6. L'uso di procedure, funzioni e trigger nel linguaggio PL/SQL.
  7. La realizzazione di una semplice interfaccia WEB alla base di dati che permetta di eseguire in modo interattivo e personalizzato, le query previste al punto precendente, oltre a query standard di popolamento, cancellazione, modifica e ricerca nella base di dati. Si utilizzi il linguaggio PHP. L'architettura dell'applicazione web dovrà essere descritta brevemente nella relazione (organizzazione in pagine, funzionalità realizzate, tipo di autenticazione, scelte progettuali in genere).
Come implementazione di SQL andrà utilizzato il sistema MySQL. Il progetto dovrà funzionare nelle aule del laboratorio informatico e dovrà essere accessibile nello spazio web del laboratorio. È dunque indispensabile, anche per chi non frequenti lezioni e/o laboratorio, richiedere un account sul server MySQL/web del laboratorio. Questo deve avvenire nei tempi prescritti. Per ulteriori informazioni si vedano la pagina del prof. Conti e le trasparenze discusse durante l'ultima lezione.

Lo studente dovrà consegnare, il giorno dello scritto, al docente una relazione (in forma cartacea) del lavoro svolto in cui siano evidenziati i risultati delle fasi sopra descritte (descrizione del problema e analisi dei requisiti, progetto concettuale, progetto logico, implementazione della base di dati nel DDL, query nel DML, trigger e procedure, architettura dell'applicazione web).

Si chiede di allegare alla relazione il codice SQL realizzato. Si può evitare di inserire il codice necessario al popolamento, se dovesse essere di dimensione cospicua. Nel caso di progetti svolti in coppia è sufficiente consegnare una sola relazione.

Il lavoro dovrà essere consegnato anche in forma elettronica tramite lo script consegna da richiamare eseguendo il comando

consegna basidati2014
da una directory dove sono contenuti solo i files da consegnare e dovrà essere in linea nello spazio web dello studente presso il laboratorio (da richiedere mediante iscrizione all'apposita lista UNIWEB).

Il progetto concorrerà alla determinazione del voto finale (con peso 3 crediti). Elementi che verranno presi in considerazione ai fini di tale valutazione saranno la correttezza dei risultati, la complessità del problema affrontato, l'appropriatezza della metodologia seguita, la chiarezza espositiva della relazione.

La consegna del progetto è condizione necessaria per poter sostenere lo scritto.

Laboratorio

È necessario avere accesso ad un server MySQL ed a uno spazio web dalle macchine delle aule informatiche. Per questo è si deve richiedere una username e password entro i termini comunicati a lezione. Questo è fondamentale per l'esame (indipendentemente dal fatto che si frequenti il lboratorio) dato che per essere valido il progetto dovrà essere reso disponibile nel proprio spazio presso il server web del laboratorio. Informazioni dettagliate sulle lezioni di laboratorio sono fornite nella pagina del prof. Conti.

Server MySQL

Troverete la password per l'accesso al server MySQL nel file ~/bd2014.password. La connessione al server può essere effettuata tramite lo script
~/bd2014.sh
oppure server può avvenire tramite il comando:
mysql -h basidati.studenti.math.unipd.it -u [login] -p [database]
Ogni studente ha a disposizione due database [login]-ES e [login]-PR che possono essere utilizzati per le esercitazioni ed il progetto, rispettivamente.

È possibile accedere al database anche tramite phpMyAdmin, una interfaccia Web (solo dai pc delle tre aule informatiche del Paolotti) collegandosi alla url http://basidati.studenti.math.unipd.it/phpmyadmin.

Server web

Il server web è ospitato nella stessa macchina del server MySQL, ovvero basidati. A questo potete connettervi con il vostro login e password su studenti (NON quella del server MySQL).

Sul server basidati, nella vostra home, avete a disposizione uno spazio web public_html, che è poi visibile all'indirizzo

http://basidati/basidati/~login
dove login va sostituito dal vostro login.

Se ad esempio create un file prova.php che contiene solo

  <html>
  <head><title>Basi di dati</title></head>
<body> <?php echo "Buongiorno!" ?> </body> </html>
nella directory basidati/public_html su basidati (oppure lo create in remoto e lo copiate con scp prova.php basidati:basidati/public_html/.) potete accedervi tramite un browser all'indirizzo http://basidati/basidati/~login/prova.php.

Accesso da casa tramite tunnel

Da una macchina Linux o MacOS X o Cygwin:
  1. Connettersi ad una macchina raggiungibile da casa (es. ssh.studenti.math.unipd.it ed impostare i tunnel necessari (aggiungendo l'opzione -f ssh va in backgroud dopo aver chiesto la password così da avere solo i tunnel ma nessun prompt dei comandi su ssh.studenti):
    ssh -L23306:basidati:3306 -L20443:basidati:443 -L20080:basidati:80 -L20022:basidati:22 nomeutente@ssh.studenti.math.unipd.it
  2. A questo punto la vostra area web è accessibile dall'indirizzo:
    http://localhost:20080/basidati/~nomeutente/
  3. phpMyAdmin è raggiungibile all'indirizzo:
    https://localhost:20080/phpmyadmin/
  4. per copiare direttamente dei file sul server basidati.studenti.math.unipd.it da una cartella locale, ad esempio MyDir, usare scp (-P MAIUSCOLA):
    scp -P 20022 -r MyDir nomeutente@localhost:basidati/public_html
  5. per avere una shell sul server basidati usare il comando ssh (-p minuscola):
    ssh -p 20022 nomeutente@localhost

Riferimenti bibliografici

Il libro adottato è Risorse online: Altri libri consigliati per consultazione

Diario del corso

Il seguente calendario delle lezioni conterrà un programma dettagliato e le copie delle slide utilizzate durante le lezioni. Le slide non ancora discusse possono non essere definitive (sono soggette a piccoli cambiamenti per la parte non ancora discussa a lezione).

Data Tema della lezione Lucidi
07/04/14 Introduzione: sistemi informativi, sistemi informatici, e basi di dati [PDF]
10/04/14 Sistemi di gestione di basi di dati (DBMS) [Vedi lucidi precedenti]
11/04/14 Modelli dei dati [PDF]
14/04/14 Progettazione di una base di dati con il modello ad oggetti [Vedi lucidi precedenti]
15/04/14 Esercizi di modellazione concettuale di DB [PDF]
16/04/14 Esercizi di modellazione concettuale di DB [Vedi lucidi precedenti]
17/04/14 Il modello relazionale. Progettazione logica: Trasformazione dello schema concettuale a oggetti nello schema relazionale. [PDF]
28/04/14 Progettazione logica: Trasformazione dello schema concettuale a oggetti nello schema relazionale (cont.). [Vedi Lucidi precedenti]
29/04/14 Trasformazione dello schema concettuale a oggetti nello schema relazionale: Esercizi
Algebra relazionale: operatori primitivi e derivati.
[Vedi Lucidi Precedenti]
30/04/14 Algebra relazionale: Operatori di aggregazione
Algebra relazionale. Esercizi
[Vedi Lucidi Precedenti]
05/05/14 Algebra relazionale: Esercizi. Calcolo relazionale.
Introduzione a SQL.
[PDF]
06/05/14 DML di SQL: select elementari [Vedi Lucidi Precedenti]
  File per la creazione dello schema 'Università' utilizzato a lezione. creaUniv.sql
07/05/14 DML di SQL: interrogazioni con select annidate. Quantificazione. [Vedi Lucidi Precedenti]
08/05/14 Inserimento, aggiornamento e cancellazione.
Esercizi (query sul db Cinema).
[Vedi Lucidi Precedenti]
09/05/14 Esercizi (query sul db Cinema).
Il DDL di SQL: Definizione dello schema.
[PDF]
12/05/14 Descrizione del progetto (prof. Conti) [link]
13/05/14 View, vincoli di integrità. [Vedi Lucidi Precedenti]
14/05/14 Controllo degli accessi, indici, catalogo.
Note su associazioni simmetriche e sottoclassi senza attributi propri.
[Vedi Lucidi Precedenti]
15/05/14 Introduzione alla normalizzazione. Assiomi di Armstrong, chiusura, copertura [PDF]
19/05/14 Laboratorio: query SQL su DB esistente (prof. Conti) [link]
20/05/14 Normalizzazione: Decomposizione. Preservazione di dati e dipendenze. Forma normale di Boyce-Codd. [Vedi lucidi precedenti]
21/05/14 Laboratorio (prof. Conti) link
22/05/14 Terza Forma Normale e cenni alla Quarta. [Vedi lucidi precedenti]
23/05/14 SQL per le applicazioni. SQL per le applicazioni. Transazioni. [PDF]
26/05/14 Laboratorio (prof. Conti) link
27/05/14 PL/SQL: Funzioni e procedure. Trigger [Vedi lucidi precedenti]
28/05/14 Laboratorio (prof. Conti) link
29/05/14 SQL per le applicazioni. Cenni a SQL embedded, ODBC e ORM. [Vedi lucidi precedenti]
30/05/14 Basi di dati e WEB.
Cenni di HTML.
[Vedi lucidi precedenti]
[PDF]
[PDF]
Descrizione dell'esame [PDF]
03/06/14 Elementi di PHP [PDF]
04/06/14 Descrizione del progetti: aspetti procedurali (prof. Conti) [link]
05/06/14 PHP e API per MySQL. Interazione con l'utente: form e loro gestione [PDF]
06/06/14 Gestione dello stato. Query string e hidden fields. Cookies e sessioni. [PDF]
09/06/14 Laboratorio (prof. Conti) link
10/06/14 Autenticazione con sessioni, cookie, http. Cenni a PHP object oriented. [Vedi lucidi precedenti]
16/06/14 Laboratorio (prof. Conti) testo
18/06/14 Laboratorio (prof. Conti) testo