Basi di Dati Luca Allulli12 Umberto Nanni34 Dispense del corso di Basi di dati e sistemi informativi per il corso di laurea in Lingue nella Società dell’Informazione, Università di Roma “Tor Vergata”. Tutti i diritti riservati. È concesso l’utilizzo delle dispense unicamente per la preparazione dell’esame di Basi di dati e sistemi informativi nell’Anno Accademico 2014-2015. 1 Roma Servizi per la Mobilità s.r.l., Piazzale degli Archivi 40, 00144 Roma, Italy, [email protected] 2 Faculty of Humanities, Arts and Social Sciences, University of Rome “Tor Vergata” Roma, Italy, [email protected] 3 Dept. of Computer, Control, and Management Engineering “Antonio Ruberti”, “Sapienza” University of Rome, Italy, [email protected] 4 Research Centre for Transport and Logistics (CTL), “Sapienza” University of Rome, Italy. Capitolo 1 Introduzione Questo corso insegna a usare le basi di dati. Le impareremo a conoscere, a progettare, a interrogare. Prima di addentrarci nell’argomento cerchiamo di capire che cosa siano le basi di dati, come sono fatte e qual è la loro importanza, attraverso una panoramica informale. In modo un po’ grossolano, ma fondamentalmente corretto, possiamo dire che impareremo a “rappresentare l’informazione attraverso delle tabelle”. Analizziamo questa frase e facciamo qualche esempio. 1.1 L’informazione Per prima cosa occorre stabilire l’oggetto del nostro interesse: che cosa vogliamo rappresentare? Essenzialmente una porzione del nostro mondo, dai limiti ben definiti, rilevante per i nostri scopi. Ad esempio, ci potrebbe interessare quello che avviene in un’università, visto con gli occhi della segreteria. Per una segreteria universitaria è essenziale conoscere i dati anagrafici dei propri studenti, dei docenti, e i corsi erogati; inoltre si vorranno rappresentare l’iscrizione degli studenti ai corsi di laurea, gli esami sostenuti e le relative votazioni. Occorrerà dunque decidere il perimetro della porzione di mondo a cui si è interessati, che prende il nome di dominio di interesse, per stabilire in maniera chiara che cosa debba essere rappresentato, e che cosa no. 1.2 La rappresentazione dell’informazione Il fatto di essere in grado di rappresentare l’informazione segna il confine fra la preistoria e la storia. Difatti la scrittura consente di tradurre idee e concetti che descrivono il mondo reale in simboli – siano essi ideogrammi, lettere o altro – adatti a essere registrati su un supporto fisico, come una 1 Capitolo 1. Introduzione tavoletta, un papiro o un foglio di carta. Idealmente la scrittura esaurisce il problema della rappresentazione del dominio di interesse: tramite una lunga relazione scritta, o un diario, è possibile raccontare come è fatta la porzione di mondo che si vuole descrivere. Nel nostro esempio, la segreteria universitaria potrebbe mantenere un diario in cui annota, in forma discorsiva, tutto ciò che accade entro i propri confini: Oggi, 23 febbraio 2015, sono inizati i corsi dell’università. Il prof. Giancarlo de Carlis, nato a Roma il 27 febbraio 1972, tiene il corso di Letteratura Inglese. Al corso sono iscritti gli studenti Silvia Lanfranchi, nata a Milano il. . . I limiti di questa forma di rappresentazione sono evidenti. In breve tempo si riempirebbero tomi e tomi di carta la cui consultazione, senza qualche altra forma di organizzazione dei dati, risulterebbe estremamente difficile e dispendiosa. Inoltre il linguaggio discorsivo, detto linguaggio naturale, non è adatto ad essere automaticamente interpretato da una macchina, sia perché è strutturato in maniera poco rigida, e quindi risulta difficile da analizzare, sia perché è possibile costruire frasi ambigue, interpretabili cioè in più modi, con significati diversi: diventa indispensabile avere contezza del contesto per scegliere l’interpretazione corretta. Per risolvere questi problemi occorre dare ai dati una struttura, un’organizzazione che in qualche modo rispecchi l’organizzazione degli oggetti del mondo reale. Nella vita di tutti i giorni usiamo delle forme strutturate di rappresentazione dell’informazione, per domini specifici. Una rubrica telefonica (cartacea) permette di rappresentare in maniera sintetica il dominio di interesse (i numeri di telefono degli amici), sacrificando la generalità di ciò che si è in grado rappresentare, e la libertà stilistica ed estetica, a beneficio dell’organizzazione e dell’efficienza d’uso dello strumento. 1.3 Livelli di astrazione Consideriamo ancora l’esempio della scrittura. Quando abbiamo imparato a scrivere, alle scuole primarie, ci siamo per prima cosa soffermati sulle lettere, associandole ai suoni che rappresentano e sforzandoci di disegnarle correttamente sulla carta: 1. A B C D... In una seconda fase abbiamo imparato a combinare le lettere per formare le parole: avendo già appreso la manualità della scrittura delle singole lettere, tutti i nostri sforzi erano volti ad affiancarle nella giusta sequenza: c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 2 Capitolo 1. Introduzione 2. ALBERO CASA... In altri termini disponendo di un “servizio” offerto dalle lettere, quello di rappresentare un suono su carta, siamo stati in grado di usare tale servizio per offrire un servizio di natura diversa, quello di rappresentare dei concetti semplici, le parole. Il servizio offerto dalle lettere è un servizio con basso livello di astrazione, perché è molto vicino al mondo fisico. I suoni sono particolari tipi di vibrazione dell’aria, si possono sentire, sono concreti. Le parole sono qualcosa di più lontano dalla fisicità, perché esprimono l’idea che abbiamo di un insieme di oggetti (la parola ALBERO rappresenta non un albero in particolare, ma un generico albero con radici, tronco, foglie ecc.). Aumentiamo ancora il livello di astrazione. Avendo a disposizione il servizio delle parole, possiamo usarlo per esprimere idee più astratte e articolate, rappresentabili tramite frasi, cioè sequenze di parole: 3. L’ALBERO FA OMBRA ALLA CASA SULLA COLLINA È interessante osservare che questo terzo livello di astrazione si basa sul servizio del secondo livello di astrazione, le parole, ed esso soltanto. Le lettere in questo contesto sono ininfluenti (se non per il fatto che sono usate per comporre le parole sulla carta). Potremmo decidere di usare una diversa rappresentazione delle parole, ad esempio tramite ideogrammi, senza che nulla cambi nel rapporto tra il livello di astrazione 3 (frasi) e il livello 2 (parole). In altri termini, quando pensiamo alle frasi ci possiamo dimenticare il fatto che le parole siano rappresentate attraverso delle lettere: per noi il “blocco di costruzione” di base per costruire le frasi sono le parole. Nell’informatica il ricorso a diversi livelli di astrazione è molto comune, perché consente di risolvere problemi complessi con un approccio costruttivo: si iniziano a predisporre strumenti semplici, che offrono servizi molto generici e di basso livello (vicini alla fisica, cioè all’hardware della macchina); sulla base di essi, si costruiscono servizi di livello via via più alto, più comodi per risolvere, con un minor numero di operazioni (di più alto livello) i problemi da affrontare. Consideriamo il problema della rappresentazione dell’informazione. I dispositivi di archiviazione, quali dischi rigidi, dischi ottici o memorie allo stato solido, essenzialmente consentono di rappresentare numeri tramite il codice binario: 11001010 01011000 01110100... Essi sono memorizzati alterando lo stato fisico del supporto di memorizzazione: la polarizzazione delle particelle di un disco magnetico, la sequenza c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 3 Capitolo 1. Introduzione di fori (o di macchie) su un disco ottico, lo stato di circuiti elettrici elementari di una memoria allo stato solido. Il codice binario è formato da soli due simboli, quindi è particolarmente adatto a essere trasformato in un fenomeno fisico, ma poco adatto all’utilizzo finale: pensate se la tastiera del computer avesse solo due bottoni, 0 e 1! Ecco la necessità di livelli di astrazione superiori. Possiamo raggruppare i simboli 0 e 1 (bit) in “parole” ad esempio formate da 8 bit (byte), ed associare un carattere ad ogni possibile byte (il byte 01000001 rappresenta la lettera A nella codifica ASCII): ALBERO CASA... Possiamo poi raggruppare sequenze di byte (o caratteri) e considerarli un unico oggetto, presente sul disco, e richiamabile tramite un nome: il file. Nome file: Albero.txt Contenuto: L’ALBERO FA OMBRA ALLA CASA SULLA COLLINA I programmi sono in grado di manipolare direttamente i file, leggendone e scrivendone il contenuto, e codificando opportunamente le informazioni trattate. Ad esempio, un programma di elaborazione testi dovrà rappresentare, oltre ai singoli caratteri, anche il formato del testo, della pagina, le tabelle, gli elenchi, e così via. Analogamente, un programma di grafica rappresenterà le immagini memorizzando i colori che costituiscono ogni pixel (i punti elementari che formano l’immagine, nella grafica raster ), oppure le operazioni grafiche necessarie per ricostruire un disegno costituito da figure geometriche (punti, linee, cerchi ecc., nella grafica vettoriale). Chiaramente, sviluppare un programma per rappresentare un dominio di interesse complesso scrivendo su un file è molto dispendioso: richiede di inventare e utilizzare una codifica complessa. In altre parole, i file sono oggetti informatici con un livello di astrazione ancora piuttosto basso. A questo punto entrano in scena i sistemi di gestione delle basi di dati (DBMS, Database Management System), nati per offrire strumenti più comodi e potenti per risolvere problemi di rappresentazione dell’informazione. A seconda di quali strumenti offrono, i DBMS possono essere più o meno indicati per una certa classe di applicazioni; un buon DBMS metterà a disposizione degli strumenti sufficientemente espressivi e generici per poter essere impiegato con successo (e facilità) per risolvere un’ampia classe di problemi di rappresentazione. Gli strumenti offerti dal DBMS prendono il nome di modello dei dati. Uno dei modelli dei dati di maggior successo, che nel tempo ha dato prova di godere delle proprietà di semplicità d’uso e di genericità, è il modello relazionale. c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 4 Capitolo 1. Introduzione Gli strumenti offerti da un DBMS relazionale sono essenzialmente delle tabelle. L’utente avrà la possibilità di lavorare con le tabelle: potrà crearle, inserire dati, ricercare dati. Sarà compito del DBMS rappresentare adeguatamente le tabelle tramite strumenti di livello più basso (in genere, file), senza che l’utente se ne debba occupare in prima persona. Sottolineamo che l’utente di un DBMS può essere un essere umano oppure un programma. I principali browser (Google Chrome, Mozilla Firefox), per esempio, memorizzano la cronologia, i siti preferiti, le password e altri dati in una base di dati relazionale. 1.4 Le tabelle Cerchiamo di capire intuitivamente come sia possibile rappresentare una generica porzione di mondo attraverso delle tabelle. Precisiamo intanto una caratteristica importantissima dei database relazionali: le tabelle che costituiscono la base di dati hanno una struttura che in qualche modo riflette le caratteristiche del dominio di interesse, e che deve essere decisa, una volta per tutte, all’atto della creazione della base di dati. Bisogna cioè stabilire fin dall’inizio: • quali tabelle si vogliono usare (assegnando un nome a ogni tabella) • come sono fatte tali tabelle; in particolare, quante colonne ha ciascuna tabella (assegnando un nome a ogni colonna). Questa decisione, una volta presa, è da considerarsi irrevocabile: non sarà possibile ad esempio aggiungere colonne per rappresentare dei dati. Ogni dato dovrà trovare posto come riga aggiuntiva di una (o più) tabelle. L’abilità nel “progettare” una base di dati consiste nel decidere, una volta per tutte, una struttura in grado di accogliere tutti i dati che si potranno presentare nel futuro, grazie a una piena comprensione del dominio di interesse e a una mappatura di tale comprensione nella struttura delle tabelle. Supponiamo di voler creare una base di dati relazionale che ci consenta di rappresentare la nostra rubrica telefonica: per ciascuno dei nostri amici, vogliamo memorizzarne il nome, il cognome, il codice fiscale (d’altronde, chi non desidera conoscere il codice fiscale dei propri amici?), l’indirizzo e i numeri di telefono. Come prima idea, potremmo tabellare le informazioni di interesse nel seguente modo: c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 5 Capitolo 1. Introduzione Rubrica CF RSSMRA. . . BNCGUO. . . VRDCTR. . . Cognome Nome Indirizzo Telefono Rossi Mario Via dei Glicini, 5 067825019 Bianchi Ugo Piazza dei Castani, 23 062452390 Verdi Caterina Via delle Fragole, 34 062202982 Osserviamo la forma ben strutturata in cui stiamo memorizzando i dati. Ad esempio è corretto separare il nome dal cognome, usando due colonne distinte, per non trovarci nella spiacevole situazione di doverci domandare se il nome di Alberto Gianni Neri sia Alberto oppure Alberto Gianni. Ci soddisfa completamente la forma di rappresentazione scelta per la nostra rubrica? Proviamo a immaginare quali problemi si potrebbero presentare: • Casi di omonimia. Potremmo avere due amici con lo stesso nome e lo stesso cognome, ma saremmo in grado di distinguerli attraverso il codice fiscale. Ecco che l’introduzione della colonna “Codice Fiscale”, in apparenza curiosa, inizia ad acquisire una ragion d’essere; • Problemi di efficienza. Forse sarebbe opportuno memorizzare in ordine alfabetico i nostri amici, per essere rapidi nella ricerca delle relative informazioni. Osserviamo, però, che un ordinamento alfabetico ci aiuterebbe solo in parte: per rispondere alla domanda “quale amico ha numero telefonico 0656453423”, dovremmo necessariamente scorrere l’intera colonna Telefono, alla ricerca del numero di interesse. Il problema di rappresentare i dati in modo efficiente è piuttosto complesso; fortunatamente lo possiamo ignorare, almeno in un primo momento, perché il compito sarà svolto internamente dal DBMS. • Problemi di rappresentazione. Che cosa succede se Mario Rossi acquista anche un telefono cellulare? A questo punto avrà un secondo numero di telefono, che non sappiamo bene come trattare nella nostra tabella. Quest’ultimo problema è il più pertinente, ed è causato da una progettazione incorretta: abbiamo scelto di definire una sola colonna per rappresentare i numeri di telefono, e ci si presenta la necessità di inserire un amico con due numeri di telefono – ricordiamo che non è consentito aggiungere una colonna per rappresentare un dato specifico. Occorre progettare diversamente la base di dati. Potremmo decidere di riservare due colonne per rappresentare i numeri di telefono di ogni amico, così: c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 6 Capitolo 1. Introduzione Rubrica CF RSSMRA. . . BNCGUO. . . VRDCTR. . . Cognome Nome Rossi Mario Bianchi Ugo Verdi Caterina Indirizzo Via. . . Piazza. . . Via. . . Telefono 1 Telefono 2 067825019 3420198043 062452390 062202982 - Ma in questo modo avremmo solo spostato il problema un po’ più in là: Mario Rossi potrebbe comunicarci un terzo numero di telefono, quello dell’ufficio, e il problema si riproporrebbe. Definire molteplici colonne può risolvere il problema solo se conosciamo fin dal principio il massimo numero di occorrenze dell’informazione che vogliamo rappresentare; cosa che accadrebbe se, ad esempio, una legge impedisse a un cittadino di possedere più di 10 numeri di telefono. Siccome non è questo il nostro caso, definire una tabella con tante colonne non risolverebbe del tutto il nostro problema; inoltre sarebbe una soluzione poco elegante, scomoda e in qualche modo inefficiente, in quanto: • se cercassimo un numero di telefono, dovremmo leggere più di una colonna, perché prima di trovarlo non avremmo modo di sapere in quale delle tante colonne a disposizione è memorizzato; • molte colonne rimarrebbero parzialmente vuote, dando luogo a sprechi di spazio. Visto che definire tante colonne non risolve il problema, proponiamo una soluzione alternativa. Ritorniamo a utilizzare un’unica colonna per rappresentare numeri di telefono, ma questa volta decidiamo di impiegare più righe per amico, tante quante sono i suoi numeri di telefono: Rubrica CF RSSMRA. . . BNCGUO. . . VRDCTR. . . RSSMRA. . . Cognome Nome Rossi Mario Bianchi Ugo Verdi Caterina Rossi Mario Indirizzo Telefono Via dei Glicini, 5 067825019 Piazza dei Castani, 23 062452390 Via delle Fragole, 34 062202982 Via dei Glicini, 5 3420198043 Nella tabella di esempio, troviamo due righe relative a Mario Rossi perché il nostro amico possiede due numeri di telefono. Abbiamo risolto il nostro problema di rappresentazione? Sì, perché non esistono limiti al numero di righe che possiamo aggiungere, e quindi ai numeri di telefono che possiamo associare ad ogni nostro amico. La soluzione è soddisfacente? Non del tutto. Si possono osservare i seguenti problemi: c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 7 Capitolo 1. Introduzione • molte informazioni sono inutilmente ripetute, comportando un grande spreco di memoria. Ciò si esprime dicendo che siamo in presenza di dati ridondanti; • a causa della ridondanza, alcune operazioni possono essere molto più costose del necessario. Pensiamo a che cosa succederebbe se Mario Rossi si trasferisse in un’altra casa: dovremmo modificare tutte le righe in cui compare l’indirizzo di Mario Rossi (e non siamo in grado di dire, in linea di principio, quante esse siano); un’operazione poco sensata se si pensa che è cambiato solo un dato; • che cosa succederebbe se, per errore, due righe relative a Mario Rossi contenessero informazioni incompatibili, ad esempio due indirizzi diversi? Non avremmo modo di capire quale riga sia corretta e quale no. In altri termini, la base di dati sarebbe inconsistente. Una rappresentazione ridondante apre la possibilità a inconsistenze. Definire più colonne non risolve il problema, aggiungere righe sì, ma in modo insoddisfacente... e se sfruttassimo la possibilità di creare numerose tabelle? Proviamo a seguire la seguente idea: vorremmo che ogni riga di una tabella contenga un’unità elementare di informazione, e vorremmo evitare di incorrere in ridondanze. Allora potremmo definire le tabelle in modo tale che ognuna contenga dati che non si ripetano. In una tabella potremmo inserire i dati anagrafici e l’indirizzo dei nostri amici, che non vogliamo ripetere inutilmente: ogni amico darà luogo ad una e una sola riga della tabella. Chiamiamo questa tabella Amici: Amici CF RSSMRA. . . BNCGUO. . . VRDCTR. . . Cognome Nome Indirizzo Rossi Mario Via dei Glicini, 5 Bianchi Ugo Piazza dei Castani, 23 Verdi Caterina Via delle Fragole, 34 Rimangono da rappresentare i numeri di telefono. Li inseriamo in una tabella Telefoni, in cui l’unità elementare di informazione è l’esistenza di un numero di telefono, e il fatto che esso appartenga a un nostro amico. In altre parole, la tabella Telefoni servirà ad associare i nostri amici ai relativi numeri di telefono. Per identificare i nostri amici possiamo usare il codice fiscale: c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 8 Capitolo 1. Introduzione Telefoni CF RSSMRA. . . BNCGUO. . . VRDCTR. . . RSSMRA. . . Telefono 067825019 062452390 062202982 3420198043 Questa rappresentazione è del tutto soddisfacente, perché permette di rappresentare quanti numeri di telefono desideriamo per ciascun amico (basta aggiungere ogni volta una riga alla tabella Telefoni), senza incorrere in problemi di ridondanza (la ripetizione del codice fiscale nella tabella Telefoni non costituisce ridondanza in quanto è funzionale alla rappresentazione stessa: il CF è in questo caso un’informazione “di servizio” che ci consente di identificare un amico e associarlo al numero di telefono). Esercizio 1. Attraverso ragionamenti intuitivi, simili a quelli dell’esempio della rubrica telefonica, progettare una base di dati relazionale per rappresentare il seguente dominio: Registro automobilistico. Si vogliono rappresentare alcuni dati relativi alle automobili in circolazione. Per ogni automobile si vogliono rappresentare la targa, la marca, il modello, e i dati del proprietario, cioè il cognome, il nome e il codice fiscale. Si osservi che ogni persona può possedere diverse automobili. Esercizio 2. Attraverso ragionamenti intuitivi, progettare una base di dati relazionale per rappresentare il seguente dominio: Segreteria studenti di un’università. Si vogliono rappresentare i dati relativi e ai corsi (nome del corso, nome del docente, numero di crediti, anno di impartizione dell’insegnamento) e agli studenti (numero di matricola, cognome, nome e data di nascita, esami sostenuti con relativa votazione). 1.5 Modelli dei dati e indipendenza dei dati Come abbiamo visto, un modello dei dati è un insieme di strumenti che consentono la rappresentazione dell’informazione. Nei database relazionali, gli strumenti del modello sono semplici tabelle. Il modello relazionale non è l’unico possibile, naturalmente; possiamo distinguere le seguenti tipologie di modelli dei dati, di interesse nello studio delle basi di dati. c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 9 Capitolo 1. Introduzione • Modelli logici. Sono i modelli che l’utente usa per la rappresentazione dell’informazione in una base di dati. Il modello relazionale è un esempio di modello logico. Altri esempi di modelli logici sono il modello gerarchico, in cui i dati sono strutturati “ad albero” (si pensi all’organizzazione in cartelle e sottocartelle di un disco), o il modello reticolare, in cui la struttura dei dati è quella di un “grafo”. • Modelli fisici. Sono i modelli che il DBMS usa per memorizzare i dati sulle periferiche di archiviazione (disco, memoria, ecc.). Ad esempio, se un DBMS relazionale memorizza le proprie tabelle su file, il modello fisico descriverà il modo in cui tali file sono strutturati. Dunque i modelli logici sono modelli di alto livello, e sono gli unici modelli che l’utente è tenuto a conoscere; i modelli fisici sono invece di basso livello, indispensabili per la memorizzazione effettiva dei dati, ma di nessun interesse diretto per l’utente della base di dati. Il compito del DBMS è offrire all’utente l’illusione di lavorare con un modello logico (es. con tabelle), traducendo tutte le operazioni da lui compiute (es. inserimento di una riga in una tabella) in operazioni di livello fisico (es. modifica di un file) (Figura 1.1). Una conseguenza molto interessante della distinzione tra modelli logici e modelli fisici è la seguente. Supponiamo di disporre di una base di dati relazionale, implementata su un certo DBMS, che chiameremo DBMS1 . Per qualche motivo (prestazionale, economico o altro) potremmo aver necessità di sostituire DBMS1 con un altro DBMS, che chiameremo DBMS2 . Se anche DBMS2 è un database relazionale, possiamo semplicemente prendere le tabelle già implementate in DBMS1 e spostarle, tali e quali, in DBMS2 . Dal punto di vista dell’utente, la base di dati continuerà a funzionare su DBMS2 esattamente come prima funzionava su DBMS1 : nulla è cambiato, perché l’utente vede i dati solo al livello logico. E questo nonostante il fatto che i due DBMS, con ogni probabilità, memorizzino i dati in maniera completamente diversa su disco. Questa importantissima proprietà prende il nome di indipendenza fisica dei dati : è possibile modificare il modello fisico dei dati senza che il modello logico ne risenta in alcun modo (Figura 1.2). I modelli logici e fisici sono finalizzati all’effettiva memorizzazione di dati su una macchina. Al livello logico, abbiamo sottolineato l’importanza di strutturare la rappresentazione dei dati per rispecchiare l’organizzazione intrinseca del dominio di interesse. A tal fine risulta utile disegnare una mappa concettuale della struttura del dominio, usando strumenti formali (e quindi chiari e privi di ambiguità), e di semplice utilizzo. L’insieme di tali strumenti prende il nome di modello concettuale dei dati. c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 10 Capitolo 1. Introduzione Rappresentazione concettuale Rappresentazione logica Rappresentazione fisica Figura 1.1: L’utente rappresenta la porzione di mondo di interesse tramite tabelle, al livello logico, mentre il DBMS si occupa della rappresentazione fisica delle stesse su disco. Questi dettagli di basso livello sono nascosti all’utente, che ne è felice. Per comprendere la struttura del dominio di interesse, l’utente ne crea una rappresentazione concettuale. Esempio 3. Attraverso lo schema concettuale della Figura 1.3, rappresentiamo al livello concettuale la struttura del dominio Rubrica Telefonica. I rettangoli e i rombi indicano i concetti maggiormente rilevanti che ci interessano: gli amici, i telefoni, e la relazione che sussiste tra gli uni e gli altri, ovvero il fatto che ogni amico può avere tanti numeri di telefono, e ogni numero di telefono appartiene a un unico amico. Lo schema concettuale risulta utile come strumento di lavoro per strutturare un database relazionale per il dominio. 1.6 Vantaggi delle basi di dati Abbiamo visto come l’usare una base di dati per rappresentare un dominio di interesse risulti vantaggioso, in quanto il DBMS si fa carico dei problemi di basso livello, e offre all’utente astrazioni comode e potenti. In questo modo l’utente ha la possibilità di lavorare con basi di dati: c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 11 Capitolo 1. Introduzione Figura 1.2: L’indipendenza fisica dei dati: l’utente sostituisce DBMS1 con il più economico DBMS2 . La rappresentazione fisica dei dati cambia, ma la rappresentazione logica resta la medesima, e l’utente ne è felice. Figura 1.3: Esempio di schema concettuale • Grandi. Le basi di dati possono raggiungere dimensioni notevoli. Non sono rare basi di dati costituite da centinaia di tabelle con centinaia di milioni di righe. • Condivise. Una base di dati può essere condivisa tra diversi utenti, ognuno con determinati permessi di accesso. Gli utenti possono lavorare simultaneamente; il DBMS si fa carico dei problemi derivanti da accessi concorrenti (simultanei) ai dati. c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 12 Capitolo 1. Introduzione • Persistenti e distribuite. Per ragioni di prestazioni e robustezza, una base di dati può essere distribuita su più nodi di elaborazione. In altre parole, i DBMS sono in grado di replicare i dati su diverse macchine, collocate anche in differenti regioni geografiche. In questo modo l’accesso ai dati può essere più rapido, e inoltre, in seguito a un guasto hardware o alla completa distruzione di un sito, si garantisce l’integrità dei dati e la continuità operativa. in modo • Efficace. Le astrazioni di alto livello offerte dal modello relazionale permettono agli utenti di lavorare in modo relativamente semplice. • Efficiente. La rappresentazione fisica dei dati impiegata dai DBMS è estremamente ottimizzata, dal punto di vista sia dello spazio di archiviazione che della rapidità di esecuzione delle operazioni. Grazie a queste caratteristiche i database relazionali sono diffusi in moltissimi ambiti applicativi, che spaziano dai grandi sistemi informativi aziendali (gestione dei clienti e delle risorse, degli acquisti e delle vendite; conti correnti bancari, elenchi telefonici, ecc.), al World Wide Web (i contenuti e la struttura di siti web, blog, social network sono memorizzati in basi di dati), al software di utilizzo personale (molto spesso i programmi e le app salvano i dati dei propri utenti in piccoli database incorporati: i preferiti e la cronologia di un browser, i contatti di un programma di messaggistica, ecc.). Curiosità 4. SQLite è un DBMS di pubblico dominio: può essere liberamente impiegato all’interno di altri programmi. Sono numerosissimi i programmi e le app che lo incorporano per memorizzare i dati degli utenti. In Mozilla Firefox, in Google Chrome, o in qualche altro programma che hai a disposizione prova a selezionare la voce di menu Informazioni su. . . , e cerca una voce simile a “Informazioni sulla licenza”, oppure “Software open source utilizzato”: potresti trovare i crediti verso SQLite, accompagnati da una curiosa licenza d’uso che assume le sembianze... di una benedizione! c L. Allulli, U. Nanni - Dispense utilizzabili solo nell’A.A. 2014-2015 13