Premessa

Portale di appartenenza: Basi di dati.

Cosa troverai in questa nota:

Prerequisiti: per comprendere pienamente il contenuto di questa nota, oltre le conoscenze minime che do per scontato che tu sappia giΓ , ti consiglio di aver letto in precedenza queste altre note:

Buona lettura! β˜οΈπŸ€“


Definizione: modello relazionale

Il modello relazionale Γ¨ un modello logico per l’organizzazione e la gestione dei dati nei database, basato sulla teoria degli insiemi e sulla logica matematica proposto da Edgar F. Codd nel 1970.

I DBMS basati sul modello relazionale vengono detti RDBMS.

Definizione: RDBMS

Il RDBMS (Relational DataBase Management System) Γ¨ un particolare tipo di DBMS basato sul modello relazionale.

1 - Introduzione di Codd sul modello relazionale

Edgar F. Codd, nel suo articolo scientifico in cui ha introdotto le basi del modello relazionale (e che puoi trovare integralmente qui, o tradotto in italiano qui) pubblicato nel 1970, spiega i motivi che lo hanno portato allo sviluppo di questo modello come alternativa al modello reticolare o al modello a grafo molto diffusi in quel periodo. In particolare, i vantaggi del modello relazionale introdotto da Codd sono:

  • Indipendenza (logica e fisica) dei dati: nei modelli precedenti, la struttura fisica dei dati influenzava direttamente il modo in cui essi venivano interrogati e manipolati, mentre nel modello relazionale i dati sono organizzati in tabelle e possono essere modificati senza impattare le applicazioni che li usano.
  • SemplicitΓ  concettuale: le relazioni sono intuitive e basate su concetti matematici solidi (come la teoria degli insiemi e l’algebra relazionale), mentre i modelli gerarchico e reticolare richiedevano una gestione complessa dei puntatori e dei percorsi di accesso ai dati.
  • Eliminazione della ridondanza e maggiore integritΓ  dei dati: il modello relazionale introduce il concetto di normalizzazione che aiuta a ridurre la ridondanza e i problemi di inconsistenza dei dati, mentre nei modelli precedenti la duplicazione dei dati era comune e poteva causare incongruenze.
  • FacilitΓ  di manutenzione ed evoluzione: l’architettura relazionale permette di modificare la struttura dei dati senza riscrivere il codice delle applicazioni, mentre nei modelli precedenti ogni modifica poteva richiedere una riscrittura significativa del software.

2 - Introduzione alle relazioni e alle tabelle

Il modello relazionale si basa su due concetti fondamentali: relazione e tabella, che, pur essendo diversi nella loro natura, sono strettamente collegati. La relazione deriva dalla matematica, in particolare dalla teoria degli insiemi e dal concetto di relazione -aria, e rappresenta un oggetto matematico definito come un sottoinsieme del prodotto cartesiano di una famiglia di insiemi, ognuno dei quali viene detto dominio del prodotto.

Ad esempio, dati gli insiemi (domini) e , il prodotto cartesiano Γ¨ l’insieme di tutte le coppie possibili in cui il primo elemento appartiene ad e il secondo a . PoichΓ© ha tre elementi e ne ha due, abbiamo sei coppie:

Una tabella, al contempo, Γ¨ una particolare rappresentazione di una relazione in forma matriciale, in cui ogni riga corrisponde a un elemento della relazione e ogni colonna a un dominio del prodotto. Per esempio, riprendendo la relazione , una sua rappresentazione tabellare Γ¨ la seguente:

Si puΓ² notare come ogni riga contenga un elemento (es. nella prima riga c’è l’elemento , nella seconda e cosΓ¬ via), mentre in ognuna delle due colonne c’è ognuno dei due domini e che compongono il prodotto cartesiano.

2.1 - Relazioni per la rappresentazione di dati

Le relazioni (e le loro corrispondenti tabelle) possono essere usate per rappresentare dati schematicamente.

Per esempio, la seguente tabella contiene i risultati di un insieme di partite di calcio:

