Introduzione ai database parte seconda Ernesto Damiani Database Management Systems Management System Utente o programma applicativo database Management System database Commenti Utente o programma applicativo – Dati integrati in un unico sistema: il database – Indipendenza del formato dei dati dall’ambiente applicativo - è il Management System ad accedere ai dati e non i programmi applicativi – Meno duplicazioni - un’unica memorizzazione fisica dei dati – Gli utenti e i programmi accedono ai dati facilmente, attraverso una tecnica standard Management System Utente o programma applicativo database Cosa sono i database? • File strutturati che contengono collezioni di record • Informazioni ausiliarie e metadati – Schema - descrizione della struttura del database. Rende possibile l’indipendenza dei dati dai programmi – Indici, report, moduli.. Cosa rappresentano i database? • Il database costituisce un modello dell’informazione d’interesse dell’utente – il livello di dettaglio o granularita’ dipende dall’applicazione – il modello è dinamico – transazioni: rappresentazioni di eventi atomici che riguardano il database Transazioni • Programmi che realizzano attività frequenti e predefinite, con poche eccezioni, previste a priori. • Esempi: – versamento presso uno presso sportello bancario – emissione di certificato anagrafico – dichiarazione presso l’ufficio di stato civile – prenotazione aerea Un po’ di storia – 1960 - Gestione dei file su disco • Sviluppo del supporto hardware – 1970 - Il Modello Relazionale - E.F. Codd • I dati organizzati in tabelle viste come relazioni tra le righe • Granularita’ controllata: si specificano le righe da processare • Svantaggi - carico computazionale. Hardware sufficientemente potente solo a partire dagli anni ‘80 – 1979 - I Micro DBMS • dBase II • Access e Paradox – Fine anni ‘80 - Architetture Database Client-Server – Anni ‘90 - DBMS a oggetti – Oggi - Database Multimediali e Distribuiti Componenti di un DB • Quattro componenti principali: – Dati utente - rappresentati da piu’ tabelle o relazioni • relazione - una tabella di dati composta da righe e colonne. Le colonne sono chiavi (o attributi) e le righe sono record. – Metadati - descrizioni della struttura del DB. • Schema: definisce i nomi delle tabelle e delle chiavi • Tabelle di sistema - contengono i nomi delle tabelle utente, # e nomi delle chiavi, e per ciascuna tabella la chiave primaria (per cui non sono ammesse ripetizioni) Componenti di un DB (2) – Indici - usati per l’accesso rapido ai dati. – Permettono di esaminare un numero ridotto di righe e non tutta la tabella – Gli indici hanno un costo: devono essere aggiornati ad ogni modifica dei dati – Metadati applicativi - struttura e formato dei moduli, interrogazioni e report associati al database Esempio • Schema: Clienti (p.iva, ragione sociale, telefono) • Tabella (clienti.dbf) p.iva (primaria) 011034565656 012393939393 012246446464 ragionesociale Rossi srl Bianchi sas Verdi snc • Indici piva.ndx: ragionesociale.ndx: 011034565656 1 012246446464 3 Bianchi sas 2 Rossi srl 1 012393939393 2 Verdi snc 3 telefono 02345678536 038235363 037393838 Esercizio: • Definire un formato binario per i file .dbf e .ndx • Scrivere un programma mydb.exe (nel linguaggio che preferite) che: – carica in memoria i file in apposite matrici – risponde a interrogazioni della forma (chiave, valore) • Esempio di interazione con mydb.exe: loading database and indices… Ready>(ragionesociale,”Rossi srl”) 011034565656 Rossi srl 02345678536 Ready> Domande e risposte • D. Possiamo rendere mydb.exe parametrico rispetto alla struttura della tabella? • R. Si’. Possiamo creare una tabella delle tabelle che contiene i nomi delle colonne.. • Possiamo aggiungere un ambiente di design? • R. Si’. Bastera’ scrivere un altro programma (design.exe) che permetta di specificare nome e numero delle colonne e di inserire I dati. Il programma design.exe deve anche creare gli indici. • D. Cosi’ completato, mydb.exe e’ un DBMS? • R. No. Permette di creare e gestire una sola tabella per database.. Relazioni tra tabelle • Le relazioni tra tabelle (relationships) non c’entrano niente con il nome di relazioni (relations) dato alle tabelle • Ad esempio, una relazione tra due tabelle A e B si stabilisce riportando in B la chiave primaria di A (foreign key) Nel nostro esempio: p.iva (primaria) 011034565656 012393939393 012246446464 ragionesociale Rossi srl Bianchi sas Verdi snc telefono 02345678536 038235363 037393838 p.iva (foreign) 011034565656 011034565656 012393939393 012246446464 n.fattura(primaria) 1 2 3 4 imponibile 5.000.000 25.000.000 250.000 7.000.000 Commenti: le interrogazioni attributo-valore non bastano piu’. Come esprimere “dammi gli imponibili delle fatture della ditta Rossi” ? Serve un linguaggio.. Linguaggi per basi di dati • L’accesso ai dati può avvenire 1. con linguaggi testuali interattivi 2. con comandi (come quelli del linguaggio interattivo) immersi in un linguaggio ospite (Pascal, C, Cobol, etc.) 3. con comandi (come quelli del linguaggio interattivo) immersi in un linguaggio ad hoc, con anche altre funzionalità (p.es. per grafici o stampe strutturate), anche con l’ausilio di strumenti di sviluppo (p. es. per la gestione di maschere) 4. con interfacce amichevoli (senza linguaggio testuale) SQL, un linguaggio interattivo SELECT Corso, Aula, Piano FROM Aule, Corsi WHERE Nome = Aula Corso Reti Sistemi Aula N3 N3 AND Piano="Terra" Lo studieremo in dettaglio... Piano Terra Terra SQL immerso in Pascal (o altro linguaggio ad alto livello) write('nome della citta''?'); readln(citta); EXEC SQL DECLARE P CURSOR FOR SELECT NOME, REDDITO FROM PERSONE WHERE CITTA = :citta ; EXEC SQL OPEN P ; EXEC SQL FETCH P INTO :nome, :reddito ; while SQLCODE = 0 do begin write('nome della persona:', nome, 'aumento?'); readln(aumento); EXEC SQL UPDATE PERSONE SET REDDITO = REDDITO + :aumento WHERE CURRENT OF P EXEC SQL FETCH P INTO :nome, :reddito end; EXEC SQL CLOSE CURSOR P SQL immerso in linguaggio ad hoc (Oracle PL/SQL) declare Stip number; begin select Stipendio into Stip from Impiegato where Matricola = '575488' for update of Stipendio; if Stip > 30 then update Impiegato set Stipendio = Stipendio * 1.1 where Matricola = '575488'; else update Impiegato set Stipendio = Stipendio * 1.15 where Matricola = '575488'; end if; commit; exception when no_data_found then insert into Errori values('Non esiste la matricola specificata',sysdate); end; Interazione non testuale (in Access) Una distinzione terminologica data definition language (DDL) : per la definizione di schemi (logici, esterni, fisici) e altre operazioni generali; data manipulation language (DML) : per l’interrogazione e l’aggiornamento di (istanze di) basi di dati. Management System Utente o programma applicativo database Componenti del Management System • Tre sottosistemi • Progettazione - strumenti per creare tabelle, interrogazioni, moduli, report. Basato su un linguaggio. • Run-time - esegue le richieste di creazione ed estrazione dati espresse attraverso il linguaggio • Engine - riceve le richieste dal Run Time in termini di tabelle, righe e colonne e le traduce in comandi al sistema operativo o all’hardware del computer. La MS engine gestisce anche l’esecuzione delle transazioni. Lo schema • Database Schema - definisce la struttura delle tabelle, le relazioni tra di loro, i domini degli attributi. • Rappresenta tutte le informazioni di interesse per un dominio applicativo – dominio - insieme dei valori che un attributo puo’ assumere Cosa dobbiamo imparare a fare • Creare lo schema • Creare le tabelle • Definire le relazioni tra tabelle attraverso le foreign key • Popolare le tabelle di dati • Estrarre le informazioni di interesse dalle tabelle attraverso le interrogazioni. Altre attivita’ utili – Definire moduli (form) per aggiornare e consultare le tabelle – Definire report - visualizzazioni formattate del contenuto delle tabelle e/o del risultato delle interrogazioni – Scrivere programmi che interrogano il database Architettura standard (ANSI/SPARC) a tre livelli per DBMS utente utente Schema esterno utente Schema esterno Schema logico Schema interno BD utente Schema esterno utente Architettura ANSI/SPARC: tipi di schemi schema logico: descrizione dell’intera base di dati nel modello logico “principale” del DBMS schema esterno: descrizione di parte della base di dati in un modello logico (“viste” parziali, derivate, anche in modelli diversi) schema fisico: rappresentazione dello schema logico per mezzo di strutture fisiche di memorizzazione. Zoom sul DBMS database administrator programmatore applicativo processore DDL processore DML utente casuale utente finale applicazione piano di esecuzione query supporto esecuzione dizionario dati dati DBMS DBMS in un contesto di rete utenti utenti processo client middleware processo client rete database management system data base database server Progettazione di schemi “Il database rappresenta il dominio informativo che interessa a un utente/applicazione” • Due modi di definire lo schema: – Top Down development - dal generale allo specifico • analizzare i bisogni informativi di un’organizzazione (es. Un sistema contabile completo) • stabilire come raggiungerli • definire lo schema del database • sviluppare le applicazioni che devono interrogarlo o aggiornarlo (es. fatturazione, gestione clienti, fornitori, magazzino, etc.) – Bottom Up development - soluzione a uno specifico problema • creare uno schema per una specifica attivita’ (es. fatturazione) • sviluppare l’applicazione Introduzione al Modello Entity - Relationship Entity - Relationship Model • Il modello E-R (Peter Chen - 1976) e’ il piu’ usato per interpretare, specificare e documentare i requisiti di un DB • Il modello E-R permette di generare automaticamente lo schema Entity - Relationship Model • Istanza di un’entita’ - oggetto di interesse per l’utente (e.g., una fattura) – Classi di entita’ - insiemi di istanze di entita’ dello stesso tipo – Intuitivamente, una classe di entita’ corrisponde a una tabella, un’istanza di entita’ a una riga – Per brevita’, nella progettazione di database spesso chiamiamo entita’ quello che rigorosamente andrebbe chiamato classe di entita’ • Attributi- (Proprieta’) - descrivono le caratteristiche di un’entita’ – tutte le entita’ di una classe hanno le stesse proprieta’ – I valori di un attributo possono essere semplici o composti Entity - Relationship Model • Identificatori - attributi che identificano univocamente un’entita’ – intuitivamente, corrispondono alla chiave primaria • Relazioni: collegamenti tra entita’ – relazioni binarie: 3 tipi • 1:1 • 1:N • N:M • Cardinalita’ massima - massimo numero di istanze di un’entita’ che possono trovarsi su un lato della relazione Entity - Relationship Model • Sintassi: – – – – – – Classi di entita’:rettangoli relazioni: rombi massima cardinalita’ all’interno del rombo nome entita’ all’interno del rettangolo nome della relazione accanto al rombo attributi: ellissi connesse all’entita’ o alla relazione a cui si riferiscono • non esagerare con gli attributi per preservare la leggibilita’ – cardinalita’ minima - ovale sulla linea che rappresenta una relazione Esempio Entity - Relationship Model. • Concetti avanzati (la prossima volta..) – Relazioni ricorsive - relazioni tra istanze della stessa classe – Entita’ deboli - esistenza dipende da quella di un’altra entita’ • sintassi: rettangolo con angoli smussati – Sottotipi - insiemi complessi di attributi