Avanti Indietro Indice

Strutture relazionali

Il modello relazionale si fonda sul concetto di relazione (da non confondere con la relazione concettuale del modello ER), la cui rappresentazione è una tabella. Il concetto di relazione è formale e proviene dalla teoria degli insiemi, una parte della matematica. Il concetto di tabella è intuitivo ed è usato in vari contesti che prescindono dalle basi di dati. Il successo delle basi di dati relazionali sta appunto nella congiunzione di un concetto formale, la relazione, che ha permesso lo sviluppo di una teoria delle basi di dati relazionali con risultati di impatto pratico, con un concetto intuitivo, la tabella, che ha reso compresibile il modello relazionale anche ad utenti finali senza alcuna nozione matematica. L'approccio seguito in questo capitolo sarà di tipo intuitivo e non formale. Un buon testo per la teoria delle basi di dati relazionali è l'articolo Elements of Relational Database Theory di Paris C. Kanellakis.

Consideriamo un esempio di relazione che descrive gli orari dei treni rappresentata dalla tabella che segue:

orario
trenocittà di partenzaora di partenzacittà di arrivoora di arrivo
IC129Udine19:00Milano22:30
IR567Milano11:40Roma17:30
ES21Roma8:40Napoli10:30

Le seguenti proprietà caratterizzano il modello relazionale (useremo i termini relazione e tabella in modo intercambiabile):

In una relazione si distingue il suo schema dal suo contenuto:

Riprendendo la tabella degli orari dei treni, lo schema di relazione corrisponde al nome della tabella e alla riga di intestazione e viene indicato in questo modo:

orario({treno, città di partenza, ora di partenza, città di arrivo, ora di arrivo})

Si noti che il nome degli attributi che formano la chiave primaria viene sottolineato. Per comodità le parentesi graffe che identificano l'insieme vengono di solito omesse. Inoltre è preferibile usare identificatori che non contengono spazi. Ad esempio, invece di città di partenza possiamo usare cittàDiPartenza. Una istanza della relazione orario corrisponde a un insieme (possibilmente vuoto) di tuple corrispondenti.

Solitamente, l'informazione contenuta in una base di dati viene rappresetata in più tabelle. Tali tabelle possono contenere valori comuni che servono come associazione tra dati diversi. Definiamo quindi:

Facciamo un esempio tratto dal nostro caso di studio. Consideriamo uno schema di base di dati composto dai seguenti schemi di relazione:

teatro(nome, città, email)

dipendente(cf, nome, cognome, dataDiNascita, età)

lavoro(teatro, dipendente, ruolo)

Di seguito mostriamo una istanza di base di dati sullo schema proposto:

teatro
nomecittàemail
CSSUdinecss@gmail.com
LittaMilanolitta@gmail.com
EliseoRomaNULL


dipendente
cfnomecognomedataDiNascitaetà
ELSDLL72ElisaD'Allarche29/04/197235
FRNDPP76FernandaD'Ippoliti11/03/197631
MRCDLL70MarcoDall'Aglio09/01/197037


lavoro
teatrodipendenteruolo
CSSELSDLL72relazioni
LittaFRNDPP76finanza
EliseoFRNDPP76controllo
EliseoMRCDLL70direzione


Facciamo una osservazione fondamentale. Nel modello relazionale tutta l'informazione viene rappresentata tramite relazioni che corrispondono a tabelle con attributi. Quindi, in questo modello, sia le entità che le relazioni dello schema concettuale vengono implementate in relazioni dello schema relazionale. In particolare le associazioni concettuali tra entità vengono realizzate a livello logico mediante tabelle che contengono valori comuni ad altre tabelle a cui fanno riferimento.

Ad esempio, la relazione concettuale lavoro che associa le entità dipendente e teatro viene rappresentata da una relazione lavoro nella quale l'attributo teatro identifica l'entità teatro e l'attributo dipendente identifica l'entità dipendente. In particolare, per dire che il dipendente ELSDLL72 (Elisa D'Allarche) lavora per il teatro CSS scriviamo questi valori nelle corrispondenti colonne della tabella lavoro. Gli attributi teatro e dipendente della relazione lavoro prendono il nome di chiavi esterne (foreign keys) in quanto fanno riferimento a chiavi di altre tabelle.

Questo modello per stabilire corrispondenze tra i dati prende il nome di modello basato su valori. Esso si distingue dal modello basato su riferimenti tipico dei modelli dei dati reticolare e gerarchico. In quest'ultimo le corrispondenze tra i dati vengono implementate da puntatori, cioè variabili che contengono indirizzi di memoria dei dati. Il modello basato su valori ha due vantaggi rispetto a quello basato su riferimenti:

  1. rappresenta solo informazione rilevante per la realtà modellata;
  2. l'indipendenza fisica dei dati viene mantenuta permettendo di cambiare la rappresentazione fisica dei dati (ad esempio spostando i dati in una diversa zona di memoria) senza mutare quella logica.
Avanti Indietro Indice
Basi di dati - Massimo Franceschet