Ogni riga rappresenta una partita di calcio in cui la squadra nella prima colonna ha segnato il numero di gol nella terza colonna e la squadra nella seconda colonna il numero di gol nella quarta. Ad esempio, la prima riga indica che la partita Real Madrid - Liverpool si Γ¨ conclusa con un 3 a 1 per il Real Madrid. Possiamo notare come i dati in questa tabella (relazione) appartengano a due domini: quello delle stringhe e quello dei numeri interi. Infatti questa relazione Γ¨ un sottoinsieme del prodotto cartesiano:

Ricordiamo che le relazioni sono formate da tuple ordinate, cioè in una -upla ogni elemento appartiene al suo corrispondente dominio , per ogni compreso tra ed (estremi inclusi). Inoltre, una relazione è un insieme, e quindi:

  • Non esiste un ordine definito tra le tuple: nelle tabelle che le rappresentano c’è ovviamente un ordine di β€œpresentazione”, ma esso Γ¨ irrilevante, poichΓ© due tabelle con le stesse righe, ma in ordine diverso, rappresentano la stessa relazione.
  • Le tuple di una relazione sono tutte distinte: in un insieme non possono esistere due elementi identici, quindi una tabella puΓ² rappresentare una relazione solo se le sue righe sono tutte diverse tra loro.

Possiamo anche notare come l’importanza dell’ordine degli elementi nelle tuple si puΓ² anche evincere dalla tabella precedente: se scambiassimo di posto le ultime due colonne, pur essendo entrambe rappresentate dal dominio dei numeri interi, falseremmo i risultati delle partite. Questo ordinamento tra i domini di una relazione corrisponde in realtΓ  a una caratteristica insoddisfacente del concetto di relazione, cosΓ¬ come Γ¨ definito in matematica, per quanto riguarda la possibilitΓ  di organizzare e utilizzare i dati. Infatti, in informatica si tende a preferire notazioni non posizionali a quelle posizionali:

  • Le notazioni non posizionali permettono di fare riferimento agli elementi di una tupla mediante nomi simbolici.
  • Le notazioni posizionali, invece, fanno riferimento ai campi attraverso il loro ordine, e dovrebbero essere utilizzate solo quando l’ordinamento corrisponde a una caratteristica intrinseca, come accade, ad esempio, nei problemi di analisi numerica, dove gli array offrono una rappresentazione ovvia e diretta di vettori e matrici.

Per questo motivo, introduciamo una notazione non posizionale, associando nomi ai domini di una relazione, detti attributi, che descrivono i β€œruoli” svolti dai domini stessi. Ad esempio, per la relazione relativa alle partite, possiamo usare nomi come , , , . Nella rappresentazione tabellare, gli attributi possono essere utilizzati come intestazioni delle colonne:

Dato che Γ¨ necessario identificare in modo univoco le componenti, gli attributi di una relazione (e quindi le intestazioni delle colonne) devono essere tutti diversi tra loro.

Modificando la definizione di relazione con l’introduzione degli attributi, e ancora prima di fornire una definizione formale, possiamo osservare che l’ordinamento degli attributi (e quindi delle colonne nella rappresentazione tabellare) Γ¨ irrilevante: non Γ¨ piΓΉ necessario parlare di primo dominio, secondo dominio, e cosΓ¬ via; Γ¨ sufficiente fare riferimento agli attributi stessi. Ad esempio, la seguente rappresentazione tabellare della relazione Γ¨ equivalente alla precedente, con gli attributi (e quindi le colonne) in un ordine diverso, seguendo lo stile americano, in cui la squadra di casa viene mostrata dopo la squadra ospite.

3 - Definizione formale di relazione

Dopo aver introdotto informalmente i concetti riguardanti il modello relazionale, ora ci tocca introdurli da un punto di vista formale, rigoroso e matematico.

3.1 - Definizione di tipi di dati, attributi e schemi

Per arrivare a definire il concetto di relazione, dobbiamo partire dalle fondamenta del modello relazionale, definendo formalmente cosa sono i tipi dei dati e i relativi attributi.

Definizione: tipo di dato

Un tipo di dato (o semplicemente tipo) Γ¨ un insieme di valori possibili che un dato puΓ² assumere.

Definiamo quindi i tipi di dato classici che si possono trovare solitamente all’interno dei RDBMS.

Definizione: tipo di dato

Γ¨ un tipo di dato rappresentante l’insieme dei numeri interi nei RDBMS:

Definizione: tipo di dato

