Roberto Tonelli

SISTEMI INFORMATIVI E DBMS PER DSBAI 19-20

12 November 2019

CORSO 19/20

Indirizzo studio: Via Porcell n.4 ( map )

Al semipiano tra primo e secondo bussare su una porta bianca a destra sulla scalinata. 

 

NEW ESAME 23/06:

Domattina ven 19 alle 12:00 verra’ attivato su moodle un compito di prova. Per ora il contenuto non e’ visibile. Gli studenti che intendano provare, dopo essersi registrati al corso su moodle,  dovranno connettersi sulla piattaforma e cercare “prova sidb Giugno”.
Un volta iniziata la simulazione avranno 30 minuti per rispondere alle domande. Saranno simili a quelle delle prove degli altri appelli, con la stessa struttura, con quesiti di programmazione e di database, shell linux, come in tutti gli altri appelli.  Il carico di domande sara’ proporzionato al tempo concesso per il quiz.  Il quiz apre alle 12 e chiude alle 12:40 ma dal momento in cui si inizia si avranno 30 minuti per rispondere.
Ci sara’  un’altra prova sabato.

 

NEWS ESAME 23/06: venerdi 19 verra’ svolta una simulazione d’esame su moodle.

Gli studenti prenotati sono gia’ stati contattati via mail dal docente. Gli studenti che intendano sostenere l’appello del 23 sono pregati di inviare una mail al docente.

 

 

NEWS ESAMI:

gli esami della sessione estiva si svolgeranno con l’ausilio della piattaforma moodle dell’universita’.

Gli studenti dovranno entrare su moodle e registrarsi al corso di Sistemi Informativi e DBMS,

docente Prof. Tonelli.

Prima dell’appello verranno effettuate delle sessioni di prova. Gli studenti che intendono sostenere l’appello a giugno sono pregati di contattare il docente via mail e di controllare questo sito per gli aggiornamenti.

 

Avviso: a breve verranno organizzati sia il ricevimento che il tutorato in modo da non interferire con le altre lezioni.

 

AVVISO:

A seguito dell’emergenza Coronavirus,

le lezioni sono sospese da domani 6/3/2020, così come gli esami.

Ulteriori notizie realtive al corso (lezioni ed esami) verranno comunicate

tramite successivi annunci in questo stesso sito del corso.

 

Avviso –SOSPESO, VEDI ANNUNCIO EMERGENZA CORONAVIRUS:

gli orali degli appelli gennaio/febbraio si terranno

venerdi 6 febbraio nello studio del docente dalle ore 11:30

 

 

 

Avviso: gli orali del corso si terranno

mercoledi 12 febbraio nello studio del docente dalle ore 11:30

 

Appello 19/02/2020

New: Compito prova 19/02/2020 (link)

Esiti prova DB 19/02/2020 (link)

Esiti prova Python 19/02/2020 (link)

 

Appello 27/01/2020

New: Compito prova 27/01/2020 (link)

New: Soluzione diagramma ER (link)

New: Soluzione queries SQL (link)

 

Esiti prova DB 27/01/2020 (link)

Esiti prova Python 27/01/2020 (link)

 

 

Appello 19/11/2019

Compito prova 19/11/2019 (link)

Soluzione Python 19/11/2019 Es.1 (link)

Soluzione diagramma ER 19/11/2019 Es.5 (link)

 

Esiti prova DB 19/11/2019 (link)

Esiti prova python 19/11/2019 (link)

 

 

 

Python e Database:

Esempi (link) DB Persone, creazione e queries (link)

http://www.dia.uniroma3.it/librobd/slides/BD2002-04.pdf

Lez. 06/11/19

http://www.dia.uniroma3.it/librobd/slides/BD2002-06.pdf

Il modello Entity Relationship. Entita’, relazioni, attributi.
Convenzioni per simboli e nomi. Attributi identificatori, chiavi.

Relazioni binarie e n-arie, occorrenze di relazioni. Relazioni

