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.

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 caratterizzato da:

  • Un dominio di valori, ossia un insieme di valori possibili che il dato puΓ² assumere.
  • Una collezione di operazioni abilitate ad agire sui valori nel dominio , tra cui operazioni di confronto tra i dati.

I tipi standard (o predefiniti) che si trovano solitamente all’interno dei DBMS sono:

  • Intero (int): per l’insieme dei numeri interi .
  • Reale (float): per l’insieme dei numeri razionali .
  • Stringa (string): per l’insieme di tutte le possibili combinazioni delle lettere dell’alfabeto.
  • Carattere (char): per i singoli caratteri dell’alfabeto.
  • Data (date): per la rappresentazione di date e orari.
  • Booleano (bool): per la rappresentazione di valori binari.

Possono inoltre esserci tipi definiti dall’utente stesso, come tipi composti o personalizzati, ad esempio:

  • Enumerati: insiemi finiti di valori predefiniti (es. l’insieme dei giorni della settimana).
  • Array: strutture che contengono piΓΉ valori dello stesso tipo (es. un array di interi).
  • Tipi strutturati: strutture che contengono piΓΉ valori di tipo diverso.

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

Definizione: attributo

Un attributo Γ¨ un insieme di valori associato a un tipo di dato che determina quali valori puΓ² assumere.

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 del dominio del tipo di dato, in modo tale che quel valore sia convenzionalmente interpretato come un placeholder 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 valore, usato per rappresentare la mancanza di un dato, che appartiene al dominio di qualsiasi tipo :

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: per esempio, non possono esserci due attributi nello stesso schema.

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

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 appartiene al dominio del corrispettivo 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

Data l’irrilevanza dell’ordine dei valori di un record , esso puΓ² essere rappresentato come una funzione che fa corrispondere a ogni attributo di uno schema un valore del suo dominio :

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 .

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).

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 dominio del relativo attributo , ossia se il record Γ¨ una funzione totale sullo schema (come visto nell’osservazione precedente).

3.3 - Definizione di relazione

Una volta definito cos’è uno schema e un’istanza, possiamo ora finalmente definire cos’è una relazione.

Definizione: relazione

Una relazione Γ¨ una coppia ordinata dove Γ¨ uno schema e Γ¨ un’istanza associata ad .

Osservazione: differenza tra relazione matematica e relazione di Codd

In matematica, una relazione -aria Γ¨ diversa da una relazione (perchΓ© non vale la proprietΓ  commutativa), ovvero le relazioni 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).

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

Notazione: rappresentazione tabellare di una relazione

Una relazione con istanza 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 con istanza , 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

CosΓ¬ come per le singole relazioni, anche per le basi di dati possiamo definire uno schema e un’istanza.

Definizione: schema di una base di dati

Lo schema di una base di dati Γ¨ un insieme di schemi delle relazioni .

Osservazione: unicitΓ  degli elementi di uno schema di una base di dati

Uno schema di una base di dati, essendo un insieme, per definizione non può avere al suo interno elementi duplicati, cioè due relazioni con lo stesso nome.

Consiglio: criteri di buon progetto

Per la costruzione di un buon progetto, dei criteri da tenere a mente durante la progettazione di schema sono:

  • In caso di attributi omonimi che si riferiscono al medesimo concetto in diverse relazioni, il tipo deve essere lo stesso.
  • In caso di attributi omonimi in piΓΉ relazioni, il concetto espresso 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).

Definizione: istanza di una base di dati

Dato uno schema di una base di dati , un’istanza di una base di dati Γ¨ l’insieme di tutti i record di tutte le relazioni dello schema .

Ora che abbiamo definito schema e istanza di una base di dati, possiamo effettivamente definire cos’è una base di dati vera e propria.

Definizione: base di dati

Una base di dati Γ¨ un’istanza di una base di dati associata a uno schema .

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 con istanza , il vincolo locale sui valori nulli su un determinato attributo stabilisce che, per ogni record dell’istanza , il valore non deve essere il valore nullo.

4.2 - Superchiavi e chiavi

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

Definizione: superchiave

Data una relazione con istanza , un sottoinsieme di attributi Γ¨ una superchiave 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 (ma ciΓ² si poteva anche evincere dal fatto che per definizione non ci possono essere duplicati in uno schema).

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.

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.

Notazione per la chiave primaria

Una relazione , con chiave primaria, puΓ² anche essere denotata come:

Dalla definizione di chiave primaria si puΓ² formalizzare il vincolo locale di chiave primaria.

Definizione: vincolo locale di chiave primaria

Data una relazione , con chiave primaria e istanza , il vincolo locale di chiave primaria su stabilisce che, per ogni record dell’istanza , il valore deve essere unico e non deve essere il valore nullo.

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 uno schema di una base di dati in modo che tali valori rispettino (non siano in contrasto con) la realtΓ  che si vuole rappresentare.

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 Γ¨ un sottoinsieme di attributi dello schema di detto chiave esterna) con istanze e , per ogni record ​ di , esiste almeno un record in 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 domini dei tipi degli attributi in devono essere compatibili con i domini dei tipi 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 con istanza Γ¨ detta corretta se ogni record dell’istanza Γ¨ compatibile con lo schema e sono soddisfatti tutti i vincoli locali.

Definizione: correttezza di una base di dati

Una base di dati con schema e istanza Γ¨ detta corretta se ogni record dell’istanza Γ¨ compatibile con lo schema e sono soddisfatti tutti i vincoli locali e globali.

Fonti