Sistemi Informativi Insieme di “strutture” in grado di acquisire, elaborare, trasmettere ed archiviare informazioni in genere ad uso di un’organizzazione (azienda o istituzione).
Dato <> Informazione l I dati sono registrazioni della descrizione di una qualsiasi caratteristica della realtà, su un supporto che ne garantisca la conservazione, la comprensibilità e la reperibilità. l L’ informazione produce variazioni nel patrimonio conoscitivo di un soggetto. Proviene dai dati, ma devono essere inseriti in un contesto interpretativo
DBMS (Database Management System) l Obiettivo: gestione strutturata di dati, organizzati in modo omogeneo. l Base di dati: –Collezione di dati organizzati in modo coerente (un insieme casuale di dati non è una base di dati !) –Modella alcuni aspetti del mondo reale –Costruito con funzionalità ben precise, note fin dall’inizio della progettazione.
Esempi di basi dati: l Rubrica telefonica personale l anagrafe l segreteria studenti dell’università l banca dati centrale del ministero delle finanze l archivio di una biblioteca, di un laboratorio d’analisi mediche, di un museo l banca dati di una carta di credito l banca dati delle prenotazioni dei voli di una compagnia aerea
Basi di dati: operazioni l Definizione della base di dati –quali informazioni rappresentare –quali relazioni tra le informazioni l Manipolazione –inserimento di dati –cancellazione di dati –aggiornamento (update) –interrogazione l Gestione di operazioni da parte di utenti multipli l Protezione e sicurezza dei dati
Livelli di rappresentazione l Livello fisico: come i dati sono memorizzati e organizzati su uno o più supporti di memoria secondaria l Livello logico: come i dati sono organizzati secondo il modello logico adottato (relazionale, gerarchico, ad oggetti etc.) l Livello concettuale: come i dati sono organizzati secondo uno schema concettuale l Livello esterno: come i dati appaiono o vengono presentati all’utente
Livelli di rappresentazione Vista 1Vista 2Vista n Livello logico Livello fisico Livello concettuale
Figure professionali (1) l DB designer –schema concettuale (astratto) della base di dati –mapping su un modello dei dati gerarchico relazionale object oriented...
Figure professionali (2) l DB programmer (realizzazione della base di dati) l DB administrator (gestione della base dati) l Users utenti esperti (usando un linguaggio di interrogazione) naive users (interazioni predeterminate, forms) programmi
Modello relazionale l I dati sono organizzati in relazioni l le relazioni possono essere interpretate/visualizzate come tabelle l un database è un insieme di relazioni
Rappresentazione tabellare dei dati: esempio Libro N.Inv Autore Titolo Anno_ed. Casa ed. Colloc.
Esempio rubrica COGNOMENOMETEL. TanziRosario FedericiSusanna De BernardiSilvio
Modello relazionale l Relazione su due insiemi A e B è un sottoinsieme del prodotto cartesiano A x B Esempio sposato_con Persone x Persone figlio_di Persone x Persone vive_a Persone x Città l Analogamente si possono considerare relazioni tra molti insiemi: A1 x ….xAn
Esempio di relazione l Persone= {Paolo, Luca,Mario} Città={Torino,Roma} l Persone x CittàVive_a Mario PersoneCittà Paolo Luca Torino Roma Città Persone Paolo Luca MarioRoma Torino
Figlio di (Persone x Persone) Persone Paolo Carla MarioFlavio Luca Anna Persone Anna Luca FlavioMario Carla Paolo Sono relazioni diverse!
Relazioni e Attributi Attributi: nomi che specificano un ruolo in una relazione, esempi: l sposato_con(Marito, Moglie) l figlio_di(Figlio, Genitore) l vive_a(Nome,Citta,Provincia) libro( N.Inv, Autore, Titolo, Anno_edizione, Casa_editrice, Collocazione) l Gli attributi devono avere nomi differenti
ESEMPIO DATABASE ESAMI l Prima idea: un’unica tabella: ESAME(Nome,Cognome,Matricola,Titolo, Docente,Voto,Lode) Contiene informazione ridondante: l per ogni esame sostenuto si ripetono tutti i dati dello stuedente l per ogni corso si ripetono titolo e docente
Organizzazione migliore: l STUDENTE(Nome,Cognome,Matricola,Data di Nascita) l CORSI(Titolo,Docente,Codice Corso) l ESAMI(Codice Corso,Voto,Lode,Matricola)
Terminologia l DOMINIO: insieme di valori degli attributi –es. Nomi di persona, Nomi di città, Numeri interi, stringhe di al più 80 caratteri l FORMATO: rappresentazione degli elementi di un dominio –es. tre cifre decimali per i reali
l SCHEMA DI RELAZIONE R(A 1, …, A_ n ) R relazione A i attributi l ISTANZA DI RELAZIONE (o semplicemente relazione) r(R) = { } t= : n-tupla l I singoli valori v i appartengono al dominio dell’attributo A i
l Istanza di relazione = insieme non ordinato di tuple – Non ci possono essere tuple ripetuti –l’ordine delle tuple non conta Database = insieme di istanze di relazioni Terminologia alternativa: – tuple: records – attributi: campi
La tabella rubrica Rubrica(Cognome,Nome,Tel) COGNOMENOMETEL. TanziRosario FedericiSusanna De BernardiSilvio schema nomi degli attributi tuple
Informazione incompleta: Valori Nulli Il valore speciale “null” aggiunto a tutti i domini, per indicare assenza di valore indica: l valore mancante, oppure l valore sconosciuto
Vincoli sulle Relazioni l I valori contenuti nelle tabelle possono essere soggetti a vari tipi di vincoli che dipendono dalla ‘realtà’ che si vuole rappresantare: l vincoli di dominio: valori dei singoli attributi l vincoli di tupla: valori di attributi correlati in una tupla l vincoli di integrità valori di attributi in tuple diverse (anche in relazioni diverse)
Vincoli di dominio vincoli sui valori dei singoli attributi (vincoli di dominio), es: l dato ESAMI(Studente,Voto, Lode,Corso) deve essere Voto >=18 AND Voto <=30 l Vincoli sul valore di un attributo data
Vincoli di tupla vincoli sui valori di attributi correlati, es: l Data la relazione ESAMI come prima deve essere not (Lode = Yes) OR Voto = 30 equivalente a Lode= No OR Voto = 30 l Data la relazione PAGAMENTI(Data,Importo,Ritenute,Netto) deve essere Netto = Importo - Ritenute
Connettivi booleani: tavole di verità Negazione Congiunzione Disgiunzione
Esempio Vincolo (complesso) Supponiamo che STUDENTE contenga anche gli attributi l Borsa di Studio: valori {Yes, No} l Reddito (della famiglia): euro l Residente (nella città sede univ.): {Yes, No} Uno studente ha diritto ad una borsa se –ha una media >= 27 e un reddito <= 20000, oppure – non è residente e ha una media >= 25 e un reddito <=25000
Vincoli di chiave l superchiave: sottoinsieme SK di attributi di una relazione per cui se i j allora t i [SK] t j [SK] Una superchiave identifica un’entità in modo univoco in una relazione l CHIAVE PRIMARIA = superchiave minimale non ci possono essere righe diverse con la stessa chiave primaria (Indichiamo in modo sottolineato gli attributi che formano la chiave primaria)
VINCOLI DI INTEGRITA’ sull’entità : chiave primaria null l integrità referenziale: consistenza tra tuple di due relazioni l integrità semantica: vincoli che dipendono dalla realtà rappresentata (es. numero di libri in prestito a ciascun utente < 5)
Vincoli di Integrità referenziali l In un database relazionale le tabelle sono collegate tra loro tramite i valori di attributi correlati (o comuni) l Esempio –Il collegamento tra la relazione ESAMI e STUDENTI puo’ essere espresso dall’attributo comune Matricola –Il collegamento tra la relazione CORSI e ESAMI puo’ essere espresso dall’attributo comune Codice Corso
l Esempio: Il collegamento tra la relazione LIBRI e la relazione PRESTITI può essere espresso mediante l’ attributo Numero di inventario. l Un vincolo di integrità referenziale tra un insieme di attributi X di una relazione R1 e una relazione R2 è soddisfatto se: i valori di ciascuna tupla di R1 per gli attributi X esistono come valori della chiave primaria di R2 l In questo caso si dice anche che X è una chiave esterna di R1
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare i vincoli! –Interrogazione
Interrogazione l Linguaggio SQL (Structured Query Language) l Produce come risultato una tabella l Clausola Base –SELECT “Lista di attributi” FROM “Elenco relazioni” WHERE “Condizione”
SQL (Structured Query Language) l SQL: Linguaggio standard per creazione e interrogazione di DB l Vediamo solamente come formulare interrogazioni con SQL l un’interrogazione produce come risultato una tabella l Clausola Base –SELECT “Lista di attributi” FROM “Elenco relazioni” WHERE “Condizione”
Esempi –SELECT Autore, Titolo FROM Libri WHERE Casa_Editrice = ‘Feltrinelli’ –SELECT Autore, Titolo FROM Libri WHERE (Casa_Editrice = ‘Feltrinelli’) and (Anno_edizione = 1990) –SELECT * FROM Libri WHERE (Casa_Editrice = ‘Feltrinelli’) or (Casa_Editrice = ‘Einaudi’)
Provare l Trova i libri editi da Einaudi o Bompiani, pubblicati dopo 1980 (Autore,Titolo,Casa_ed,Anno_ed) l Trova i libri editi da Einaudi o editi da Bompiani dopo 1980 l Trova i libri editi da Garzanti ma non da Bompiani
Matching approssimato l L’operatore like permette di confrontare il valore di un attributo con un valore specificato in modo incompleto l Si usa con gli operatori _e %, l in ACCESS ? e * l ? indica un carattere qualsiasi l *una sequenza di caratteri qualunque
Esempio –SELECT Autore, Titolo FROM Libri WHERE Autore like “*Man*” l Seleziona tutti i libri in cui il nome dell’autore contiene “Man”
Esempi: query parametriche –Trova tutti i libri presenti in biblioteca, dato il nome dell’autore, Il nome dell’autore viene introdotto dall’utente – SELECT * FROM Libri WHERE Autore = [dimmi il nome dell’autore] –In esecuzione: > dimmi il nome dell’ autore Alessandro Manzoni –Risultato:….
Esempio con like e parametri –SELECT libri.* FROM libri WHERE Autore like "*"&[dimmi l'autore] & "*" l Seleziona tutti i libri in cui il nome dell’autore contiene la stringa introdotta dall’utente l & e’ l’operatore di concatenazione tra stringhe
Operatori insiemistici l UNION, INTERSECT, DIFFERENCE l ESEMPIO –SELECT Autore, Titolo FROM Libri WHERE Casa_Editrice = ‘Feltrinelli’ INTERSECT SELECT Autore, Titolo FROM Libri WHERE Casa_Editrice = ‘Einaudi’
Funzioni aggregate (i cui valori dipendono da più righe) l COUNT, SUM, MAX, MIN, AVG l ESEMPI: –Contare i libri presenti in biblioteca editi da Feltrinelli. SELECT Count(*) FROM Libri WHERE Casa_Editrice = ‘Feltrinelli’
Funzioni aggregate (2) –Calcolare il costo totale dei libri presenti in biblioteca, scritti da Umberto Eco SELECT Sum (Prezzo) FROM Libri WHERE Autore = ‘Umberto Eco’ –Qual è il prezzo del più costoso libro presente in biblioteca? SELECT Max(Prezzo) FROM Libri
Raggruppamento e operatori aggregati l Raggruppare le tuple in base a qualche attributo l applicare le funzioni aggregate a ciascun raggruppamento
Raggruppamento l GROUP BY l ESEMPI Per ogni editore, indicare il costo totale dei libri presenti in biblioteca SELECT Casa_ed, Sum (Prezzo) as Valori FROM Libri GROUP BY Casa_ed
Raggruppamento (2) l ESEMPI –Per ogni autore, contare i libri presenti in biblioteca editi da Einaudi, ed indicarne il costo totale SELECT Autore, Count(*) as Numero, Sum (Prezzo) as Valori FROM Libri WHERE Casa_Ed = “Einaudi” GROUP BY Autore
Raggruppamento (3) l La clausola HAVING consente di imporre una condizione sul risultato di una funzione aggregata –Per ogni autore di almeno 3 libri editi da Einaudi presenti in biblioteca, indicarne il costo totale SELECT Autore, Sum (Prezzo) as Valori FROM Libri WHERE Casa_Ed = “Einaudi” GROUP BY Autore HAVING Count(*) >=3
Ordinamento dei risultati l Si può chiedere che le tuple del risultato siano ordinate in base ai valori dei campi: ORDER BY l Es. Restituire l’elenco dei libri in catalogo, secondo l’ordine alfabetico degli autori, per anno di edizione decrescente –SELECT (*) FROM LIBRI ORDER BY Autore ASC, Anno_ed DESC
Valori Unici l SQL restituisce una tabella che contiene tutte le righe che soddisfano una certa condizione, puo’ contenere duplicati l Per eliminare i duplicati si premette la parola chiave distinct l Esempio elenca i libri per autore e titolo senza ripetizioni (ignorando copie multiple e differenti edizioni) SELECT DISTINCT libri.Autore, libri.Titolo FROM libri ORDER BY Autore DESC;
Query con piu’ tabelle - join l Join: combinare le tuple di più tabelle i cui valori per attributi correlati soddisfano una condizione di confronto (caso più semplice: sono uguali) l Il join di due relazioni è il sottoinsieme del loro prodotto cartesiano specificato dalla condizione di selezione
Relazioni tra tabelle e Join l Le relazioni tra tabelle sono espresse da valori comuni di attributi correlati l Esempio Seleziona gli studenti e gli esami che hanno sostenuto con i rispettivi titoli SELECT Studenti.Nome, Studenti.Cognome, Corsi.Titolo, Corsi.Codice, Studenti.Matricola FROM Corsi, Studenti, Esami WHERE Corsi.Codice =Esami.Codice_Corso AND Studenti.Matricola = Esami.Matricola ORDER BY Studenti.Cognome;
Formulazione Alternativa (1) SELECT Studenti.Nome, Studenti.Cognome, Corsi.Titolo, Corsi.Codice, Studenti.Matricola FROM Corsi, Studenti INNER JOIN Esami ON Studenti.Matricola = Esami.Matricola WHERE Corsi.Codice=Esami.Codice_Corso
Formulazione Alternativa (2) SELECT Studenti.Nome, Studenti.Cognome, Corsi.Titolo, Corsi.Codice, Studenti.Matricola FROM Studenti INNER JOIN (Corsi INNER JOIN Esami ON Corsi.Codice = Esami.Codice_Corso) ON Studenti.Matricola = Esami.Matricola
Join e Aggregati esempi: l Per ogni studente determina quanti esami ha sostenuto l Per ogni corso (titolo) determina il numero di studenti che ne hanno sostenuto l’esame l Per ogni studente determina la media dei voti l Elenca gli studenti che hanno una media >= 27 l Elenca gli studenti che hanno sostenuto più di un esame
Per ogni studente determina quanti esami ha sostenuto (elenca nome,cognome matricola) SELECT Studenti.Nome, Studenti.Cognome, Studenti.Matricola, Count(*) AS Esami_sostenuti FROM Studenti INNER JOIN Esami ON Studenti.Matricola = Esami.Matricola GROUP BY Studenti.Nome, Studenti.Cognome, Studenti.Matricola ORDER BY Studenti.Cognome;
Select annidate l E’possibile utilizzare la tabella risultante da una query come condizione di selezione per un’altra query Esempi: l seleziona il libro con il prezzo massimo l seleziona gli autori i cui autori di libri compaiono in una tabella ma non in un’altra l Seleziona i libri (autore, titolo pubblicati da una casa editrice ma non da un’altra)
Select annidate l SELECT INTERNA produce tabella l SELECT ESTERNA usa tale tabella come condizione l RISULTATO è solo la tabella prodotta dalla select esterna
Libri pubblicati da Garzanti e Bompiani SELECT Autore FROM libri WHERE Casa_ed = ”Bompiani"; Produce una tabella, chiamiamola LibriBompiani SELECT Autore, Titolo FROM libri WHERE Casa_ed = "Garzanti" and Autore In (select Autore from LibriBompiani);
Esempio differenza Seleziona Autore e Titolo, pubblicati da [Casa che pubblica], ma non da [Casa che non pubblica] SELECT Autore, Titolo FROM libri WHERE Casa_ed = [Casa che pubblica] and Autore not in (select Autore from libri where Casa_ed = [Casa che non pubblica]);
Esempio intersezione Seleziona Autore e Titolo dei libri pubblicati sia da [casa1] e da [casa2] SELECT Autore, Titolo FROM libri WHERE Casa_ed = [casa1] and Autore in (select Autore from libri where Casa_ed = [casa2]);