ricorsive e relazioni orientate.

Attributi composti. Identificatori esterni. Molteplicita’ degli
attributi e delle relazioni. Notazione, relazioni 1 a 1, 1 a molti, molti a molti.

Generalizzazioni e specializzazioni, specializzazioni totali o parziali, sovrapposte o esclusive.

Altri comandi linux: la pipe “|”, tail, head, wc, file di script eseguibili.

 

import MySQLdb   (la libreria deve essere installata, esistono altre librerie anche per altri database)  db = MySQLdb.connect("localhost","user","pass","database")   (il metodo connect crea una connessione a mysql) cursor = db.cursor()  (si ottiene un 'cursore' con cui si passano i comandi di SQL a mysql) cursor.execute(istruzione SQL) esegue le istruzioni Esempi: cursor.execute('show databases') nomiDatabases = cursor.fetchall()    (memorizza la lista dei database in una variabile -tupla- di python) cursor.execute('use nomeDatabase')  per selezionare il DB da usare cursor.execute('show tables') tabelle = cursor.fetchall()  (memorizza nella variabile 'tabelle' i nomi delle tabelle) *** aprire un file, creare una tabella, inserire nella tabella i valori letti dal file *** fin = open("tabella.txt","r") DATI = fin.readlines() #creo la tabella per contenere i dati cursor.execute("CREATE TABLE prova2 (Nome char(50), Cognome char(50), ETA int)") insert_stmt = ("INSERT INTO prova2 (Nome,Cognome,ETA) " "VALUES (%s, %s, %s)") data = (DATI[1].split()) cursor.execute(insert_stmt, data) db.commit() (Serve a ‘salvare’ e rendere operative le modifiche al database.)

Lez. 05/11/19

lez-05-11-2019

Il file system di Unix/Linux. Albero delle directories, path assoluto e relativo.
Shell di linux e comandi: ls, pwd, mkdir, man, –help,  rmdir, cd, rm, chmod, cat, less, more,
touch, cp, mv, editor di testi in formato ascii (gedit). Parametri e opzioni dei comandi: ls -al, operazioni ricorsive con -r. Permessi dei files e delle directories, uso di chmod con codice numerico e letterario. Standard input e output (stdio,stdin). Redirezione dell’output e scrittura su file, scrittura
in append (> e >>). Ancora sulle query SQL. Comandi del ddl. Esempi per selezioni e proiezioni.

Lez. 04/11/19

Algebra relazionale: espressioni equivalenti; viste ed aggiornamenti. Esempi pratici.
Valori nulli nelle relazioni e operazioni in algebra relazionale.
Operatori ‘is null’ e ‘is not null’. Logica a tre valori e utilizzo o non
utilizzo nelle interrogazioni. Il linguaggio SQL. Cenni sulla storia.
Creazione di schemi e di tabelle. Attributi e loro dominio, vincoli
interrelazionali e intrarelazionali in SQL. Creazione di tabelle
da Workbench e da SQL. Operazioni di prodotto cartesiano e
selezioni in SQL. Esempi pratici. Creazione di una vista e
operazioni sulle viste.

create table pp (cc int); insert into pp values (5); insert into pp values (2); insert into pp values (45); insert into pp values (5); select * from pp; delete from pp where cc=5; select * from pp; delete from pp where true; select * from pp; insert into pp values (5); insert into pp values (2); insert into pp values (45); insert into pp values (5); drop table pp; create schema schema04112019; create table imp (nome varchar(45), cognome varchar(45), stipendio int, matricola int primary key); create table sup (capo int, impiegato int, foreign key (capo) references imp(matricola), foreign key (impiegato) references imp(matricola)); show tables; insert into sup values (3,4); select * from imp; select * from sup; insert into imp values ('pino', 'pini', 34000,1); insert into imp values ('gino', 'gini', 33000,2); insert into imp values ('gino', 'gini', 33000,1); error insert into sup values (3,4); insert into sup values (1,12); error insert into imp values ('pino', 'pini', 34000,12); insert into sup values (1,12); insert into imp values ('mino', 'mini', 38000,3); insert into imp values ('nino', 'nini', 39000,4); insert into imp values ('lino', 'lini', 41000,5); insert into sup values (1,3); insert into sup values (2,4); insert into sup values (2,5); select * from imp,sup; select * from imp,sup where matricola=capo; select * from imp,sup,imp; error select * from imp I1,sup,imp I2; select * from imp I1,sup,imp I2 where I1.matricola=capo; select * from imp I1,sup, imp I2 where I1.matricola = capo and I2.matricola = impiegato; select I1.nome as capo, I2.nome as impiegato from imp I1,sup, imp I2 where I1.matricola = capo and I2.matricola = impiegato; create view vista as select I1.nome as capo, I2.nome as impiegato from imp I1, sup, imp I2 where I1.matricola=capo and I2.matricola = impiegato; select * from vista; insert into imp values ('tino', 'tini', 31000,6); insert into sup values (2,6); select * from vista; insert into vista values ('tino','mino'); insert into vista (capo) values ('vino'); drop view vista; fare prove varie, controllare gli errori!

 

Lez. 29/10/19

lez29ott2019

Algebra relazionale.  Ancora sul  Join naturale, su join completi e incompleti. Formalismo nelle definizioni.  Cardinalita’ del join.

Prodotto cartesiano, equi-join e theta-join. Equivalenza col join naturale. Operazioni in algebra relazionale e in SQL. Selezioni e proiezioni in SQL. Prodotto cartesiano in SQL e cardinalita’ delle relazioni. Convenienza nell’ordine delle operazioni.

Metodi per elaborare file in Python. Apertura in scrittura e in lettura. Scrivere e leggere da file. Organizzare liste per salvare righe di un file csv  e manipolarle sotto forma di matrice.

Lucidi DB3 (Link)

Lez. 28/10/19

lez28ott2019

Algebra relazionale. Operazioni su relazioni e condizioni sugli attributi:
unione, intersezione, differenza. Cardinalita’ del rislultato. Operazione di ridenominazione.
Selezioni e proiezioni e loro cardinalita’. Join naturale, join completi
e incompleti. Left e right join. Full join. Cardinalita’ del join. Metodi dei dizionari in Python.
Il sistema operativo Linux/Unix e utilizzo della shell. Comandi ls, mkdir e rmdir.

Ulteriore materiale per Python (link) Materiale per Linux/Unix (link)

Esercizi