Γ¨ un tipo di dato rappresentante l’insieme dei numeri reali nei RDBMS:

Definizione: tipo di dato

Γ¨ un tipo di dato rappresentante l’insieme delle stringhe nei RDBMS:

Definizione: tipo di dato

Γ¨ un tipo di dato rappresentante l’insieme delle stringhe di lunghezza (cioΓ¨ i singoli caratteri) nei RDBMS:

Definizione: tipo di dato

Γ¨ un tipo di dato rappresentante l’insieme delle date nei RDBMS:

Definizione: tipo di dato

Γ¨ un tipo di dato rappresentante l’insieme dei due valori booleani e nei RDBMS:

I tipi dei dati vengono utilizzati all’interno degli attributi di una relazione.

Definizione: attributo

Un attributo Γ¨ un sottoinsieme di un tipo di dato e si dice che Γ¨ di tipo :

Notazione: unione di attributi

Dati due attributi e , la notazione rappresenta l’unione insiemistica .

Cosa succede se, nel momento in cui devo inserire un dato, non ne conosco il suo valore? È possibile inserire dei valori β€œmancanti” in una relazione? La risposta Γ¨ che ci sono diversi modi per farlo:

  • Usando un particolare valore appartenente a quel tipo di dato, in modo tale che quel valore sia convenzionalmente interpretato come un segnaposto e privandolo del suo valore effettivo.
  • Usando un valore creato ad hoc, ossia un valore nullo usato specificatamente per questo ruolo.

Definizione: valore nullo

Il valore nullo, denotato con , Γ¨ un elemento presente in ogni tipo di dato che rappresenta un valore sconosciuto nell’attributo.

Gli attributi sono raggruppati in schemi.

Definizione: schema di una relazione

Uno schema di una relazione (o semplicemente schema) Γ¨ un insieme di attributi :

Rappresentazione di uno schema in D2

Tramite il linguaggio dichiarativo D2, progettato per la creazione di diagrammi in modo semplice e leggibile, Γ¨ possibile avere una rappresentazione di uno schema facilmente consultabile, con la lista degli attributi e i loro relativi tipi.

Per esempio, consideriamo lo schema dell’esempio precedente. Tramite D2, si puΓ² ottenere la seguente rappresentazione:

Il codice per ottenerlo Γ¨ il seguente (puoi testarlo sul D2 Playground):

A: {
  shape: sql_table
  Matricola: string
  Cognome: string
  Nome: string
  DataDiNascita: date
  CorsoDiLaurea: string
}
 

Possiamo fare alcune osservazioni sulla definizione di schema.

Osservazione: duplicati e ordine in uno schema

Uno schema, essendo un insieme, per definizione non ammette duplicati: ciΓ² significa che non possono esserci all’interno di uno stesso schema due attributi con lo stesso nome.

Ovviamente, perΓ², ciΓ² non vieta l’esistenza di due attributi con nomi diversi ma stesso tipo di dato (es. e sono entrambi di tipo ).

Allo stesso modo, ricordiamo che in un insieme anche l’ordine non conta, quindi gli schemi

e

sono equivalenti:

3.2 - Definizione di record e istanze

Una volta che abbiamo introdotto la definizione di schema, possiamo ora introdurre quelle definizioni che ci servono per arrivare al concetto di relazione.

Definizione: record

Dato uno schema , un record Γ¨ una -upla (e per questo viene anche chiamato tupla) della relazione -aria , in cui ogni Γ¨ un valore dell’attributo .

Notazione: valori di un record

Per indicare il valore di un record in corrispondenza di un attributo di uno schema , si utilizza la notazione:

Per indicare invece i valori di un record in corrispondenza di multipli attributi di uno schema , si utilizza la notazione:

Osservazione: record come funzione

Ogni record puΓ² essere rappresentato come una funzione che fa corrispondere a ogni attributo di uno schema il corrispettivo valore :

Definizione: istanza di una relazione

Dato uno schema , un’istanza di una relazione (o semplicemente istanza, anche detta stato) Γ¨ l’insieme di tutti i record dove ogni Γ¨ compatibile con :

Notazione: valori di una tupla in corrispondenza di un insieme di attributi

Data un’istanza e una tupla , se si vogliono ottenere i valori di in corrispondenza degli attributi dello schema si puΓ² usare la seguente notazione:

CosΓ¬ come per gli schemi, anche per le istanze non bisogna tenere conto di elementi duplicati e dell’ordine degli elementi.

Osservazione: duplicati e ordine in un'istanza

Un’istanza, essendo un insieme, per definizione non ammette duplicati: ciΓ² significa che non possono esserci all’interno di una stessa istanza due record uguali.

Allo stesso modo, ricordiamo che in un insieme anche l’ordine non conta, quindi le istanze

e

sono equivalenti:

Osservazione: istanza come insieme di funzioni

Dato che ogni record puΓ² essere rappresentato come una funzione, l’istanza puΓ² essere intesa come un insieme di funzioni tutte distinte tra loro (sempre perchΓ© in un insieme gli elementi sono unici e, essendo l’istanza un insieme per definizione, non puΓ² contenere record duplicati).

3.2.1 - CompatibilitΓ  di un record

Per capire se un record appartiene a un dato schema, dobbiamo verificarne la compatibilitΓ .

Definizione: compatibilitΓ  di un record in uno schema

Un record si dice compatibile con uno schema se ogni valore del record appartiene al relativo attributo , ossia se il record Γ¨ una funzione totale sullo schema (come visto nell’osservazione precedente).

3.3 - Definizione di relazione

Ora che abbiamo sputato sangue per definire cosa sono uno schema e un’istanza, possiamo finalmente definire cos’è una relazione.

Definizione: relazione

Una relazione (o anche semplicemente ) Γ¨ un’istanza associata a uno schema in cui ogni record Γ¨ compatibile con .

Osservazione: differenza tra relazione matematica e relazione di Codd

In matematica, una relazione -aria Γ¨ diversa da perchΓ© non vale la proprietΓ  commutativa del prodotto cartesiano, ovvero le relazioni -arie sono strettamente legate all’ordine degli insiemi.

Nel modello relazionale di Codd, invece, l’ordine degli attributi di uno schema Γ¨ irrilevante (e ciΓ² deriva dal fatto che lo schema Γ¨ un insieme che, per definizione, non Γ¨ ordinato), quindi le relazioni

e

sono equivalenti:

Come giΓ  visto nell’introduzione di questa pagina, una relazione si puΓ² rappresentare in forma tabellare.

Notazione: rappresentazione tabellare di una relazione

Una relazione puΓ² essere rappresentata in forma tabellare, dove:

  • Le colonne rappresentano gli attributi dello schema .
  • Le righe rappresentano i record dell’istanza .

Definizione: grado di una relazione

Data una relazione , il suo grado Γ¨ la cardinalitΓ  del suo schema , ossia il numero dei suoi attributi.

Osservazione: grado di una relazione sempre

In una relazione , l’insieme degli attributi Γ¨ sempre non vuoto, quindi il suo grado Γ¨ sempre .

Definizione: cardinalitΓ  di una relazione

Data una relazione , la sua cardinalitΓ  Γ¨ la cardinalitΓ  della sua istanza , ossia il numero dei suoi record.

Osservazione: cardinalitΓ  di una relazione sempre

Contrariamente a quanto accade per lo schema, in una relazione la sua istanza puΓ² essere un insieme vuoto (cioΓ¨ puΓ² non contenere alcun record), quindi la sua cardinalitΓ  Γ¨ sempre (perchΓ© puΓ² assumere il valore nel caso dell’insieme vuoto).

3.4 - Definizione di basi di dati

Potremmo quindi definire una base di dati nel modello relazionale come un insieme di relazioni.

Definizione: base di dati

Una base di dati Γ¨ un insieme di relazioni :

Consiglio: criterio per l'assegnazione di nomi agli attributi

Per la costruzione di una buona base di dati , un criterio da tenere a mente durante la progettazione degli schemi Γ¨ quello che, in caso di attributi omonimi in diverse relazioni, il concetto che esprimono deve essere lo stesso e il tipo deve essere lo stesso.

Quindi:

  • Evitare omonimie, ossia l’uso di stessi nomi per concetti diversi (es. un attributo denominato sia per indicare il nome proprio di una persona che per il nome di un prodotto).
  • Evitare sinonimie, ossia nomi diversi per stessi concetti (es. due attributi denominati e per indicare un’unitΓ  didattica).

4 - Vincoli di integritΓ  e chiavi

Fondamentale nel modello relazionale Γ¨ l’uso dei vincoli di integritΓ  per assicurarsi della correttezza dei dati. Essi possono essere di due tipi: locali o globali.

4.1 - Vincoli locali

Definizione: vincolo locale

Un vincolo locale (o vincolo intrarelazionale) Γ¨ un vincolo posto sui valori possibili dei record di una relazione in modo che tali valori rispettino (non siano in contrasto con) la realtΓ  che si vuole rappresentare.

Definizione: vincolo locale di dominio

Data una relazione , il vincolo locale di dominio stabilisce che per ogni attributo esiste un insieme ben definito (anche infinito) di valori possibili che ognuno di essi puΓ² assumere, detto appunto dominio.

Definizione: vincolo locale sui valori nulli

Data una relazione , il vincolo locale sui valori nulli su un determinato attributo stabilisce che, per ogni record , il valore non deve essere il valore nullo.

4.2 - Vincoli globali

Per poter definire in maniera formale i vincoli globali, dobbiamo introdurre prima le nozioni di superchiave, utile a descrivere la connessione tra le varie relazioni di una base di dati.

4.2.1 - Superchiavi

Definizione: superchiave

Data una relazione , un sottoinsieme di attributi Γ¨ una superchiave di se, quando due record assumono gli stessi valori per tutti gli attributi di , allora sono in realtΓ  lo stesso record:

Ossia, una superchiave Γ¨ un insieme di attributi che identifica univocamente ogni record della relazione.

ProprietΓ : monotonicitΓ  delle superchiavi

Data una relazione , se un sottoinsieme di attributi Γ¨ una superchiave di , allora ogni insieme che la contiene (ossia ) Γ¨ a sua volta una superchiave.

Osservazione: lo schema Γ¨ una superchiave

Data una relazione , come conseguenza della proprietΓ  di monotonicitΓ  delle superchiavi, otteniamo che anche lo schema stesso Γ¨ una superchiave di .

4.2.1 - Chiavi candidate

Definizione: chiave candidata

Data una relazione , un sottoinsieme di attributi Γ¨ una chiave candidata se:

  1. Γ¨ una superchiave di .
  2. Γ¨ minimale, ossia ogni sottoinsieme proprio non deve essere a sua volta una superchiave.

Osservazione: esistenza di una chiave candidata nella relazione

Data una relazione , essendo lo schema una superchiave, la relazione conterrΓ  sempre almeno una chiave candidata (che, al piΓΉ, sarΓ  lo schema stesso della relazione).

4.2.2 - Chiavi primarie

Il progettista deve sempre scegliere tra le chiavi candidate una chiave primaria che permetterΓ  a ogni record di poter essere identificato univocamente.

Definizione: chiave primaria

Data una relazione , una chiave primaria (anche detta chiave principale) Γ¨ una particolare chiave candidata scelta che rispetta il vincolo locale sui valori nulli in ogni suo attributo.

Osservazione: nesso tra chiave primaria, chiave candidata e superchiave

Una chiave primaria, per definizione, Γ¨ una chiave candidata che rispetta il vincolo locale sui valori nulli in ogni suo attributo. A sua volta, una chiave candidata Γ¨ per definizione una superchiave (un insieme di attributi che identifica univocamente ogni record della relazione) minimale.

Queste tre definizioni sono collegate da relazioni di inclusione stretta:

CiΓ² significa che una chiave primaria Γ¨ automaticamente una superchiave, ma non Γ¨ necessariamente vero il contrario.

Se consideriamo inoltre una relazione , possiamo quindi dire che i requisiti che un insieme di attributi deve rispettare per essere considerato una chiave primaria sono tre:

  1. Ogni record della relazione deve essere identificato univocamente da (requisito della superchiave).
  2. deve essere minimale (requisito della chiave candidata).
  3. deve rispettare il vincolo locale sui valori nulli in ogni suo attributo (requisito della chiave primaria).

Esercizio

Si consideri la seguente relazione :

Quali dei seguenti insiemi di attributi possono essere scelti come chiave primaria di ? Scegli una o piΓΉ alternative:

