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:
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.
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 n-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.
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 AΓB={1,2,4}Γ{a,b}, una sua rappresentazione tabellare Γ¨ la seguente:
112244βabababββ
Si puΓ² notare come ogni riga contenga un elemento (es. nella prima riga cβΓ¨ lβelemento (1,a), nella seconda (1,b) e cosΓ¬ via), mentre in ognuna delle due colonne cβΓ¨ ognuno dei due domini A e B 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 (RealΒ Madrid,Liverpool,3,1) 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:
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 SquadraInCasa, SquadraOspite, GoalInCasa, GoalOspiti. Nella rappresentazione tabellare, gli attributi possono essere utilizzati come intestazioni delle colonne:
SquadraInCasa
SquadraOspite
GoalInCasa
GoalOspiti
RealΒ Madrid
Liverpool
3
1
Liverpool
Milan
2
0
Torino
Juventus
1
1
Roma
Milan
0
1
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.
SquadraOspite
SquadraInCasa
GoalOspiti
GoalInCasa
Liverpool
RealΒ Madrid
1
3
Milan
Liverpool
0
2
Juventus
Torino
1
1
Milan
Roma
1
0
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) T Γ¨ 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 Int
Int Γ¨ un tipo di dato rappresentante lβinsieme dei numeri interi Z nei RDBMS:
Int={0,1,β1,2,β2,β¦}
Definizione: tipo di dato Float
Float Γ¨ un tipo di dato rappresentante lβinsieme dei numeri reali R nei RDBMS:
Un attributoNome di tipo String che può avere come valori associati tutti i possibili nomi validi, come Alice, Marco, Giulia, e così via:
Nome={Alice,Marco,Giulia,β¦}βString
Un attributoEtaΛ di tipo Int che puΓ² avere come valori associati tutti i numeri interi da 0 fino a un massimo accettabile (come 120):
EtaΛ={0,1,2,β¦,120}βInt
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.
Esempio di valore segnaposto
In un attributo EtaΛ di tipo Int in cui vanno inserite le etΓ di diverse persone, posso scegliere per esempio di assegnare il valore 0 a quelle persone di cui non conosco lβetΓ , ma ciΓ² mi rende impossibile allora usare il valore 0 nel suo significato concreto, per esempio non posso assegnarlo come valore allβetΓ di un neonato. Unβalternativa potrebbe essere usare un valore che sicuramente non mi servirebbe assegnare a nessuno, come 200 o β1.
Usando un valore creato ad hoc, ossia un valore nullo usato specificatamente per questo ruolo.
Definizione: valore nullo
Il valore nullo, denotato con null, Γ¨ un elemento presente in ogni tipo di dato che rappresenta un valore sconosciuto nellβattributo.
DataDiNascita Γ¨ un attributo di tipo Date che rappresenta la data di nascita dello studente.
CorsoDiLaurea Γ¨ un attributo di tipo String che indica il corso di laurea a cui Γ¨ iscritto lo studente.
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.
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. Cognome e Nome sono entrambi di tipo String).
Allo stesso modo, ricordiamo che in un insieme anche lβordine non conta, quindi gli schemi
Una volta che abbiamo introdotto la definizione di schema, possiamo ora introdurre quelle definizioni che ci servono per arrivare al concetto di relazione.
Dato uno schemaA, unβistanza di una relazione (o semplicemente istanza, anche detta stato) R Γ¨ lβinsieme di tutti i recordt1β,t2β,β¦,tnβ dove ogni tiββR Γ¨ compatibile con A:
A={t1β,t2β,β¦,tnβ}
Notazione: valori di una tupla in corrispondenza di un insieme di attributi
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.
Una base di datiDB Γ¨ un insieme di relazioniR1β(A),R2β(B),β¦,Rnβ(Z):
DB={R1β(A),R2β(B),β¦,Rnβ(Z)}
Consiglio: criterio per l'assegnazione di nomi agli attributi
Per la costruzione di una buona base di datiDB={R1β(A),R2β(B),β¦,Rnβ(Z)}, un criterio da tenere a mente durante la progettazione degli schemiA,B,β¦,Z Γ¨ 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 Nome 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 Corso e Insegnamento per indicare unβunitΓ didattica).
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 relazioneR(A), il vincolo locale di dominio stabilisce che per ogni attributoA1β,A2β,β¦,AnββA esiste un insieme ben definito (anche infinito) di valori possibili che ognuno di essi puΓ² assumere, detto appunto dominio.
Esempio di vincolo locale di dominio
Data una relazioneSTUDENTI(Matricola,Cognome,Nome,DataDiNascita,CorsoDiLaurea,MediaVoti), possibili vincoli locali di dominio potrebbero essere:
LβattributoMatricola deve essere un numero intero positivo.
Gli attributiCognome e Nome devono essere stringhe di testo (es. massimo 50 caratteri).
LβattributoDataDiNascita deve essere una data valida nel formato YYYY-MM-DD.
LβattributoCorsoDiLaurea puΓ² assumere solo un valore tra un insieme predefinito di corsi validi (es. Informatica, Medicina, Psicologia, Ingegneria, ecc.).
LβattributoMediaVoti deve essere un numero reale compreso tra 18 e 30 (valori ammessi per la media dei voti universitari in Italia).
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 relazioneR(A), un sottoinsieme di attributiskβA Γ¨ una superchiave di R(A) se, quando due recordtiβ,tjββR assumono gli stessi valori per tutti gli attributi di sk, allora sono in realtΓ lo stesso record:
Sia STUDENTI(Matricola,Cognome,Nome,DataDiNascita,CorsoDiLaurea) la seguente relazione.
Matricola
Cognome
Nome
DataDiNascita
CorsoDiLaurea
1298309
Rossi
Mario
14/03/2001
Informatica
7521238
Verdi
Sofia
30/01/2004
Psicologia
1239002
Rossi
Francesco
04/20/2003
Informatica
Possiamo notare come lβinsieme degli attributi{Matricola,Cognome,CorsoDiLaurea} forma una superchiave, in quanto le triple di valori associati a questi attributi non sono duplicate:
Sia STUDENTI(Matricola,Cognome,Nome,DataDiNascita,CorsoDiLaurea) la seguente relazione.
Matricola
Cognome
Nome
DataDiNascita
CorsoDiLaurea
1298309
Rossi
Mario
14/03/2001
Informatica
7521238
Verdi
Sofia
30/01/2004
Psicologia
1239002
Rossi
Francesco
04/20/2003
Informatica
Delle chiavi candidate di questa relazione potrebbero essere gli attributiMatricola e DataDiNascita, oppure lβinsieme{Cognome,CorsoDiLaurea} che al suo interno non contiene altre superchiavi.
Il progettista deve sempre scegliere tra le chiavi candidate una chiave primaria che permetterΓ a ogni record di poter essere identificato univocamente.
CiΓ² significa che una chiave primaria Γ¨ automaticamente una superchiave, ma non Γ¨ necessariamente vero il contrario.
Se consideriamo inoltre una relazioneR(A), possiamo quindi dire che i requisiti che un insieme di attributiPKββA deve rispettare per essere considerato una chiave primaria sono tre:
Ogni record della relazione deve essere identificato univocamente da PKβ (requisito della superchiave).
Quali dei seguenti insiemi di attributi possono essere scelti come chiave primaria di EPISODI? Scegli una o piΓΉ alternative:
{Serie,NumStagione,NumEpisodio}
{ID}
{ID,Serie}
{ID,Serie,NumStagione,NumEpisodio}
Soluzione
Per stabilire se ogni opzione Γ¨ una potenziale chiave primaria di EPISODI, 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.
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 relazioniR(PKβ,β¦) (dove PKβ Γ¨ la chiave primaria di R) e S(β¦,FK,β¦) (dove FKβS Γ¨ detto chiave esterna), per ogni recordtiββS esiste almeno un recordtjββR tale che il valore degli attributi FK corrisponde al valore della chiave primariaPKβ in tjβ:
βtiββS,βtjββR(tiβ[FK]=tjβ[PKβ])
Esempio di vincolo globale di integritΓ referenziale
In questa situazione, lβattributoPazienteβ in RICOVERI funge da chiave esterna che fa riferimento alla chiave primariaCodiceβ in PAZIENTI: infatti, per ogni valore di Paziente in RICOVERI si trova un corrispondente in Codice in PAZIENTI.
Osservazione: condizioni necessarie per il vincolo globale di integritΓ referenziale
Una base di datiDB={R1β(A),R2β(B),β¦,Rnβ(Z)} Γ¨ detta corretta se ogni relazioneR1β(A),R2β(B),β¦,Rnβ(Z)βDB Γ¨ corretta e se sono soddisfatti tutti i vincoli globali.
Approfondimento
Fonti:
π« Lezioni e slide del Prof. Pensa Ruggero Gaetano del corso di Basi di Dati (canale B), Corso di Laurea in Informatica presso lβUniversitΓ di Torino, A.A. 2024-25: