← Portale
Database · AFM · RIM

Modello Logico
Relazionale

Dal diagramma E-R alle tabelle: chiavi primarie, chiavi esterne, relazioni 1:N e N:M.

8 sezioni · Esercizi interattivi · Livello base–intermedio
🔗 Modello Logico
Relazionale
8 sezioni · interattivo
Sezioni →
01

Da E-R a tabelle

Il diagramma E-R (Entità-Relazione) descrive la realtà in modo grafico. Il modello logico è il passo successivo: trasforma ogni entità in una tabella e ogni attributo in una colonna.

ℹ️
La regola base Ogni entità del diagramma E-R diventa una tabella. Ogni attributo dell'entità diventa una colonna di quella tabella.

Esempio — Entità PERSONA

Nel diagramma E-R abbiamo un'entità Persona con gli attributi: CF, Cognome, Nome, Telefono. Nel modello logico diventa:

PERSONA
PK CF Testo
Cognome Testo
Nome Testo
Telefono Testo

Nella notazione che userai, ogni tabella si scrive così:

CampoTipoChiave
CFTestoPK
CognomeTesto
NomeTesto
TelefonoTesto
💡
Cosa sono PK e FK? PK (Primary Key, chiave primaria) identifica in modo univoco ogni riga della tabella — non ci possono essere due righe con lo stesso valore di PK. FK (Foreign Key, chiave esterna) è un campo che punta alla PK di un'altra tabella, creando un collegamento tra le due.
02

La chiave primaria

Ogni tabella deve avere una chiave primaria (PK): un campo (o combinazione di campi) il cui valore identifica in modo univoco ogni riga. Due righe non possono avere la stessa PK — e la PK non può mai essere vuota.

Tre regole della PK

🚫
Regola 1 — Unicità: non ci possono essere due righe con lo stesso valore di PK.
Regola 2 — Non nulla: la PK non può mai essere vuota (NULL).
Regola 3 — Stabilità: il valore della PK non dovrebbe cambiare nel tempo.

Perché il Cognome non va bene come PK?

Immagina di usare il Cognome come chiave primaria della tabella PERSONA. Cosa succede se hai due persone con il cognome "Verdi"? Il database rifiuterebbe il secondo inserimento. Il CF invece è perfetto: è unico per ogni cittadino italiano e non cambia.

⬡ Simulatore — tabella PERSONA

Prova ad aggiungere righe alla tabella. Cosa succede se inserisci un CF già esistente o lasci il CF vuoto?

CF (PK)CognomeNome
03

Attributi e tipi di dato

Ogni colonna di una tabella ha un tipo di dato: indica al database che tipo di valore può contenere quel campo. Scegliere il tipo sbagliato causa problemi nelle operazioni (es. non puoi fare la somma di un campo Testo).

TipoContieneEsempi
TestoCaratteri alfanumericiCF, Nome, Cognome, Targa
InteroNumeri senza decimaliID, Quantità, Età
DecimaleNumeri con virgolaPrezzo, Peso, Percentuale
DataGiorno/Mese/AnnoData_Nascita, Data_Ordine
BooleanoVero o FalsoAttivo, Verificato, Spedito
⚠️
Attenzione — il numero di telefono è Testo, non Intero! I numeri di telefono iniziano spesso con 0 (es. 030123456) e possono contenere il + (es. +39). Come Intero, lo 0 iniziale verrebbe eliminato e il + sarebbe un errore. Usa sempre Testo per i codici che non richiedono calcoli.

⬡ Trascina ogni attributo nel tipo corretto

Prezzo
Quantità
Cognome
Data_Ordine
Telefono
ID_Articolo
Peso
Spedito
Testo
Intero
Decimale
Data
Booleano
04

Relazione 1:N

Una relazione 1:N (uno-a-molti) si verifica quando un record della tabella A può essere collegato a molti record della tabella B, ma ogni record di B è collegato a uno solo di A.

Esempio: Una persona può possedere più automobili, ma ogni automobile ha un solo proprietario. È una relazione 1:N tra PERSONA e AUTOMOBILE.

Per implementarla nel modello logico, si aggiunge la chiave esterna (FK) nella tabella del lato "molti" (AUTOMOBILE), che punta alla PK della tabella del lato "uno" (PERSONA).

PERSONA
PK CF Testo
Cognome Testo
Nome Testo
1 ──→ N
AUTOMOBILE
PK Targa Testo
Modello Testo
FK CF_Persona Testo
💡
Dove va la FK? Sempre nel lato "molti". AUTOMOBILE è il lato molti (una persona ha molte auto), quindi la FK va in AUTOMOBILE. Il valore di CF_Persona in ogni riga di AUTOMOBILE deve corrispondere a un CF esistente in PERSONA.

⬡ Scenario: un ufficio ha molti dipendenti. Dove metti la FK?