Soluzione

Per stabilire se ogni opzione Γ¨ una potenziale chiave primaria di , verifichiamo se rispetta i tre requisiti.

Partendo dal primo requisito, quello della superchiave, possiamo scartare gli insiemi di attributi che non identificano univocamente la relazione. Abbiamo che tutte le opzioni rispettano questo requisito, quindi passiamo avanti.

Per il secondo requisito, quello della chiave candidata, possiamo scartare gli insiemi di attributi che non sono minimali. Abbiamo che l’opzione 3 non Γ¨ minimale perchΓ© l’attributo da solo Γ¨ una superchiave e l’opzione 4 non Γ¨ minimale perchΓ© contiene la superchiave (che, tra l’altro, corrisponde all’opzione 3):

Per il terzo requisito, quello della chiave primaria, possiamo scartare gli insiemi di attributi che non rispettano il vincolo locale sui valori nulli in ogni suo attributo (requisito della chiave primaria). Abbiamo che l’opzione 1 contiene l’attributo che non rispetta il vincolo locale sui valori nulli:

L’unica opzione accettabile, quindi, Γ¨ la 2.

Rappresentazione di una chiave primaria in D2

In D2 Γ¨ possibile specificare qual Γ¨ la chiave primaria di una relazione aggiungendo il vincolo locale di chiave primaria all’attributo in questione.

Per esempio, consideriamo la relazione dell’esempio della chiave primaria. Tramite D2, si puΓ² ottenere la seguente rappresentazione:

Il codice per ottenerlo Γ¨ il seguente (puoi testarlo sul D2 Playground):

STUDENTI: {
  shape: sql_table
  Matricola: string {constraint: primary_key}
  Cognome: string
  Nome: string
  DataDiNascita: date
  CorsoDiLaurea: string
}
 

4.3 - Vincoli globali

Definizione: vincolo globale

Un vincolo globale (o vincolo interrelazionale) Γ¨ un vincolo posto sui valori possibili dei record delle relazioni di una base di dati in modo che tali valori rispettino (non siano in contrasto con) la realtΓ  che si vuole rappresentare.

Ora possiamo definire in particolare quali sono i vincoli globali.

Definizione: vincolo globale di integritΓ  referenziale

Il vincolo globale di integritΓ  referenziale (o di chiave esterna) stabilisce che, date due relazioni (dove Γ¨ la chiave primaria di ) e (dove Γ¨ detto chiave esterna), per ogni record esiste almeno un record tale che il valore degli attributi corrisponde al valore della chiave primaria in :

Osservazione: condizioni necessarie per il vincolo globale di integritΓ  referenziale

Per far sì che il vincolo globale di integrità referenziale possa valere, i valori degli attributi in devono essere gli stessi valori degli attributi in .

Rappresentazione di una chiave esterna in D2

In D2 Γ¨ possibile specificare qual Γ¨ la chiave esterna di una relazione aggiungendo il vincolo globale di integritΓ  referenziale all’attributo in questione.

Per esempio, consideriamo l’esempio di vincolo di integritΓ  referenziale precedente. Tramite D2, si puΓ² ottenere la seguente rappresentazione:

Il codice per ottenerlo Γ¨ il seguente (puoi testarlo sul D2 Playground):

PAZIENTI: {
  shape: sql_table
  Codice: string {constraint: primary_key}
  Cognome: string
  Nome: string
  Residenza: string
  AnnoNascita: int
}
 
RICOVERI: {
  shape: sql_table
  Paziente: string {constraint: [primary_key; foreign_key]}
  Inizio: time_stamp {constraint: primary_key}
  Fine: time_stamp
  Reparto: string
}
 
RICOVERI.Paziente -> PAZIENTI.Codice
 

4.4 - Correttezza dei dati

Il rispetto dei vincoli assicura la correttezza della relazione e, in generale, di tutta la base di dati.

Definizione: correttezza di una relazione

Una relazione Γ¨ detta corretta se sono soddisfatti tutti i vincoli locali.

Definizione: correttezza di una base di dati

Una base di dati Γ¨ detta corretta se ogni relazione Γ¨ corretta e se sono soddisfatti tutti i vincoli globali.


Approfondimento

Fonti: