Archivi e Basi di Dati A B C File Programma 1 Programma 2 A B C File modificati Programma 1 DBMS DB Programma 2 Informatica Generale (CdL in E&C), A.A. 2000-2001 55 Problemi nella gestione di archivi separati in applicazioni gestionali complesse Inconsistenza e ridondanza dei dati Riservatezza dei dati Integrità dei dati Concorrenza Informatica Generale (CdL in E&C), A.A. 2000-2001 56 1
Software di gestione di basi di dati strutturati DBMS = Database Management System Si occupa di organizzazione e gestione fisica dei dati accesso ai dati (interrogazioni) condivisione dei dati fra utenti diversi integrità e protezione Informatica Generale (CdL in E&C), A.A. 2000-2001 57 Il modello dei dati Regole per organizzare e strutturare i dati Gerarchico Reticolare Relazionale Orientato agli oggetti (object oriented) Schema di una base dati: descrizione dei dati (utilizzando un linguaggio opportuno) di una particolare applicazione in accordo al modello Informatica Generale (CdL in E&C), A.A. 2000-2001 58 2
Il modello relazionale Basato su teoria degli insiemi e su relazioni Esempio: relazione conto_corrente Numero-cc Nome Indirizzo Saldo 1 Abriani v. Roma 2.356.700 2 Bianchi p. Verdi 3.214.430 3 Sommella v. Bari 2.543.890 4 Leoncini c. Italia 1.246.400 5 D Ecclesia p. Libertà 3.542.270 Informatica Generale (CdL in E&C), A.A. 2000-2001 59 Alcune proprietà delle relazioni Ogni relazione è una tabella Ogni colonna di una tabella è detta attributo Il numero di attributi è detto grado della relazione Ad ogni attributo è associato un dominio Il numero di righe (dette anche tuple) è la cardinalità della relazione Schema di una relazione: nome della relazione più nomi e domini degli attributi Istanza di una relazione: insieme delle tuple presenti ad un dato istante Informatica Generale (CdL in E&C), A.A. 2000-2001 60 3
Schemi di relazioni relation conto-corrente (numero-cc: integer, nome: array[1..20] of char, indirizzo: array[1..20] of char, saldo: integer). relation movimento (numero-cc: integer, data-mov: data, numero-mov: integer, importo: integer, causale: char). Informatica Generale (CdL in E&C), A.A. 2000-2001 61 Istanza di una relazione movimento Numero-cc Data-mov Numero-mov Importo Causale 1 26-2-99 1 200.000 V 1 26-2-99 2-300.000 P 1 15-3-99 1 2.300.000 S 4 15-3-99 1-400.000 A 3 10-3-99 1 3.100.000 S V=versamento, P=prelievo, A=pagamento assegni, S=accredito stipendio Informatica Generale (CdL in E&C), A.A. 2000-2001 62 4
Il concetto di chiave Chiave primaria: insieme di attributi i cui valori identificano univocamente e in modo minimale una riga Esempi Per la relazione conto_corrente: numero-cc Per la relazione movimento: (numero-cc, data-mov, numero-mov) Chiave esterna: uno o più attributi che costituiscono una chiave primaria per un altra relazione Informatica Generale (CdL in E&C), A.A. 2000-2001 63 Chiavi primarie ed esterne Numero-cc Tipo-cc Nome Indirizzo Saldo 1 Verde Abriani v. Roma 2.356.700 2 Oro Bianchi p. Verdi 3.214.430 3 Blu Sommella v. Bari 2.543.890 4 Blu Leoncini c. Italia 1.246.400 5 Oro D Ecclesia p. Libertà 3.542.270 Chiave primaria Tipo-cc Descrizione Tasso-c Tasso-d Chiave esterna Verde CC Giovani 3.0 5.0 Blu CC Standard 2.0 4.0 Oro CC Privilegiato 2.5 4.0 Informatica Generale (CdL in E&C), A.A. 2000-2001 64 5
Normalizzazione Obiettivo della normalizzazione è di evitare ridondanza dei dati (dati duplicati) e conseguenti inconsistenze Esistono più forme normali prima f.n.: attributi ad un solo valore seconda f.n.: attributi dipendenti dall intera chiave terza f.n.: attributi dipendenti direttamente dalla chiave Informatica Generale (CdL in E&C), A.A. 2000-2001 65 Prima forma normale relation conto-corrente (numero-cc: integer, nome: array[1..20] of char, indirizzo: array[1..20] of char, movimento:??????? saldo: integer). Più valori possibili relation conto-corrente relation movimento (numero-cc: integer, (numero-cc: integer, nome: array[1..20] of char, data-mov: date, indirizzo: array[1..20] of char, numero-mov: integer, saldo: integer). importo: integer, causale: char). Informatica Generale (CdL in E&C), A.A. 2000-2001 66 6
Seconda forma normale relation movimento (numero-cc: integer, data-mov: date, numero-mov: integer, importo: integer, causale: char estratto-conto: integer). La chiave è la terna (numero-cc,data-mov,numero-mov), ma il numero di estratto conto dipende solo dalla data relation movimento (numero-cc: integer, data-mov: date, numero-mov: integer, importo: integer, causale: char). relation estratto-conto (data-mov: date, periodo: integer). Informatica Generale (CdL in E&C), A.A. 2000-2001 67 Terza forma normale relation movimento (numero-cc: integer, data-mov: date, numero-mov: integer, importo: integer, causale: char valuta: integer). La chiave è la terna (numero-cc,data-mov,numero-mov), ma il numero digiorni per la valuta dipende solo dalla causale relation movimento (numero-cc: integer, data-mov: date, numero-mov: integer, importo: integer, causale: char). relation valuta (causale: char, num-giorni: integer). Informatica Generale (CdL in E&C), A.A. 2000-2001 68 7
Formalismi per la descrizione dei dati Linguaggi DDL (Data Definition Language) descrizione tabelle, attributi, chiavi DML (Data Manipulation Language) inserimento, cancellazione e modifica dei dati QL (Query Language) interrogazioni Ausili grafici Informatica Generale (CdL in E&C), A.A. 2000-2001 69 Il linguaggio SQL (Structured Query Language) Standard per il modello relazionale (presente in tutti i DBMS relazionali) Linguaggio completo: definizione di relazioni ed espressione di interrogazioni e modifiche ad una BD relazionale (cioè, include DDL, DML e QL) Sintassi semplice ed intuitiva Ausili grafici in tutti i DBMS moderni Informatica Generale (CdL in E&C), A.A. 2000-2001 70 8
Creazione di relazioni in SQL CREATE TABLE CONTO-CORRENTE (NUMERO-CC: integer, PRIMARY KEY, NOT NULL, NOME: char(20), NOT NULL, INDIRIZZO: char(20), SALDO: integer, NOT NULL ). CREATE TABLE MOVIMENTO (NUMERO-CC: integer, NOT NULL, DATA-MOV: date, NOT NULL, NUMERO-MOV: integer, NOT NULL, IMPORTO: integer, CAUSALE: char(1), PRIMARY KEY (NUMERO-CC, DATA-MOV, NUMERO-MOV) ). Informatica Generale (CdL in E&C), A.A. 2000-2001 71 Manipolazione dati ed interrogazioni in SQL Nel modello relazionale si basano su tre operazioni fondamentali di algebra relazionale selezione (SELECT) di righe da una tabella su condizione fusione (JOIN) di due tabelle rispetto ad un attributo comune proiezione (PROJECT) di colonne e costruzione di tabelle ridotte Informatica Generale (CdL in E&C), A.A. 2000-2001 72 9
L istruzione SQL SELECT Permette di effettuare le tre operazioni fondamentali La forma generale contiene tre tipi di clausole: SELECT, FROM e WHERE SELECT attributi da selezionare FROM relazione/i da cui selezionare WHERE condizioni che devono essere soddisfatte dai dati Informatica Generale (CdL in E&C), A.A. 2000-2001 73 Esempi di uso dell istruzione SELECT SELECT nome, saldo FROM conto-corrente Il risultato è una relazione che costituisce una proiezione della relazione conto-corrente su due dei suoi attributi Nome Saldo Abriani 2.356.700 Bianchi 3.214.430 Sommella 2.543.890 Leoncini 1.246.400 D Ecclesia 3.542.270 Informatica Generale (CdL in E&C), A.A. 2000-2001 74 10
Esempi di uso dell istruzione SELECT (2) SELECT nome, saldo FROM conto-corrente WHERE saldo < 2000000 Il risultato è una selezione della proiezione di conto-corrente sugli attributi nome e saldo Nome Saldo Leoncini 1.246.400 Informatica Generale (CdL in E&C), A.A. 2000-2001 75 Esempi di uso dell istruzione SELECT (3) SELECT nome, data, importo FROM conto-corrente, movimento WHERE conto-corrente.numero-cc = movimento.numero-cc AND importo>2000000 AND data-mov >1-1-99 Il risultato è dapprima la tabella unione, cui viene applicata la proiezione e, infine, la selezione Nome Data-mov Importo Abriani 15-3-99 2.300.000 Sommella 10-3-99 3.100.000 Informatica Generale (CdL in E&C), A.A. 2000-2001 76 11
Esempi di uso dell istruzione SELECT (4) SELECT data-mov, importo, causale FROM conto-corrente, movimento WHERE conto-corrente.numero-cc = movimento.numero-cc AND data-mov >=1-1-99 AND nome = Abriani ORDER BY importo Il risultato è ordinato rispetto al campo importo Data-mov Importo Causale 26-2-99-300000 P 26-2-99 200000 V 15-3-99 2300000 S Informatica Generale (CdL in E&C), A.A. 2000-2001 77 Altre operazioni Applicabili solo a tabelle omogenee (cioè con gli stessi attributi) Unione insiemistica: C=A? B? = Intersezione insiemistica: C=A? B? = Differenza insiemistica: C=A-B - = Informatica Generale (CdL in E&C), A.A. 2000-2001 78 12
Esempi di uso dell istruzione SELECT (5) SELECT numero-cc FROM conto-corrente WHERE saldo>3000000 UNION SELECT numero-cc FROM movimento WHERE importo>3000000; Il risultato è l unione di due tabelle composte dal solo campo numero-cc Numero-cc Informatica Generale (CdL in E&C), A.A. 2000-2001 79 2 3 5 DDL in Access Informatica Generale (CdL in E&C), A.A. 2000-2001 80 13
DDL in Access (2) Informatica Generale (CdL in E&C), A.A. 2000-2001 81 DML in Access Informatica Generale (CdL in E&C), A.A. 2000-2001 82 14
QL in Access Informatica Generale (CdL in E&C), A.A. 2000-2001 83 QL in Access (2) Informatica Generale (CdL in E&C), A.A. 2000-2001 84 15
Indici Tabella ordinata rispetto ad uno o più attributi? se chiave primaria, l indice è univoco Facilitano l accesso ad una tabella (come l indice di un libro facilita la consultazione e il reperimento di informazione) Contiene due soli attributi valore dell attributo sul quale si effettua l ordinamento posizione nella tabella indicizzata Informatica Generale (CdL in E&C), A.A. 2000-2001 85 Indici: esempio Indice Cognome Pos. Abriani 9 Bianchi 5 D Ecclesia 2 Leoncini 8 Maddalena 3 Murat 7 Nicoletti 4 Sommella 6 Spada 1 Tabella studenti Cognome Spada D Ecclesia Maddalena Nicoletti Bianchi Sommella Murat Leoncini Abriani Informatica Generale (CdL in E&C), A.A. 2000-2001 86 16
Ricerca in un indice Ricerca dicotomica (o logaritmica ) Formalizza la ben nota procedura di ricerca di una voce in un dizionario o un elenco Efficiente tabella di N righe?log 2 N? accessi al più con ricerca dicotomica N accessi al più con ricerca sequenziale Esempio: N=1000000? solo 20 accessi Informatica Generale (CdL in E&C), A.A. 2000-2001 87 Esempio (ricerca della riga dell indice con nome Sommella ) controlla il nome nella posizione intermedia I=?(1+9)/2?=5; poiché tale nome ( Maddalena ) precede Sommella, la ricerca prosegue nella seconda metà della tabella controlla il nome nella posizione I=?(6+9)/2?=7; poiché tale nome ( Nicoletti ) precede Sommella, la ricerca prosegue nell ultima parte della tabella controlla il nome nella posizione I=?(8+9)/2?=8; poiché tale nome è Sommella la ricerca termina Informatica Generale (CdL in E&C), A.A. 2000-2001 88 17
Rappresentazione ad albero di un indice Maddalena Bianchi Nicoletti Abriani D Ecclesia Murat Sommella Leoncini Spada Informatica Generale (CdL in E&C), A.A. 2000-2001 89 Integrità dei dati Integrità semantica valori di tipo corretto, controllo duplicazioni, ecc. Integrità di contesa blocco risorse contese (? problema del deadlock) Integrità referenziale correttezza dei riferimenti fra tabelle Informatica Generale (CdL in E&C), A.A. 2000-2001 90 18
Strumenti applicativi Gestione di maschere (form): determina formato e modalità di interazione dell utente con la base dati Generazione di rapporti (report) Strumenti più generali: linguaggi di IV generazione (includono gestione maschere e generazione di rapporti) Informatica Generale (CdL in E&C), A.A. 2000-2001 91 Uso di maschere per inserimento dati Informatica Generale (CdL in E&C), A.A. 2000-2001 92 19
Creazione automatica di rapporti Informatica Generale (CdL in E&C), A.A. 2000-2001 93 20