Hai due tabelle: UFFICIO (ID_Ufficio, Nome) e DIPENDENTE (CF, Nome, Cognome). Un ufficio ha molti dipendenti; ogni dipendente lavora in un solo ufficio.

Opzione A
FK in UFFICIO
Aggiungo CF_Dipendente alla tabella UFFICIO
Opzione B
FK in DIPENDENTE
Aggiungo ID_Ufficio alla tabella DIPENDENTE
05

Relazione N:M — il problema

Una relazione N:M (molti-a-molti) si verifica quando molti record di A possono essere collegati a molti record di B e viceversa.

Esempio: una persona può possedere più automobili e un'automobile può essere posseduta da più persone (es. auto cointestata). È N:M.

Non si può implementare direttamente con una sola FK: se una persona possiede 3 auto, dove metto le 3 targhe nella riga della persona?

⬡ Tentativo sbagliato: colonne Targa nella tabella PERSONA

Mario Rossi (XXX) ha già 3 auto. Prova ad aggiungerne una quarta.

CF (PK)NomeTarga1Targa2Targa3
XXXMario RossiXY123ADAB123QCZZ999XX
YYYAntonio VerdiAA122BB
ZZZSilvia MartiniXY123AC
06

La tabella associativa

Per risolvere una relazione N:M si crea una tabella associativa (chiamata anche tabella ponte): una terza tabella che contiene due FK — una che punta alla PK della prima tabella, una che punta alla PK della seconda.

La chiave primaria della tabella associativa è composta: la coppia delle due FK insieme è unica (la stessa coppia non può ripetersi).

PERSONA
PK CF Testo
Cognome Testo
1 ─→
POSSESSO
PK·FK CF Testo
PK·FK Targa Testo
Data_Inizio_Possesso Data
Data_Fine_Possesso Data
←─ 1
AUTOMOBILE
PK Targa Testo
Modello Testo
💡
Perché Data_Inizio e Data_Fine_Possesso? Senza queste date, come si capisce chi è l'attuale proprietario di un'auto? Un'auto può cambiare proprietario nel tempo. Queste date non appartengono né alla PERSONA né all'AUTOMOBILE — appartengono alla relazione di possesso, quindi vanno nella tabella associativa. Sono attributi di relazione, e le vedremo meglio nella prossima sezione.

⬡ Aggiungi le associazioni persona–automobile con date

Persone: XXX (Rossi), YYY (Verdi), ZZZ (Martini)  |  Auto: XY123AD, AA122BB, AB123QC
Inserisci alcune combinazioni. Prova a ripetere la stessa coppia CF+Targa!

CF (PK·FK)Targa (PK·FK)Data_Inizio *Data_Fine
07

Attributi di relazione

Abbiamo già visto che Data_Inizio_Possesso non appartiene né a PERSONA né ad AUTOMOBILE. Questo è il concetto di attributo di relazione: un'informazione che descrive la relazione tra due entità, non le entità stesse.

Altro esempio: in un negozio, la Quantità di un articolo ordinato non appartiene all'ARTICOLO (lo stesso articolo può essere ordinato in quantità diverse) né all'ORDINE (ogni ordine contiene molti articoli, ciascuno con la sua quantità). La Quantità appartiene alla relazione ORDINE–ARTICOLO.

ORDINI
PK ID_Ordine Intero
Data Data
Cliente Testo
1 ─→
DETTAGLIO_ORDINI
PK·FK ID_Ordine Intero
PK·FK ID_Articolo Intero
Quantità Intero
←─ 1
ARTICOLI
PK ID_Articolo Intero
Nome_Articolo Testo
Prezzo Decimale

⬡ Scenario: studenti e materie. Dove metti il Voto?

Hai tre tabelle: STUDENTI, ESAMI (tabella associativa), MATERIE.
Il Voto ottenuto in un esame — dove appartiene?

Voto
STUDENTI
ESAMI
MATERIE
08

Schema finale

Lo schema logico completo è la descrizione formale di tutte le tabelle del database: per ogni tabella, ogni campo con il suo tipo e il suo ruolo come chiave. È il documento di riferimento per chiunque debba costruire o interrogare il database.

Nella tabella associativa compaiono sempre le FK verso le due entità — che diventano anche PK composte — più eventuali attributi di relazione.

⬡ Trascina ogni attributo nella tabella corretta

Scenario: uno studente può iscriversi a molti corsi; un corso può avere molti studenti (N:M).
Ricorda: la tabella ISCRIZIONI deve contenere le FK verso STUDENTI e CORSI, più gli attributi propri della relazione.

CF_Stud
Cognome
Nome
ID_Corso
Denominazione
Data_Inizio
Docente
FK_CF_Stud
FK_ID_Corso
Data_Iscrizione
STUDENTI
CORSI
ISCRIZIONI (tabella associativa)