Lo schema logico traduce ogni elemento del diagramma E-R in tabelle relazionali, seguendo regole precise.

Regola 1 — Entità → Tabella

Ogni entità diventa una tabella. Il nome della tabella è al plurale per convenzione.

Studente  →  studenti  (id_studente (pk), nome, cognome, data_nascita)
Corso     →  corsi     (id_corso (pk), nome_corso, crediti)
Docente   →  docenti   (id_docente (pk), nome, cognome, email)

Regola 2 — Relazione 1:N → Chiave esterna nel lato N

La tabella del lato “molti” acquisisce la PK del lato “uno” come chiave esterna.

-- Docente (1) insegna (N) Corsi
corsi (id_corso (pk), nome_corso, crediti, id_docente (fk))

Regola 3 — Relazione N:N → Tabella ponte (entità associativa)

Si crea una nuova tabella con la PK di entrambe le entità come chiave primaria composta. Gli eventuali attributi della relazione diventano colonne di questa tabella.

-- Studente (N) si iscrive a (N) Corso, con attributo "voto"
iscrizioni (id_studente (fk), id_corso (fk), voto, data_iscrizione)
            PK: (id_studente, id_corso)

Regola 4 — Relazione 1:1

Si uniscono le due entità in una sola tabella, oppure si mette la FK nella tabella con partecipazione parziale (min = 0).

-- Persona (1,1) possiede (0,1) Passaporto → la FK va in Passaporto
passaporti (id_passaporto (pk), numero, scadenza, id_persona (fk) UNIQUE)

Regola 5 — Attributo composto → più colonne semplici

-- indirizzo (via, civico, CAP, città) diventa:
via VARCHAR(100), numero_civico VARCHAR(10), CAP CHAR(5), città VARCHAR(50)

Regola 6 — Attributo multivalore → nuova tabella con relazione 1:N

-- lingue_parlate (attributo multivalore di Persona) diventa:
lingue_persona (id (pk), id_persona (fk), lingua VARCHAR(50))

Schema logico dell’esempio completo

scuole      (id_scuola (pk), nome_scuola, città, indirizzo)
docenti     (id_docente (pk), nome, cognome, email)
corsi       (id_corso (pk), nome_corso, crediti, id_scuola (fk), id_docente (fk))
studenti    (id_studente (pk), nome, cognome, data_nascita, email)
iscrizioni  (id_studente (fk), id_corso (fk), voto, data_iscrizione)
            PK: (id_studente, id_corso)