L’associazione 1 a N può essere espressa chiaramente sia in SQL che in algebra relazionale. Mentre in SQL viene implementata tramite foreign key e JOIN, nell’algebra relazionale si formalizza tramite join naturali e operazioni di proiezione e selezione. Conoscere entrambe le rappresentazioni è utile sia per modellare correttamente il database che per comprenderne la logica teorica.
Associazione 1 a N in SQL tramite Algebra Relazionale
Nel modellare un database relazionale, uno dei concetti più frequenti è il tipo di associazione tra entità. Tra questi, l’associazione uno-a-molti (1 a N) è tra le più comuni. In questo articolo, vedremo come rappresentarla in SQL facendo riferimento ai concetti fondamentali dell’algebra relazionale, che costituisce la base teorica dei database relazionali.
Cos’è un’associazione 1 a N?
Un’associazione 1 a N significa che:
- Una tupla della prima relazione può essere associata a più tuple della seconda relazione.
- Ma ogni tupla della seconda relazione è associata ad al più una tupla della prima.
Un esempio classico è:
Un autore può scrivere più libri, ma ogni libro ha un solo autore.
In algebra relazionale, vogliamo modellare questa relazione in modo che ogni chiave primaria dell’entità “uno” (Autore) sia collegata come chiave esterna all’entità “molti” (Libro).
Modello relazionale
Supponiamo di avere le seguenti due relazioni:
Autore(CodAutore, Nome)
Libro(CodLibro, Titolo, CodAutore)
In algebra relazionale, questa struttura si può rappresentare come segue:
Autoreè una relazione base, conCodAutorecome chiave primaria.Libroè un’altra relazione base, doveCodAutoreè chiave esterna riferita aAutore.
La dipendenza è dal lato “molti” verso il lato “uno”.
Come si esprime in algebra relazionale
L’associazione 1 a N si realizza concettualmente con un join naturale (⋈) o con una selezione seguita da proiezione:
Estrazione di tutti i libri con il nome del loro autore:
Autore ⋈ Libro
Oppure, se vogliamo solo alcuni attributi:
π[Titolo, Nome] (Autore ⋈ Libro)
Questa espressione dell’algebra relazionale restituisce i titoli dei libri e il nome dell’autore corrispondente, sfruttando la chiave esterna CodAutore.
Corrispondenza in SQL
In SQL, l’associazione 1 a N viene rappresentata nella definizione delle tabelle con l’uso di foreign key:
CREATE TABLE Autore (
CodAutore INT PRIMARY KEY,
Nome VARCHAR(100)
);
CREATE TABLE Libro (
CodLibro INT PRIMARY KEY,
Titolo VARCHAR(100),
CodAutore INT,
FOREIGN KEY (CodAutore) REFERENCES Autore(CodAutore)
);
E per ottenere lo stesso risultato della query in algebra relazionale:
SELECT Titolo, Nome
FROM Autore
JOIN Libro ON Autore.CodAutore = Libro.CodAutore;
Proprietà dell’associazione 1 a N
Dal punto di vista dell’algebra relazionale:
- La chiave esterna crea un vincolo di integrità referenziale.
- Il join tra le due relazioni è sempre possibile se il vincolo è rispettato.
- Le operazioni di selezione (σ), proiezione (π) e join (⋈) permettono di navigare le associazioni.
