Conoscere i database.

Mauro Goretti

Conoscere i database.

Una collezione di dati.

Che cos'è un database? Se ne potrebbero dare diverse definizioni, utilizzando concetti matematici o
categorie astratte, eleganti ma di difficile comprensione, che non aiuterebbero l'utente a cogliere
l'essenza di uno strumento fondamentale nell'economia moderna. Tutto ruota attorno ai dati: una volta ottenuti, come conservarli, ordinarli e gestirli? Un esempio classico, di utilizzo quotidiano, è
la più semplice delle rubriche telefoniche, un foglio nel quale inserire i nominativi di cui si intende
mantenere i contatti, in una forma qualsiasi:

Rossi Mario Via degli Orti 15 20100 Milano 02-xxx
Baldi Andrea Piazza Dante 1 27029 Vigevano 0381-xxx
Netti Carlo Strada Larga 3 40128 Bologna 05-xxx

Ogni riga è una singola registrazione (record), un insieme di dati coerente che individua un elemento significativo. Infatti, ogni riga contiene tutto quello che serve per individuare i dati che
ci interessano per ogni singola persona di cui vogliamo tenere i contatti. Questa è una lista di
informazioni che, nella sua semplicità, già consente di mantenere i dati che ci servono e di recuperarli senza troppe difficoltà. Nella sua semplicità, però, già si nota qualche piccola smagliatura: gli elementi sono stati scritti senza alcun ordine, il che rende lento e laborioso scorrere
l'elenco per ritrovare una precisa registrazione. Il tutto diventa più semplice riordinando le righe:

Baldi Andrea Piazza Dante 1 27029 Vigevano 0381-xxx
Netti Carlo Strada Larga 40128 Bologna 05-yyy
Rossi Mario Via degli Orti 15 20100 Milano 02-zzz

In questo modo scorrere le righe è intuitivamente più semplice: volendo trovare Netti Carlo, basterà
posizionarsi dopo Baldi Andrea e prima di Rossi Mario, seguendo l'ordine alfabetico dei cognomi.
Cosa è successo? Semplicemente, si è data una forma ai dati, che iniziano a presentare una elementare strutturazione. Già così, come si può facilmente vedere, i dati sono più facilmente fruibili. Andiamo oltre:

A
. . .

B
Baldi Andrea Piazza Dante 1 27029 Vigevano 0381-xxx

. . .

N
Netti Carlo Strada Larga 3 40128 Bologna 05-yyy

. . .

R
Rossi Mario Via degli Orti 15 20100 Milano 02-zzz

. . .

Abbiamo aggiunto e formalizzato un indice dei dati introducendo un metadato, ovvero un dato che
a sua volta serve a descrivere i dati veri e propri. Di per sé, l'indice non porta alcuna informazione specifica rispetto ai record che individua, ma è fondamentale proprio perché fornisce una descrizione di un metodo di accesso che velocizza la gestione dei dati veri e propri. A questo punto,
però, ci ritroviamo con una serie di dati, ordinati, individuati da righe successive, ma di per sé
monolitici e intrattabili. Sappiamo che Baldi Andrea abita in Piazza Dante 1, ma non possiamo
andare molto oltre. Aggiungiamo un nuovo nominativo:

Baldi Andrea Piazza Dante 1 27029 Vigevano 0381-xxx
Gando Landi Via Settala 4 27029 Vigevano 0381-aaa
Netti Carlo Strada Larga 3 40128 Bologna 05-yyy
Rossi Mario Via degli Orti 15 20100 Milano 02-zzz

A colpo d'occhio risalta una semplice relazione tra Baldi Andrea e Gando Landi: abitano entrambi a
Vigevano. Nello stesso tempo, però, si evidenzia un limite notevole del nostro insieme di dati: non
è in grado di esprimere questa relazione. Intuitivamente sembrerebbe il contrario, ma basta immaginare una lista di 30.000 nominativi per chiarire il problema: in tutta questa messe di dati l'unità significativa è la riga e al suo interno si trova un insieme arbitrario di dati non qualificati.
Questo significa che, per capire se due persone abitano a Vigevano, bisognerà scorrere tutte e
30.000 le righe e leggere al loro interno tutti i caratteri, fino a quando non se ne incontri un sotto
insieme significativo. Si tratta, in definitiva, di aumentare la risoluzione delle informazioni memorizzate, di atomizzare i dati in maniera che diventino maggiormente significativi.
Un approccio interessante potrebbe essere la scrittura delle informazioni, qualificando gli elementi
costitutivi mediante elementi di separazione convenzionali e attribuendo loro una precisa identità
tramite l'istituzione di una prima riga informativa:

Cognome, Nome, Indirizzo, Cap, Città, N. Telefono
Baldi, Andrea, Piazza Dante 1, 27029, Vigevano, 0381-xxx
Gando, Landi, Via Settala 4 , 27029 , Vigevano, 0381-aaa
Netti, Carlo, Strada Larga 3, 40128 , Bologna , 05-yyy
Rossi , Mario , Via degli Orti 15, 20100 , Milano, 02-zzz

Rispetto all'elenco visto in precedenza, non vi sono dati in più; cambia invece la descrizione degli stessi, ovvero i metadati utilizzati per descrivere i contenuti. Sono state utilizzate delle virgole per
separare i contenuti in campi differenti, che ora sono qualificati dagli attributi presenti nell'intestazione, semplici “etichette” che rendono più agevole identificare i dati che si stanno cercando. In questo modo diventa più semplice, per esempio, capire se due nominativi hanno una città in comune: basta scorrere la colonna delle città per capirlo. Colonna? In effetti, il formato
appena usato per descrivere i contenuti è nient'altro che il classico csv (comma separated values),
leggibile da un qualsiasi foglio elettronico, in cui i campi sono separati da un segno di interpunzione
e le righe da un a capo. In definitiva, le stesse informazioni potrebbero essere rappresentate come
nella seguente tabella.

Cognome Nome Indirizzo Cap Città N. Telefono
Baldi Andrea Piazza 27029 Vigevano 0381-xxx
Dante 1
Gando Landi Via 27029 Vigevano 0381-aaa
Settala 4
Netti Carlo Strada 40128 Bologna 051-yyy
Larga 3
Rossi Mario Via degli 20100 Milano 02-zzz
Orti 15

Chi abbia una qualche familiarità con database quali MySQL o SQL Server avrà notato una disposizione dei dati abbastanza usuale. Si tratta della classica tabella di un database relazionale.


Commenti

Post popolari in questo blog

INSTAFETCH - Android -

I pesci abissali. Zoologia marina.

La Centrale Idroelettrica.