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.
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 caratterizzato da:
Un dominioD di valori, ossia un insieme di valori possibili che il dato puΓ² assumere.
Una collezione di operazioni abilitate ad agire sui valori nel dominio D, tra cui operazioni di confronto tra i dati.
Esempio: tipo di dato intero
Un esempio immediato di un tipo di dato Γ¨ il tipo intero, il cui dominio D dei valori corrisponde allβinsieme dei numeri interi Z. Operazioni consentite sul dominio D sono per esempio lβoperazione di addizione +, di sottrazione β, di moltiplicazione β , di divisione Γ· ecc., mentre operazioni di confronto sono le operazioni di uguaglianza =, di diversoξ =, di minore<, di maggiore o ugualeβ₯ e cosΓ¬ via.
Esempio: tipo di dato stringa
Un altro esempio di un tipo di dato Γ¨ il tipo stringa, il cui dominio D dei valori corrisponde alle possibili combinazioni delle lettere dellβalfabeto. Operazioni consentite sul dominio D sono per esempio lβoperazione di concatenazione tra stringhe, mentre operazioni di confronto sono le operazioni di confronto delle lunghezze tra due stringhe.
I tipi standard (o predefiniti) che si trovano solitamente allβinterno dei DBMS sono:
Intero (int): per lβinsieme dei numeri interi Z.
Reale (float): per lβinsieme dei numeri razionali Q.
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 attributoA Γ¨ un insieme di valori associato a un tipo di datoT che determina quali valori puΓ² assumere.
Un attributo Nome di tipostringa che puΓ² avere come valori associati tutti i possibili nomi validi, come Alice, Marco, Giulia, ecc.
Un attributo EtaΛ di tipointero che puΓ² avere come valori associati tutti i numeri interi da un certo valore minimo a un massimo (es. {0,1,2,β¦,120}).
Un attributo Semaforo di tipoenumerato che puΓ² avere come valori associati lβinsieme {Verde,Giallo,Rosso}.
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.
Esempio di valore placeholder
In un attributo EtaΛ di tipointero 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 valore, usato per rappresentare la mancanza di un dato, che appartiene al dominio D di qualsiasi tipoT:
βT(nullβD)
Gli attributi sono raggruppati in schemi.
Definizione: schema di una relazione
Uno schema di una relazione (o semplicemente schema) A Γ¨ un insieme di attributi{A1β,A2β,β¦,Anβ}.
Esempio di schema
Un esempio di schema potrebbe essere lβinsieme di attributi che identificano gli studenti di unβuniversitΓ :
Matricola Γ¨ un attributi di tipostringa che rappresenta un identificatore univoco per lo studente.
Cognome Γ¨ un attributo di tipostringa che rappresenta il cognome dello studente.
Nome Γ¨ un attributo di tipostringa che rappresenta il nome dello studente.
DataDiNascita Γ¨ un attributo di tipodata che rappresenta la data di nascita dello studente.
CorsoDiLaurea Γ¨ un attributo di tipostringa 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: per esempio, non possono esserci due attributi Nome nello stesso schema.
CiΓ², perΓ², non vieta lβesistenza di due attributi con nomi diversi ma stesso tipo di dato (es. Cognome e Nome sono entrambi di tipo stringa).
Allo stesso modo, ricordiamo che in un insieme anche lβordine non conta, quindi gli schemi A={Matricola,Cognome,Nome,DataDiNascita,CorsoDiLaurea} e Aβ²={Matricola,CorsoDiLaurea,Nome,Cognome,DataDiNascita} 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.
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.
Nel modello relazionale di Codd, invece, lβordine degli attributiA1β,A2β,β¦,Anβ di uno schemaA Γ¨ irrilevante (e ciΓ² deriva dal fatto che lo schema Γ¨ un insieme che, per definizione, non Γ¨ ordinato).
Per la costruzione di un buon progetto, dei criteri da tenere a mente durante la progettazione di schemaS 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 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β 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 superchiavi e chiavi, utili a descrivere la connessione tra le varie relazioni di una base di dati.
Definizione: superchiave
Data una relazioneR(A) con istanzar, un sottoinsieme di attributiskβA Γ¨ una superchiave se, quando due recordtiβ,tjββr assumono gli stessi valori per tutti gli attributi di sk, allora sono in realtΓ lo stesso record:
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:
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.
Data una relazioneR(PKβ,A1β,A2β,β¦,Anβ), con PKβchiave primaria e istanzar, il vincolo locale di chiave primaria su PKβ stabilisce che, per ogni recordt dellβistanza r, il valore t[PKβ] deve essere unico e non deve essere il valore nullo.
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 relazioniRhβ(PKβ,β¦) (dove PKβ Γ¨ la chiave primaria di Rhβ) e Rsβ(β¦,FK,β¦) (dove FK Γ¨ un sottoinsieme di attributi dello schema di Rsβ detto chiave esterna) con istanzerhβ e rsβ, per ogni recordtiββ di Rsβ, esiste almeno un recordtjβ in Rhβ tale che il valore degli attributi FK corrisponde al valore della chiave primariaPKβ in tjβ:
In questa situazione, lβattributoPazienteβ in RICOVERI funge da chiave esterna che fa riferimento alla chiave primariaCodiceβ in PAZIENTI: infatti, per ogni valore di RICOVERI.Paziente si trova un corrispondente in PAZIENTI.Codice.
Osservazione: condizioni necessarie per il vincolo globale di integritΓ referenziale
π« 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: