<< lezione precedente
INDICE
lezione successiva >>

Breve corso di SQL - Le relazioni fra tabelle

Descriviamo ora una caratteristica molto importante delle Basi di Dati Relazionali: le relazioni fra tabelle.

Prima di analizzare le relazioni fra tabelle servono alcune definizioni molto importanti.
Si dice Chiave di una tabella quel campo (o insieme di campi) che individua univocamente le righe della tabella. Questo vuol dire che per ogni riga della tabella il valore del campo Chiave dovrà sempre essere diverso.

Es: sia la tabella Software

Matricola Prodotto Costo
2346 Gestione Clienti 1.000.000
2145 Gestione Bilancio 5.000.000
2128 Fax 1.000.000
2367 Inventario 3.500.000

Il campo Matricola è chiave per la tabella, mentre il campo Costo no.

I campi chiave sono molto importanti perché permettono non solo di ritrovare facilmente dati all'interno delle tabelle, ma soprattutto di collegare tra loro tabelle diverse. La necessità di scrivere informazioni su più tabelle collegate nasce da due esigenze fondamentali: la prima riguarda lo spreco di spazio all'interno di una tabella (ridondanza delle informazioni), la seconda riguarda la coerenza tra le informazioni ridondanti.

Es: sia la tabella Elezioni:

Lista Candidato Preferenze
Tutti per uno e uno per tutti Aramis 5
Siamo forti Superman 7
Tutti per uno e uno per tutti Athos 8
Tutti per uno e uno per tutti Portos 2
Ce la possiamo fare Paperino 1
Siamo forti Mazinga Z 7


Si vede subito che la prima colonna contiene informazioni ripetute, ed anche se questo spreco ci sembra di poca importanza, consideriamo che la colonna Lista contiene 129 caratteri, mentre la seconda 42 e la terza 6. Quindi su un totale di 129+42+6=177 caratteri circa il 73% è occupato dalla prima colonna (questi calcoli non hanno nessuno scopo formale, ma servono solo per spiegare il concetto che è alla base dell'esempio).
Se invece avessimo due tabelle:

1 - Lista in cui il campo Num_lista è chiave per la tabella

Num_lista Nome Lista
1 Tutti per uno e uno per tutti
2 Siamo forti
3 Ce la possiamo fare


2 - Preferenze in cui il campo Candidato è chiave per la tabella

Num_lista Candidato Preferenze
1 Aramis 5
2 Superman 7
1 Athos 8
1 Portos 2
2 Paperino 1
2 Mazinga Z 7


Le informazioni occupate dalla prima colonna scenderebbero a 6 caratteri, quindi sul totale di 6+42+6=54 caratteri il campo Num_lista occupa l' 11% dello spazio occupato dalla tabella. (In queste righe non si è tenuto conto della nuova tabella Lista come influisce lo spazio occupato da questa tabella? E' sempre conveniente spezzare?)
Ovviamente abbiamo fatto un esempio in cui la tabella Preferenze è molto piccola, e quindi correggendo alcuni conti il risparmio potrebbe non essere evidente, ma si pensi che una base dati di un certo interesse ha almeno alcune migliaia di righe per ogni tabella. Il Campo Num_lista della tabella Preferenze viene detto Chiave Esterna per tale tabella, perché è il campo che permette di collegare le informazioni qui contenute con quelle contenute nella tabella Liste.

Un'ultima considerazione: mettiamo che il nome della lista numero 2 invece di "Siamo forti" sia "Siamo molto forti", e che questa correzione debba essere fatta a tabella Preferenze già riempita: nel caso a tabella unica le righe da correggere sono due, mentre nel caso a tabelle separate bisogna solo correggere la tabella Liste, senza dover toccare la tabella Preferenze, cosa che ha un numero ampio di aspetti postivi, tra cui uno dei più importanti è che non si possono creare situazioni "ibride" in cui qualche record è stato aggiornato e altri no.

A chi interessano le problematiche relative a questo procedimento consiglio di guardare qualche pubblicazione nei capitoli che parlano di Normalizzazioni e Forme Normali di Boice-Codd.

<< lezione precedente lezione successiva >>