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.
Esempio — Entità PERSONA
Nel diagramma E-R abbiamo un'entità Persona con gli attributi: CF, Cognome, Nome, Telefono. Nel modello logico diventa:
Nella notazione che userai, ogni tabella si scrive così:
| Campo | Tipo | Chiave |
|---|---|---|
| CF | Testo | PK |
| Cognome | Testo | |
| Nome | Testo | |
| Telefono | Testo |
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 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) | Cognome | Nome |
|---|
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).
| Tipo | Contiene | Esempi |
|---|---|---|
| Testo | Caratteri alfanumerici | CF, Nome, Cognome, Targa |
| Intero | Numeri senza decimali | ID, Quantità, Età |
| Decimale | Numeri con virgola | Prezzo, Peso, Percentuale |
| Data | Giorno/Mese/Anno | Data_Nascita, Data_Ordine |
| Booleano | Vero o Falso | Attivo, Verificato, Spedito |
⬡ Trascina ogni attributo nel tipo corretto
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).
⬡ 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.
Aggiungo CF_Dipendente alla tabella UFFICIO
Aggiungo ID_Ufficio alla tabella DIPENDENTE
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) | Nome | Targa1 | Targa2 | Targa3 |
|---|---|---|---|---|
| XXX | Mario Rossi | XY123AD | AB123QC | ZZ999XX |
| YYY | Antonio Verdi | AA122BB | ||
| ZZZ | Silvia Martini | XY123AC |
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).
⬡ 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 |
|---|
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.
⬡ Scenario: studenti e materie. Dove metti il Voto?
Hai tre tabelle: STUDENTI, ESAMI (tabella associativa), MATERIE.
Il Voto ottenuto in un esame — dove appartiene?
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.