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