- creare una funzione che accetti come parametro una stringa e che verifichi se nella stringa sono presenti come caratteri SOLO le cifre da 0 a 9. Restituisce True o False. Es: "oojo 1p0" False, "ciao " False, "9087687" True. - creare una funzione che accetti come parametro una stringa e che verifichi se nella stringa e' presente un unico carattere di punteggiatura. Restituisce True o False. Es: "edee.okp p." False, "kojpask" False, "lkj445.iip oo" True - creare una funzione che accetti come parametro una stringa e che verifichi se nella stringa sono presenti spazi in mezzo. Restituisce True o False. Es. "kljklj ;ok;l k" True, " kkmkjlk " False - creare una funzione che accetta una stringa e che, se esiste un punto '.' nella stringa, ne restituisce la prima parte, cioe' quella che precede il punto. Es. "ciao .a tutti. ecco" -> "ciao " - creare una funzione che accetta una stringa e che, se esiste un punto '.' nella stringa, ne restituisce l'ultima parte, cioe' quella che segue il punto. Es. "ciao .a tutti. ecco" -> " ecco" Usare le funzioni precedenti per capire se un utente inserisce da tastiera, tramite la "input" in py3 o la "raw_input" in py2 stringhe compatibili con numeri interi o float (cioe' convertibili in int o float). - usare il modulo string e la funzione count() (string.count() ) per verificare quante volte il carattere '.' (il punto) e' contenuto in una stringa. - usare il modulo string.isdigit( ) [Restituisce vero se tutti i caratteri nella stringa sono cifre ed è presente almeno un carattere, falso negli altri casi] per verificare se una stringa contiene solo numeri - scrivere il codice che controlli se in una lista sono presenti solo elementi di tipo float - scrivere il codice che controlli se in una lista sono presenti solo elementi di tipo int - scrivere il codice che controlli se in una lista sono presenti solo elementi di tipo string - scrivere il codice che controlli se in una lista sono presenti solo elementi di tipo list

Lez. 23/10/19

lez23ott2019

Valori nulli e vincoli. Vincoli intrarelazionali e interrelazionali.

Vincoli su singoli attributi, vincoli di tupla, vincoli su piu’ tuple.

Vincoli esterni e relazioni tra tabelle. Vincoli di integrita’ referenziale.

Espressione di vincoli come espressioni booleane. Dominio degli attributi.

Superchiavi e superchiavi minimali. Esistenza di una chiave e chiave primaria.

Chiavi e valori nulli, violazione di vincoli di integrita’ referenziale e azioni

compensative. Vincoli multipli su piu’ attributi. Operazioni su file in python.

Apertura e chiusura, lettura e poszionamento su file, salvataggio dei dati

letti in formato lista. File in formato csv.

metodiDiListaEsempio (link)

Lez. 22/10/19

lez22ott2019

I modelli logici tradizionali, gerarchico, reticolare, relazionale.

Le tre accezioni di relazione: matematica,nel modello relazionale

dei dati, nel modello Entity-Relationship. Prodotto cartesiona e suo sottonsieme.

Struttura posizionale. Modello ad attributi. Tabelle e relazioni, modello

basato sui valori. Schemi di relazioni e di basi di dati e loro istanze. Tuple.

Relazioni su singoli attributi e strutture nidificate. Informazioni incomplete

e valori nulli . Gestione di stringhe in python.

Lucidi DB2 (Link)

Lez. 21/10/19

lez21ott2019

Sistemi informativi e Basi di dati. Tipologie di basi di dati.

Dati e informazioni, modello dei dati, concetto di transazione.

DBMS e loro caratteristiche e proprieta’. Concorrenza. Schemi e istanze,

modelli logici e modelli concettuali. Livelli fisico, logico, esterno.

Indipendenza dei livelli e dei dati. Viste. Linguaggi per basi di dati.

Ancora su metodi di lista e di stringa in python.

Lucidi DB1 (Link)

Esercizi

- scrivere una funzione che accetti due numeri e restituisca l'area di un rettangolo che abbia come base e altezza i numeri dati. -inserire nella funzione un controllo sui valori dei numeri in modo che siano >=0. -inserire nella funzione un controllo sui tipi inseriti. Se sono interi vanno trasformati in float. Se sono float va bene. Se sono stringhe sono accettati solo se e' possibile interpretarli come float. -scrivere un programma che chieda all'utente di inserire base e altezza di un rettangolo, controlli i tipi di dati inseriti e usi la funzione di sopra (primo caso) per calcolare l'area e poi stamparla, chieda invece di reinserire all'infinito fino a che il tipo inserito non e' corretto. - scrivere una funzione che accetti il raggio e restituisca l'area del cerchio corrispondente e abbia gli opportuni controlli sui dati inseriti. -scrivere una funzione che accetti un numero intero e che stampi su una riga il prodotto di quell'intero per tutti i numeri da 1 a 10 (tabellina dell'intero). -inserire nella funzione precedente un controllo che determini se l'utente ha passato alla funzione un intero e se questo e' positivo; manda un messaggio in caso contrario. -scrivere un programma che inviti l'utente ad inserire un intero usato come limite superiore di un ciclo che richiama la funzione precedente, aggiornando il valore da passare alla funzione da uno fino al lim sup. Deve andarea capo ad ogni riga per ottenre le tabelline -svolgere l'esercizio 1a del compito di luglio 2018. - nel problema di deteminare l'area del cerchio dato il centro e un punto alla circonferenza utilizzando le due funzioni viste, inserire gli opportuni controlli sui dati inseriti dall'utente e impostare il programma in sessione interattiva, in cui all'utente sono chiesti i dati specificando 'inserire punto uno coordinata x' etc... -scrivere una funzione ricorsiva che inviti ad inserire un numero, lo stampi sullo schermo, e che si interrompa se il numero e' > 10.

Lez. 17/10/19 (1 ora)

lez17ott2019

Dizionari e chiavi. Estrazione di chiavi da dizionari e trasformazione in liste

in py2 e py3. Sort e sorted() per liste con attenzione agli alias e alle copie.

Join di stringhe e manipolazione di stringhe tramite liste con conversione

da stringa a lista e da lista a stringa. Gestione delle eccezioni con try ed except.

Esercizi:

-Scrivere un programma che chieda all'utente di inseriere un intero e un reale e ripeta la richiesta fino a che l'utente non ha inserito correttamente i dati. Creare poi una finzione che restituisca una lista ordinata in ordine decrescente con i due valori. -Scrivere un programma che chieda all'utente di inseriere una frase con almeno 4 parole e ripeta la richiesta fino a che l'utente non ha inserito correttamente i dati. Creare poi una finzione che restituisca la stringa inserita ma con le parole che iniziano col simbolo del dollaro e separate dal simbolo %.

 

 

Lez. 16/10/19

lez16ott2019

Liste e funzioni. Liste come argomento e come valore restituito.

Manipolazione di liste in una funzione, alias e cloning.

Metodi di lista. Tuple. Immutabilita’, operazioni sulle tuple.

Metodi di tupla. Tuple e funzioni. Analogie con le liste e con

le stringhe. Iterazioni su tuple. Dizionari. Chiavi e valori.

Mutabilita’ dei dizionari. Metodi di dizionari. Set delle chiavi.

Inserimento e cancellazione di valori. Strutture dati complesse

annidate, esplorazione per indici successivi.

Lucidi-7 (link)

Lez. 15/10/19    

lez15ott2019 lez15ott2019B metodiStringa

Modulo string, costanti e metodi (funzioni sulle stringhe)

Immutabilita’ di una stringa e variabili alias. Vari metodi

di stringa. Uso dell’help su string. Liste. Operazioni sulle liste, indice,

slices, concatenazione, moltiplicazione. cancellazione di elementi,

sostituzione di elementi, alias e cloni. Metodi di lista.

Liste di dati complessi. Liste di stringhe e liste di liste. Operatore in,

cicli for, iterazioni su liste e su stringhe. Sottoliste, operatore id().

Lucidi-7 (link)

 

Lez. 14/10/19   

lez14ott2019

Funzioni che manipolano sequenze di dati. Funzioni che utilizzano

stringhe. Lavorare con le stringhe. Slices, metodi di stringa, len,

ricerca di lettere in stringhe. Confronti tra stringhe. Manipolazione

di stringhe. Immutabilita’. Liste e dati composti. Definizione di lista,

notazione, accesso agli elementi di una lista, slice per liste. La funzione

range() in py2 e py3 con la funzione list(). Ciclo for. Iterazioni con

for in strutture iterabili come stringhe e liste. Istruzione break e uscita

da un ciclo. Liste di dati non omogenei, liste di liste e accesso ai vari

elementi tramite indici matriciali.

Esercizi:

Scrivere il codice di una funzione che chiede in input dei valori numerici e restituisce la loro media Scrivere il codice di una funzione che accetti una stringa e un carattere e restituisca la posizione del carattere all'interno della stringa (-1 se non c'e'). Estendere l'esercizio precedente al caso in cui il carattere sia un'altra stringa. Scrivere il codice di una funzione che accetti una stringa e un carattere e conti quante volte il carattere compare all'interno della stringa (-1 se non c'e'). Estendere al caso in cui voglia verificare se una lettera compare come doppia in una stringa.

 

Esercizi:

Scrivere un programma che chieda all’utente di inserire una frase di almeno 20 lettere e che ripeta la richiesta fino a che non sia soddisfatta

Scrivere un progrmma che chieda all’utente di inserire dei voti, SI/NO, fino a che non si inserisce zero e conti quanti SI e quanti NO sono stati inseriti e dichiari chi ha vinto o se sono pari.

Scrivere un programma che chieda all’utente di inserire due coordinate, x e y, di un punto del piano cartesiano, per 10 volte, calcolando la sua distanza dall’origine e individuando il punto che ha distanza minima.

Lez. 10/10/19 (+esercitazione)

   lez10ott2019

Cicli: il costrutto while. Condizione e istruzioni.

Inizializzazione e terminazione. Cicli infiniti, cicli annidati.

Print con parametri in py2 e py3. Input con cicli.

Stringhe. Indice di stringa, lunghezza, metodi stringa.

Lucidi-6 (link)

Lez. 09/10/19 (+esercitazione)

    lez9ottobre2019

Input di dati in py2 e py3: interi ,float, stringhe. Prompt.

Conversione e controllo dell’input. Input ricorsivo. Sviluppo

incrementale, sviluppo per funzioni. Cenni sui cicli.

Lucidi-5 (link)

Lez. 08/10/19   

lez8ottobre2019

Operatori logici e relazionali, espressioni booleane.

Operatori quoziente e resto py2 e py3.

Costrutto condizionale: if, else, elif. Condizioni concatenate

e annidate. Ricorsione e funzioni ricorsive. Return in funzioni ricorsive..

Lucidi-4 (link)

Lez. 07/10/19

 lez7ottobre

Funzioni, definizione e blocco istruzioni.

Parametri e argomenti. Conversioni di tipo.

Import di librerie, libreria matematica.

Funzione id() e locals(). Composizione di Funzioni.

Valori restituiti: None e uso di Return. Variabili

locali a una funzione.

Lucidi-3 (link)

Lez. 02/10/19 (+seminario Faggin)

Funzioni in python. Funzioni built in, di libreria, definite dall’utente.

Funzioni matematiche. Variabili in input. Corpo di una funzione,

indentazione e sintassi. Nomi delle funzioni, chiamata e valore restituito.

Lucidi-3 (link)

 

Lez. 01/10/19

Ancora su variabili e dati in memoria. Stringhe e loro

gestione in memoria. Uso della funzione print (python 2 e 3), differenza

tra stampa su schermo e shell interattiva. Scrittura programmi

su file .py. Uso di pycharm. Variabili nell’ambiente e locals.

Help in python. Parole chiave (python 2 e 3).

Import di funzioni, costanti e libreria matematica. Run di programmi in pycharm.

Operatori: matematici, logici, relazionali. Espressioni e valori restituiti.

Operatore assegnamento, divisione intera (python 2 e 3). Concatenazione di stringhe.

Lucidi-2 (link)

 

Lez. 30/09/19

Libro di testo in pdf (link)

Introduzione al corso  (link)

Programmi, interpreti, compilatori, sorgenti ed eseguibili  (link)

Ambiente di sviluppo Python ed interprete.

Cenni sui sistemi operativi, su memorizzazione dei dati negli elaboratori

e sull’esecuzione delle istruzioni dei programmi.

Il linguaggio Python: introduzione.

Dati, variabili, espressioni, tipi di dato.

Link utili:

https://www.jetbrains.com/pycharm/

https://www.python.org/downloads/release/python-370/

https://www.python.org/download/releases/2.7/

Avvisi old 19-20

Questionnaire and social

Share on:
Impostazioni cookie