Basi di Dati Realizzato da Roberto Savino Sommario • Aspetti teorici della teoria dei database relazionali • Aspetti progettuali di un database relazionale • Aspetti applicativi: Microsoft Access Realizzato da Roberto Savino 2 Aspetti teorici della teoria dei database relazionali Database: Prima Definizione Un Database è un archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati. Esempio: Rubrica Telefonica Interlocutori Nome Cognome Telefono Indirizzo Mario Rossi 0692873 Via Conteverde,68 Paolo Bianchi 0927362 Corso Italia,15 Carlo Verdi 0283472 Piazza Indipendenza,4 Realizzato da Roberto Savino 4 Tabella • I dati nel database sono strutturati ossia sono organizzati in tabelle. • La tabella è costituita da colonne o campi campo righe o record Interlocutori record Nome Cognome Telefono Indirizzo Mario Rossi 0692873 Via Conteverde,68 Paolo Bianchi 0927362 Corso Italia,15 Carlo Verdi 0283472 Piazza Indipendenza,4 Realizzato da Roberto Savino 5 Campi • Ogni campo ha associato: Un nome (etichetta) Un tipo di dato (numerico,testo,…) Un insieme di attributi dipendenti dal tipo di dato scelto (dimensione, formato,…) Interlocutori Nome Cognome Telefono Indirizzo Mario Rossi 0692873 Via Conteverde,68 Paolo Bianchi 0927362 Corso Italia,15 Carlo Verdi 0283472 Piazza Indipendenza,4 Realizzato da Roberto Savino 6 Chiave primaria • Al fine della ricerca è opportuno per ogni record poter essere distinto da qualsiasi altro. • E’ necessario un valore (o un insieme di valori) che identifichi il record univocamente. • Tale valore prende il nome di chiave di ricerca primaria • Una chiave può essere costituita da un campo o dalla combinazione di più campi Realizzato da Roberto Savino 7 Chiave primaria: Esempio • Il campo Nome non va bene come chiave primaria Interlocutori Nome Cognome Telefono Indirizzo Mario Rossi 0692873 Via Conteverde,68 Paolo Bianchi 0927362 Corso Italia,15 Mario Gialli 3434234 Piazza della Repubblica, 23 Realizzato da Roberto Savino 8 Chiave Primaria: Esempio (continua) • I campi Nome e Cognome presi insieme non vanno bene come chiave primaria se esistono omonimi • Il campo Codice Fiscale è sufficiente, ma se non fosse presente nella tabella ? Realizzato da Roberto Savino 9 Chiave Primaria: Contatore • Posso definire un campo aggiuntivo di tipo contatore, distinto per ogni record della tabella Interlocutori #Interlocutore Nome Cognome Telefono 1 Mario Rossi 0692873 2 Paolo Bianchi 0927362 3 Mario Gialli 3434234 Realizzato da Roberto Savino 10 Indice • Un indice consente il recupero immediato dei dati mediante la ricerca random (Es. CD) opposta a quella sequenziale (Es. TAPE). • La chiave primaria deve essere associata ad un indice • Possiamo però definire indici anche su campi diversi dalla chiave primaria ma con accesso frequente. • La definizione di indici complica la struttura interna del database Realizzato da Roberto Savino 11 Database Relazionale • Un database è costituito da tabelle che sono correlate mediante relazioni tra campi. • Le relazioni consentono la costruzione di insiemi di dati (record logici) aggregando campi appartenenti a tabelle diverse. #Interlocutore Nome Cognome Telefono Interlocutori Indirizzo Nome Azienda Telefono Azienda Realizzato da Roberto Savino Indirizzo Azienda 12 Esempio (continua) Interlocutori Nome Cogno me Nome Aziend a Indirizzo Azienda Telefono Azienda Mario Rossi Atac Via Milano,23 08543572 Paolo Bianch FS i Piazza Belli,5 06324613 Mario Gialli Fiat Viale XXI Aprile,397 02473465 Atac Via Milano,23 08543572 Antoni Verdi o DATI RIDONDANTI (RIPETITIVI) Realizzato da Roberto Savino 13 Dati Ridondanti • Sono un onere in termini di spazio occupato • Sono pericolosi in fase di aggiornamento del database: che succede se modifico l’indirizzo dell’azienda? Nome Cognome Nome Azienda Indirizzo Azienda Telefono Azienda Mario Rossi Atac Via Milano,23 08543572 Paolo Bianchi FS Piazza Belli,5 06324613 Mario Gialli Fiat Viale XXI Aprile,397 02473465 Antoni o Verdi Atac Via Milano,23 08543572 Realizzato da Roberto Savino 14 Esempio (continua) Interlocutori Aziende #Interlocutore Azienda Nome Indirizzo Cognome Numero Di Telefono Telefono Indirizzo relazione Azienda Tabella Primaria Tabella Correlata Realizzato da Roberto Savino 15 Esempio (continua) Nome Cognome Azienda Mario Rossi Atac Paolo Bianchi FS Mario Gialli Fiat Antonio Verdi Atac Interlocutori Aziende Azienda Indirizzo Telefono Atac Via Milano,23 08543572 FS Piazza Belli,5 06324613 Fiat Realizzato da Roberto Savino Viale XXI Aprile,397 02473465 16 Relazione Uno ad Uno • Ad un record di una prima tabella corrisponde, al massimo un record di una seconda tabella Direttore Dipartimento #Direttore Nome #Dipartimento dirige Cognome Telefono Nome Telefono (1,1) Indirizzo Indirizzo Realizzato da Roberto Savino 17 Relazione Uno a Molti • Ad un record di una prima tabella corrispondono più record di una seconda tabella (non vale il viceversa) Giocatore Squadra #Giocatore Nome Nome gioca Cognome Data Nascita Città Colori Sociali (1,n) Squadra Realizzato da Roberto Savino 18 Relazione Molti a Molti • Ad un record di una prima tabella corrispondono più record di una seconda tabella (vale il viceversa) Studente #Studente Nome Cognome Data Nascita Corsi frequenta ? ? (n,m) #Corso Nome Ore Lezione Quali campi associo ? Realizzato da Roberto Savino 19 Esempio: Scomposizione della relazione Molti a Molti Studente Corsi #Studente #Corso Nome Nome Cognome Ore Lezione Data Nascita (1,n) (1,n) #Corso #Studente Realizzato da Roberto Savino Tabella intermedia Corsi Frequentati 20 Chiave Esterna • Se la relazione è tra una chiave primaria di una tabella secondaria e un campo di una tabella primaria, tale campo prende il nome di chiave esterna Giocatore Squadra #Giocatore Nome Nome gioca Cognome Data Nascita Città Colori Sociali (1,n) Squadra Realizzato da Roberto Savino 21 Integrità Referenziale • Quando si definiscono relazioni è importante che sia mantenuta l’integrità. • Esempio: Non vogliamo studenti che frequentano corsi non registrati o corsi frequentati da studenti non registrati. Non vogliamo eliminare corsi frequentati da studenti • Per attivare questi controlli dobbiamo indicare al sistema di mantenere l’integrità referenziale • L’integrità referenziale è importante ma pone dei vincoli che possono compromettere la gestione del sistema Realizzato da Roberto Savino 22 Aspetti Progettuali di un Database Relazionale Realizzato da Roberto Savino Progettazione di un Database • Una corretta progettazione consente di realizzare un database efficace (tutti i dati opportuni sono rappresentati) ed efficiente (in termini di spaziotempo) • Una cattiva progettazione può portare a database ridondanti ed altamente inefficienti • Dunque “Pensare prima”, ovvero progettare il database. Realizzato da Roberto Savino 24 Fasi della Progettazione • Definizione degli obiettivi del database (quale è lo scopo?) • Definizione delle tabelle del database (quali sono le entità principali ?) • Definizione dei campi delle tabelle e degli attributi dei campi (quali sono i dati che caratterizzano tali entità?) • Definizione delle relazioni tra tabelle (in che modo sono correlate tali entità) • Verifica della struttura ed eventuali correzioni Realizzato da Roberto Savino 25 Esempio 1: Obiettivi • Supponiamo di dover realizzare un database relativo agli ordini di prodotti di una piccola impresa. • Il database deve contenere i dati dei clienti; un cliente può effettuare 1 o più ordini (in cui ci sono 1 o più prodotti) Realizzato da Roberto Savino 26 Esempio 1: Definizione delle tabelle Clienti Ordini Prodotti Dettaglio Ordine Realizzato da Roberto Savino 27 Esempio 1: Definizione dei campi delle tabelle Clienti #Cliente Nome Ordini Cognome #Ordine Indirizzo #Cliente Telefono Prodotti Dettaglio Ordine #Prodotto #Ordine Nome #Prodotto Tipologia Foto Realizzato da Roberto Savino Prezzo 28 Esempio 1: Definizione degli attributi dei campi Clienti #Cliente: Contatore Nome: Testo Ordini Cognome: Testo #Ordine: Contatore Indirizzo: Testo #Cliente: Numerico Telefono: Numerico Prodotti Dettaglio Ordine #Prodotto: Contatore #DettaglioOrdine: Contatore Nome: Testo #Prodotto: Numerico Tipologia: Testo Foto: Oggetto OLE Realizzato da Roberto Savino Prezzo: Valuta 29 Esempio 1: Definizione delle relazioni Clienti #Cliente: Contatore Ordini Nome: Testo (1,n) Cognome: Testo #Ordine: Contatore Indirizzo: Testo #Cliente: Numerico Telefono: Numerico (1,n) Dettaglio Ordine Prodotti #Dettaglio Ordine: Contatore Nome: Testo #Prodotto: Numerico Tipologia: Testo Quantità: Numerico Foto: Oggetto OLE #Prodotto: Contatore (1,n) Realizzato da Roberto Savino Prezzo: Valuta 30 Esempio 1 Clienti Ordini #Cliente Nome Cognome 1 Mario Rossi 2 Paolo Bianchi 3 Mario Gialli 4 Antonio Verdi #Ordine #Cliente 1001 1 1002 1 1003 2 1004 4 Dettaglio Ordine #Dettaglio Ordine #Prodotto Quantità 1001 990032 12 1002 990065 3 1002 990172 55 1002 990012 23 Realizzato da Roberto Savino 31 Esempio 1 #Dettaglio Ordine #Prodotto Quantità 1001 990032 12 1002 990065 3 1002 990172 55 1002 990012 23 #Prodotto Nome Foto Ordine Prezzo 990032 Computer 500 990033 FD 1 … … 990065 Ass … Realizzato da Roberto Savino Dettaglio Prodotto … 50 32 Esempio 2: Obiettivi • Supponiamo di dover realizzare un database relativo agli studenti di un’ università. Gli studenti sostengono esami e seguono corsi. I corsi sono tenuti da docenti. Realizzato da Roberto Savino 33 Esempio 2: Definizione delle tabelle Studenti Corsi Esami Docenti Realizzato da Roberto Savino 34 Esempio 2: Definizione dei campi delle tabelle Corsi Studenti #Studente #Corso Nome Cognome Nome Indirizzo Docente Telefono Docenti Esami #Docente #Esame Nome Corso Cognome Data Indirizzo Telefono Realizzato da Roberto Savino Voto 35 Esempio 2: Definizione degli attributi dei campi Corsi Studenti #Studente: Contatore #Corso: Contatore Nome: Testo Nome: Testo Docente: Numerico Docenti #Docente: Contatore Nome: Testo Cognome: Testo Indirizzo: Testo Realizzato da Roberto Savino Telefono: Numerico Cognome: Testo Indirizzo: Testo Telefono: Numerico Esami #Esame: Contatore Corso: Testo Data: Data/Ora Voto: Numerico 36 Esempio 2: Definizione delle relazioni Corsi (n,m) Nome #Corso Cognome Nome Indirizzo Docente Docenti Studenti #Studente Telefono (1,n) #Docente Esami (1,n) #Esame Nome Studente Cognome Corso Indirizzo Data Telefono Realizzato da Roberto Savino (1,n) Voto 37 Esempio 2: Definizione delle relazioni Studenti Studenti Frequentanti (1,n) #Studente (1,n) #Corso Nome Corsi #Corso Nome #Studente Docente Cognome Indirizzo Telefono Docenti (1,n) #Docente Esami (1,n) #Esame Nome Studente Cognome Corso Indirizzo Data Telefono Realizzato da Roberto Savino (1,n) Voto 38 Esempio 1 Studenti Studenti Frequentanti #Studente Nome Cognome 1 Mario Rossi 2 Paolo Bianchi 3 Mario Gialli 4 Antonio Verdi #Corso #Studente 1001 1 1002 1 1003 2 1004 4 Corsi #Corso Nome Docente 1001 Analisi I 99001 1002 Fisica I 99002 1003 Logica 99003 1004 Sistemi 99004 Realizzato da Roberto Savino 39 Esempio 1 Docenti #Docente Nome Cognome 99001 Pitagora 99002 Albert Einstein 99003 Renè DeScartes #Esame #Studente Corso Data Voto 110001 1 1001 2/2/2004 18 110002 1 1002 23/3/2004 24 110003 2 1001 4/2/2004 30 110004 4 1004 12/4/2004 27 Realizzato da Roberto Savino Esami 40 Aspetti applicativi: Microsoft Access Realizzato da Roberto Savino Tipi dati • Testo: combinazione di caratteri e numeri fino a 255 caratteri • Memo: combinazione di caratteri e numeri fino a 65535 caratteri • Numerico: valori numerici tra cui (Byte, Intero, Intero lungo, Precisione singola, Precisione doppia, ID replica) • Data/Ora: valori di data e ora dall’anno 100 all’anno 9999 Realizzato da Roberto Savino 42 Tipi di dati • Valuta: valori di valuta con quattro cifre decimali • Contatore: numero sequenziale incrementato automaticamente • Si/No: valori booleani • Oggetto OLE: foglio Excel, Immagine • Collegamento Ipertestuale: percorso di un file o di una pagina Web Realizzato da Roberto Savino 43 Attributi dei campi • Dimensione: numero max di caratteri • Formato: permette di memorizzare (output) i vari dati in modi differenti • Maschera di input: vincola l’input ad assumere un determinato formato • Etichetta: cambia il nome al campo nelle maschere di input ed output • Valore predefinito: specifica un valore iniziale • Valido se..: consente di definire degli intervalli di validità dei valori immessi Realizzato da Roberto Savino 44 Attributi dei campi • Messaggio di errore: viene mostrato nel caso il campo non sia valido • Richiesto: vincola il campo ad essere obbligatorio • Indicizzato: specifica se sul campo esiste un indice • Consenti lunghezza zero: permette di avere delle stringhe nulle • Compressione Unicode: consente la riduzione dello spazio per la memorizzazione Realizzato da Roberto Savino 45 Garantire la correttezza dei dati immessi • Creare maschere di input che impongono un formato sull’immissione dei dati Es. Data g/m/a oppure m/g/a ? • Definire un formato di memorizzazione dei dati • Creare delle regole di convalida che impongono una limitazione ai dati, introducendo dei vincoli Realizzato da Roberto Savino 46 Regole di convalida • Le regole di convalida sono espressioni che consentono un controllo preciso su ogni campo o su interi record Per i campi (l’unico termine dell’exp sarà il campo stesso) Vanno inserite nell’attributo Valido se del campo Es. [Voto] >=18 And <=30 Per i record (il valore di un campo è messo in relazione con quello di altri); solo alla fine dell’inserimento dell’intero record si può verificare la correttezza Vanno inserite nell’attributo Valido se della finestra Proprietà tabella Es. [DataSpedizione] > [DataOrdine] Realizzato da Roberto Savino 47 Integrità Referenziale • Insieme di regole che garantiscono che le relazioni siano valide e che non vengano modificati o eliminati i record correlati • Può essere applicata solo se: Il campo corrispondente della tabella primaria è una chiave primaria o dispone di un indice univoco I campi correlati hanno lo stesso tipo di dati (a meno di eccezioni) Entrambe le tabelle appartengono allo stesso DB Access Realizzato da Roberto Savino 48 Limiti dell’Integrità Referenziale • Il campo chiave esterna non può contenere un valore che non è contenuto nella chiave primari (permesso solo NULL su record non in relazione) • Non è possibile eliminare record nella tabella primaria se esistono record correlati in quella secondaria • La chiave primaria non può essere modificata se il record ha record correlati Realizzato da Roberto Savino 49 Maschere • E’ un’interfaccia per l’inserimento, la visualizzazione, la modifica, la cancellazione dei record presenti nel DB • Permette ad un utente di un DB di utilizzarlo senza necessariamente conoscere Access Realizzato da Roberto Savino 50 Ricerca di dati • Funzione Trova • Applicare un Filtro: Può essere applicato solo ad una tabella aperta Opera solo su una tabella Seleziona record e non campi • Query Realizzato da Roberto Savino 51 Filtri • Filtro in base a selezione: pone come criterio la stringa della cella attiva o la parte selezionata di una stringa • Filtro in base a maschera: consente di impostare più criteri contemporaneamente (<,>,=,<>) su più campi Realizzato da Roberto Savino 52 Query Realizzato da Roberto Savino Query • Interrogazione sull’archivio che estrae un insieme di dati che corrispondono a determinati criteri • Le interrogazioni possono essere su più tabelle e avere più criteri • Le interrogazioni avvengono mediante il linguaggio SQL (Structured Query Language) • La generazione delle query in Access avviene mediante l’interfaccia grafica (con la tecnica QBE = Query By Example) senza la necessità di conoscere SQL Access è quindi un interprete • Il risultato della query è una tabella con i dati che soddisfano i criteri della query. Tale tabella può essere associata ad una maschera, ridotta con filtri, oggetto di una nuova query, stampata attraverso un report Realizzato da Roberto Savino 54 Esempio (Facile) • Vogliamo scrivere una query che dia il nome e cognome dell’interlocutore e il numero di telefono dell’azienda in cui lavora • In altre parole vogliamo la seguente tabella come risultato della query: Nome Cognome Telefono Azienda Mario Rossi 08543572 Paolo Bianchi 06324613 Mario Gialli 02473465 Antonio Verdi 08543572 Realizzato da Roberto Savino 55 Esempio: Rubrica Telefonica Nome Cognome Azienda Mario Rossi Atac Paolo Bianchi FS Mario Gialli Fiat Antonio Verdi Atac Interlocutori Aziende Azienda Indirizzo Telefono Atac Via Milano,23 08543572 FS Piazza Belli,5 06324613 Fiat Realizzato da Roberto Savino Viale XXI Aprile,397 02473465 56 Esempio (Continua) • Vogliamo scrivere una query che dia il nome e cognome dell’interlocutore e il numero di telefono dell’azienda in cui lavora • Individuiamo le tabelle della query Interlocutori, Aziende • Individuiamo i campi della query nome(Interlocutori), cognome(Interlocutori), telefono (Aziende) • Ci sono altri vincoli che impongono criteri? No Realizzato da Roberto Savino 57 Passaggi per la costruzione di Query • Selezione della funzione (creazione guidata, struttura…) • Scelta della definizione della struttura della query (ovvero delle tabelle su cui operare) • Selezione dei campi su cui operare e i campi da inserire nella tabella risultato • Definizione dei criteri • Esecuzione della query Realizzato da Roberto Savino 58 Operatori Logici: AND, OR • Criterio1 And Criterio2 vengono restituiti tutti i record che soddisfano entrambi i criteri ES. Tutti gli studenti che frequentano il corso di Basi di dati e non hanno sostenuto l’esame di Word • Criterio1 Or Criterio2 vengono restituiti tutti i record che soddisfano Criterio1 + tutti i record che soddisfano Criterio 2 + tutti i record che soddisfano entrambi ES. Tutti gli studenti che hanno sostenuto l’esame di Basi Dati oppure di Foglio Elettronico Realizzato da Roberto Savino 59 Operatori Logici: NOT • Not Criterio Vengono selezionati tutti i record che non verificano il criterio ES. Tutti gli studenti che non hanno sostenuto l’esame di Reti Realizzato da Roberto Savino 60 Operatori di Confronto • Servono per mettere a confronto i campi con dei valori numerici,alfanumerici o date • ES. Tutti gli studenti che hanno sostenuto un qualsiasi esame con un voto maggiore o uguale a 24. Il vincolo è su Voto: >= 24 • ES. Tutti gli studenti che hanno sostenuto l’esame di basi dati in data (uguale) 17/11/2004 Il vincolo è su Data: = #17/11/2004# • ES. Tutti i prodotti con prezzo minore di 100 euro Il vincolo è su Prezzo: < 100 • Per i dati alfanumerici si considera l’ordinamento lessicografico ES. “Anna” < “Antonio” < “Mario” <> diverso Realizzato da Roberto Savino 61 Operatori complessi • Between 12 And 40 equivale >=12 And <=40 • In (a1,…,an) equivale a1 Or a2 Or… …Or an • date() restituisce la data di sistema • Null e Not Null permettono di asserire se il campo non ha valore o ha un valore • Nel caso di campi Si/No i criteri usabili sono Si,No,Vero,Falso • Nei criteri dei campi testuali è possibile usare i caratteri jolly (? e *) ES. Tutti i voti degli studenti con iniziale del Cognome ‘D’ Vincolo è su Cognome: = “D*” Realizzato da Roberto Savino 62 Caratteri jolly • Servono per esprimere delle sequenze di caratteri non note. ? • Indica un carattere • ES. Mari? Corrisponde a Maria, Marib,Maric,….,Mariz… * • Indica una sequenza di 0 o n caratteri • ES. casa* Corrisponde a casa, casato, casale, (ma ci sono anche parole senza senso) casafsfhdh, casashdfhsu… Posso usarli in combinazione • ES. Ca*ll? Corrisponde a Castello, Castelli, Casello, Caselli, Casella…. Realizzato da Roberto Savino 63 Criteri di una Query • Per imporre i criteri usa le righe Criteri o Oppure • Le celle sono legate da vincolo di AND se si trovano sulla stessa riga, di OR se si trovano su righe diverse Realizzato da Roberto Savino 64 Tabelle dinamiche • Le tabelle generate dalle query sono dinamiche: i dati in una tabella di output di una query sono modificabili e le modifiche vengono registrate nelle tabelle origine Realizzato da Roberto Savino 65 Esempio (Un po’ meno facile) • Vogliamo tutti i nomi e cognomi degli studenti che hanno sostenuto l’esame di basi dati nell’anno 2002 • Individuiamo le tabelle della query: Studenti, Esame, Corso (serve perché qui è contenuto il nome del corso) • Individuiamo i campi della query: nome (Studenti), cognome (Studenti), nome (Corso), data (Esame) • Ci sono altri vincoli che impongono criteri? nome (Corso) = “basi dati” data (Esame) >=#1/1/2002# And <=#31/12/2002# Realizzato da Roberto Savino 66 Esempio 2: Definizione delle relazioni Studenti Studenti Frequentanti (1,n) #Studente (1,n) #Corso Nome Corsi #Corso Nome #Studente Docente Cognome Indirizzo Telefono Docenti (1,n) #Docente Esami (1,n) #Esame Nome Studente Cognome Corso Indirizzo Data Telefono Realizzato da Roberto Savino (1,n) Voto 67 Report Realizzato da Roberto Savino Report • Una volta compilata una tabella o effettuata la query, il report permette di poter stampare il risultato in forma elegante ed efficace • E’ possibile attivare altre opzioni di ricerca: i dati di un report possono essere raggruppati per valori di determinati campi. Questi raggruppamenti permettono di impostare funzioni di calcolo di ciascun gruppo, ottenendo nel report dei dati aggiuntivi • La struttura di un report è divisa in fasce: contiene un’intestazione ed un piè di pagina per l’intero report, per ogni pagina e per ciascun raggruppamento impostato (migliorano il controllo su ogni elemento inserito in un report) Realizzato da Roberto Savino 69 Esempio Report Realizzato da Roberto Savino 70 Struttura di un report Intestazione report Intestazione pagina Intestazione pagina Intestazione pagina Corpo 1 Piè di pagina pagina 2 Piè di pagina pagina Intestazione pagina 4 3 Piè di pagina pagina Intestastione pagina … ultima Piè di pagina pagina Piè di pagina pagina Realizzato da Roberto Savino Piè di pagina report 71 Realizzato a cura di Roberto Savino