Manuale di teoria

Teoria Informatica

Database · Modello E-R · Modello Logico

1 Introduzione Database

Definizione — DBMS Un DBMS (Database Management System) è un software che permette di creare, organizzare, gestire, interrogare e proteggere una base di dati in modo efficiente e sicuro.
Definizione — Dato Un dato è un valore alfanumerico privo di contesto, cioè di cui non si sa a cosa si riferisca e quindi che cosa significhi.
Definizione — Informazione Un’informazione è un dato contestualizzato, ovvero fornito di un contesto che permette di associargli un significato e che quindi trasforma il dato in una fonte di conoscenza.
DATO + CONTESTO = INFORMAZIONE
Il contesto trasforma il dato in informazione.

Esempio concreto: il valore 100, da solo, è un dato. Se gli si associa un contesto (voto in decimi, euro, centimetri, …) diventa un’informazione.

100 Dato 100 Contesto Informazione
Esempio: il numero 100 è un dato; il contesto lo trasforma in informazione.
Definizione — Sistema organizzativo Un sistema organizzativo è un insieme di risorse utilizzate da un’organizzazione (es. comune, scuole, aziende ecc.) per lo svolgimento delle proprie attività.
Definizione — Sistema informativo Un sistema informativo è un sottosistema del sistema organizzativo che si occupa della gestione dei dati (inserimento, modifica/aggiornamento, cancellazione, consultazione, politiche di sicurezza/riservatezza).
Definizione — Sistema informatico Un sistema informatico è un sottosistema del sistema informativo che usa dispositivi elettronici di elaborazione.
ORGANIZZAZIONE SISTEMA ORGANIZZATIVO SISTEMA INFORMATIVO SISTEMA INFORMATICO usa dispositivi elettronici di elaborazione
Gerarchia: ogni sistema è un sottosistema di quello precedente.

2 I Database

Definizione — Database Un database è una raccolta di dati strutturata in modo tale da agevolare il loro utilizzo da parte di un’organizzazione (es. comune, scuole, aziende ecc.) con riferimento a caratteristiche quali:
  1. Consistenza/coerenza (non esistono dati che si contraddicono).
  2. Riservatezza/autenticazione (accesso ai dati consentito solo alle persone autorizzate).
  3. Permanenza dei dati (operazioni di backup e ripristino che garantiscono la conservazione dei dati nonostante eventi distruttivi, interni o esterni al sistema).
  4. Efficienza (utilizzo ottimale delle risorse e ottimizzazione delle tempistiche di uso del database).

Le 4 fasi di creazione di un database

La creazione di un database prevede 4 fasi, nello stesso ordine del disegno: analisi dei requisiti, progettazione concettuale, progettazione logica, progettazione fisica. Il risultato di una fase è il punto di partenza della fase successiva.

Analisi dei requisiti Progettazione concettuale Schema concettuale Progettazione logica Schema logico Progettazione fisica Schema fisico
Riassunto delle 4 fasi: l’output di ogni fase è l’input della fase successiva.
  1. Analisi dei requisiti: il progettista studia le richieste del committente. È il materiale di partenza della fase successiva; nel disegno compare come titolo, non come riquadro.
  2. Progettazione concettuale: il progettista astrae e generalizza i concetti del minimondo (la porzione di realtà di cui si vogliono memorizzare i dati) e li disegna in uno schema grafico. Questo schema è il modello concettuale; nel disegno è chiamato schema concettuale. Sono lo stesso risultato. Non dipende ancora dal tipo di database che si userà. Di solito, a fine fase, il progettista lo mostra al committente.
  3. Progettazione logica (traduzione del modello concettuale nel modello logico): il progettista riscrive il modello concettuale con le strutture previste dal tipo di database scelto. Il risultato è il modello logico; nel disegno è chiamato schema logico. Non dipende ancora da come i dati saranno memorizzati sui dispositivi: questa scelta arriva solo nella fase successiva.
  4. Progettazione fisica (creazione del modello fisico): il progettista stabilisce come memorizzare i dati nelle memorie di massa. È l’implementazione fisica del database e produce lo schema fisico.

3 E-R — Modello Concettuale

Il modello concettuale che usiamo è il modello E-R (Entity-Relationship). Entity significa entità. Relationship si traduce «relazione», ma in questo manuale il legame tra entità si chiama associazione: per questo si parla anche di modello entità-associazione. Questa associazione non è la «relazione» del modello logico, che è una tabella: sono due parole dello stesso ambito, con due significati diversi. Il modello E-R si basa su 4 costrutti:

  1. Entità: una categoria di oggetti della realtà che hanno caratteristiche comuni (gli attributi). Il nome è un sostantivo singolare e, nel diagramma, inizia con la maiuscola: Studente, non studenti. Ha un’esistenza autonoma, cioè se ne può parlare senza dover citare un’altra entità.
  2. Attributo: una caratteristica dell’entità. Di ogni attributo si indicano:
    • il nome;
    • il tipo (numerico, stringa, data/ora);
    • la dimensione (quanti caratteri o quante cifre);
    • l’opzionalità: se il valore è obbligatorio oppure può mancare.
  3. Associazione: il legame logico tra entità. Ha un nome e può avere attributi propri.
  4. Identificatore: l’attributo, o il gruppo di attributi, che distingue ogni istanza dell’entità da tutte le altre.

Esempi di entità: Studente, Classe, Docente, Auto, Libro.

Convenzioni grafiche

Spiegazione — Associazione identificante Si chiama associazione identificante l'associazione che collega un'entità debole alla sua entità forte. È l'unica associazione a cui è chiesto un lavoro in più: far arrivare al debole la parte di identificatore che da solo non ha (la chiave del forte). Per questo si dice identificante: identifica insieme all'entità debole, nel senso che senza di lei le istanze del debole non sono distinguibili. Nel disegno si riconosce da un dettaglio: il pallino pieno, invece di chiudere un segmento che parte dall'entità, è collegato al rombo. Negli esempi dei diagrammi seguenti: Iscrizione è l'identificante di Studente verso Università; Riferimento lo è di Posizione verso Biblioteca.
STUDENTE NOME COGNOME MATRICOLA
Esempio: entità STUDENTE con attributi NOME, COGNOME e identificatore MATRICOLA (pallino pieno).
STUDENTE NOME COGNOME MATRICOLA Iscrizione CLASSE nomeClasse numeroAula NumeroAlunni
Esempio: le entità STUDENTE e CLASSE collegate dall’associazione Iscrizione.
Nome Cognome Presidente
Esempio: identificatore composto di Presidente. Nome e Cognome hanno il pallino vuoto, sono uniti dalla barra orizzontale e la barra termina con un unico pallino pieno.
Definizione — Istanza Un’istanza di un’entità è un oggetto concreto della realtà che si ottiene dando dei valori ai suoi attributi. Un’istanza dell’entità studente ad esempio è Marco Rossi M3567. L’identificatore di un’entità è tale che non esistono due istanze diverse che hanno identificatore con lo stesso valore.

Entità deboli

Definizione — Entità debole Un’entità si dice debole se i suoi attributi, da soli, non bastano a identificarla: per identificarne un’istanza serve anche l’identificatore di un’altra entità (l’entità forte) a cui è collegata.
STUDENTE FACOLTÀ MATRICOLA ISCRIZIONE UNIVERSITA' NOME CITTA'
Studente è un’entità debole: il pallino pieno collegato all’associazione Iscrizione rappresenta l’identificatore dell’entità debole, composto dalla chiave parziale (Matricola) e dall’identificatore dell’entità forte (Nome di Università).
Posizione NUMERO RIPIANO NUMERO SCAFFALE RIFERIMENTO BIBLIOTECA NOME CITTA'
Posizione è un’entità debole: il pallino pieno collegato all’associazione Riferimento rappresenta l’identificatore dell’entità debole, composto dalla chiave parziale (NumeroRipiano + NumeroScaffale) e dall’identificatore dell’entità forte (Nome di Biblioteca).

Generalizzazione e specializzazione

Se alcuni attributi di un’entità sono valorizzabili solo per una parte delle sue istanze mentre per le altre resterebbero vuoti, conviene allora raccogliere quelle istanze in una sottoentità. L’entità più generale si chiama generalizzazione (o entità padre); ogni sottoentità si chiama specializzazione (o entità figlia).

Esempio Un Socio di un circolo può essere tennista (attributi propri: numero di tornei vinti, colpo) e/o calciatore (attributi propri: numero di gol, ruolo). Se tutti questi attributi stessero su Socio, per un tennista ruolo e numero gol resterebbero vuoti, per un calciatore colpo e numero tornei vinti resterebbero vuoti. Conviene allora due sottoentità: Tennista e Calciatore. Socio è la generalizzazione, cioè l’entità padre; Tennista e Calciatore sono le specializzazioni, cioè le entità figlie.
SOCIO NOME COGNOME NUMERO TESSERA NUMERO GOL RUOLO COLPO NUMERO TORNEI VINTI
L’entità SOCIO contiene attributi valorizzabili solo per alcuni soci: la croce indica che questo modello E-R è scorretto.

Le entità figlie ereditano tutti gli attributi dell’entità padre (compreso l’identificatore) e le relative associazioni, ma hanno attributi propri e possono avere associazioni proprie.

SOCIO NOME COGNOME NUMERO TESSERA (t,s) Copertura CALCIATORE NUMERO GOL RUOLO TENNISTA NUMERO TORNEI VINTI COLPO
Generalizzazione Socio con specializzazioni Calciatore e Tennista; la coppia (t,s) indica la copertura.
Definizione — Copertura La copertura è la coppia scritta accanto alla freccia della generalizzazione, (t/p, e/s). Il primo simbolo dice se ogni istanza del padre sta in almeno una figlia; il secondo dice se una stessa istanza può stare in più figlie. Si legge, per esempio, (t,s) come «totale e sovrapposta».
  • Il primo elemento riguarda le istanze del padre.
    • totale (t): ogni istanza del padre sta in almeno una figlia. Nel circolo, ogni socio è tennista, calciatore, o entrambi.
    • parziale (p): qualche istanza del padre non sta in nessuna figlia. Nel modello E-R seguente esiste uno studente che non è né DSA, né Trinity, né con permesso.
  • Il secondo elemento riguarda le istanze che stanno in più figlie.
    • esclusiva (e): nessuna istanza sta in due figlie. Ad esempio, se la copertura del circolo fosse esclusiva, nessun socio sarebbe sia calciatore sia tennista.
    • sovrapposta (s): qualche istanza sta in più figlie. Nel modello E-R seguente uno studente può essere, per esempio, sia DSA sia Trinity, oppure DSA e con permesso.

Altro esempio di generalizzazione:

STUDENTE NOME COGNOME MATRICOLA (p,s) DSA MISURE COMPENSATIVE MISURE DISPENSATIVE PERMESSO INGRESSO USCITA TRINITY LIVELLO LINGUA
Generalizzazione Studente con tre sottoentità: DSA, Permesso e Trinity; copertura (p,s).
Nota — Sottoinsieme Quando la generalizzazione ha una sola figlia, quella figlia si chiama sottoinsieme. Nel disegno, Tempo determinato è l’unica figlia di Dipendente: non è una generalizzazione con più specializzazioni affiancate.
DIPENDENTE MATRICOLA TELEFONO NOME COGNOME TEMPO DETERMINATO DURATA CONTRATTO
Esempio di sottoinsieme: Tempo determinato è l’unica sottoentità figlia di Dipendente.

Associazione ricorsiva

L’associazione ricorsiva collega istanze della stessa entità. Si usa quando quelle istanze sono in gerarchia: una persona è padre di un’altra persona, un dipendente è capo di un altro dipendente.

PERSONA CodFiscale (0,n) PADRE DI (0,1) FIGLIO DI Genitore
Associazione ricorsiva Genitore sull’entità Persona: ruoli “padre di” (0,n) e “figlio di” (0,1).

Associazioni binarie, ternarie e n-arie

Un’associazione è binaria se collega due entità, ternaria se ne collega tre, n-aria se ne collega n.

Esempio — Associazione ternaria Una riga dell’associazione ternaria non lega le tre entità a due a due. Lega un’istanza di un’entità a una coppia delle altre due. Nell’esempio, il venditore V1 è legato alla coppia (Amministrazione, Samsung S1009): V1 fornisce quella stampante a quel dipartimento. Non dice, da solo, che V1 fornisce ogni stampante all’Amministrazione.
Dipartimento Nome NumDipendenti (0,n) Fornitura (0,n) Prodotto IdProdotto Prezzo (0,n) Venditore PIVA Nome
Associazione ternaria Fornitura tra Dipartimento, Prodotto e Venditore: accanto a ciascuna entità c’è (0,n).

Esempio di associazione binaria:

Prezzo Libro ISBN Titolo (1,n) Scrittura (1,n) Autore IdAutore Nome
Associazione binaria Scrittura tra Libro e Autore: accanto a ciascuna entità c’è (1,n).

Cardinalità delle associazioni binarie

Le cardinalità di un’associazione binaria sono due coppie (min, max), una accanto a ciascuna entità. La coppia scritta accanto a un’entità non conta le istanze di quell’entità: conta quante istanze dell’altra entità possono essere collegate a una sua istanza. Il primo numero è il numero minimo di istanze dell’altra entità collegate a una sua istanza, il secondo numero è il numero massimo di istanze dell’altra entità collegate a una sua istanza.

Da questi massimi si ricava il tipo di associazione:

1) Uno a uno (si scrive 1:1)

Il massimo è 1 da entrambi i lati: ogni istanza di ciascuna entità è collegata a non più di un’istanza dell’altra. Il minimo, nella stessa coppia, dice se il legame è obbligatorio (1) o può mancare (0). Nell’esempio, accanto a Stato c’è (0,1) e accanto a Presidente c’è (1,1): i due massimi valgono 1, quindi l’associazione è 1:1; lo 0 dice che uno stato può non avere un presidente.

Stato Nome NumAbitanti (0,1) Presidenza (1,1) Presidente Nome Cognome
L’entità Stato ha una partecipazione non obbligatoria all’associazione Presidenza: ci possono essere istanze dell’entità Stato che non sono associate ad alcuna istanza dell’entità Presidente (le monarchie non hanno un presidente).

Altro esempio:

Persona CodFiscale Nome Cognome (1,1) Possesso (1,1) Tessera Sanitaria Numero DataScadenza
Associazione 1:1 Possesso tra Persona e Tessera Sanitaria.

2) Uno a molti (si scrive 1:n)

Un lato ha massimo 1, l’altro ha massimo n. Si legge sempre la coppia accanto all’entità, e quella coppia parla dell’altra entità. Nell’esempio:

I «molti» sono gli studenti che condividono la stessa classe, non il numero scritto accanto alla classe. In traduzione (Regola 2, Caso 1) la chiave esterna va nell’entità che ha il massimo 1 accanto a sé, qui Studente.

Studente Matricola Nome Cognome (1,1) Iscrizione (1,n) Classe nomeClasse numeroAula
Associazione 1:n Iscrizione tra Studente e Classe.

3) Molti a molti (si scrive n:n)

Il massimo è n da entrambi i lati. Nell’esempio, accanto ad Autore e accanto a Libro c’è (1,n): un autore scrive uno o più libri e un libro ha uno o più autori. Non c’è un lato con massimo 1, quindi in traduzione non basta una chiave esterna in una delle due tabelle: serve una tabella nuova (Regola 2, Caso 2).

Autore Codice Nome (1,n) Scrittura (1,n) Libro ISBN Titolo
Associazione n:n Scrittura tra Autore e Libro.
Nota — valida per tutte le associazioni Le associazioni non hanno mai un identificatore, ma possono avere attributi.
UNIVERSITA' Nome APERTURA SUCCURSALE Codice Via Città identificatore NO! Anno attributo — OK
Le associazioni possono avere attributi (pallino vuoto, es. Anno di apertura della succursale), ma non hanno mai un identificatore (pallino pieno — NO!).
Studente Matricola Nome (0,n) Svolgimento (0,n) Esame IdEsame Nome Voto Data
Altro esempio di associazione con attributi: Svolgimento ha gli attributi Voto e Data.

Attributi composti e multivalore

Definizione — Attributo composto Un attributo si dice composto se può essere scomposto in più attributi che hanno un significato autonomo nel minimondo considerato. Un attributo si dice atomico se non è composto.
PERSONA Codice INDIRIZZO VIA NUMERO CIVICO CITTÀ
Per gli attributi composti si usa un pallino più grande per indicare che è composto.
Definizione — Attributo multivalore Un attributo si dice multivalore se può assumere più valori riferiti alla stessa istanza dell’entità. Un attributo multivalore ha una cardinalità, ovvero una coppia di numeri che indicano il numero minimo e massimo di valori che l’attributo può avere.

La cardinalità di un attributo è la coppia (minimo, massimo) di valori che quell’attributo può avere per una stessa istanza. Se l’attributo è singolo, cioè non multivalore, la coppia di solito non si disegna: l’opzionalità dice già se il valore è obbligatorio o può mancare. La coppia si scrive quando l’attributo è multivalore, come (0,n) accanto a Patente nel disegno seguente: una persona può non avere patenti oppure averne diverse.

PERSONA Codice INDIRIZZO VIA NUMERO CIVICO CITTÀ (0,n) PATENTE
Attributo multivalore PATENTE (doppio cerchio) con cardinalità (0,n).

Il dominio

Definizione — Dominio Il dominio di un attributo è l’insieme di tutti i valori che l’attributo può assumere.

4 Il Modello Logico

Il modello logico non è un disegno: è uno schema scritto con le strutture del tipo di database scelto. Qui usiamo il database relazionale, ideato nel 1970 da E. F. Codd (IBM) a partire dal concetto matematico di relazione. Lo schema che ne risulta si chiama modello logico relazionale. In questo modello la relazione è ciò che poi si scrive come tabella: non va confusa con l’associazione del modello E-R.

Definizione — Relazione Dati i domini D1, D2, …, DN degli attributi, il prodotto cartesiano D1 × D2 × … × DN è l’insieme di tutte le n-uple (X1, X2, …, XN) in cui X1 appartiene a D1, X2 a D2, e così via. Una relazione su quei domini è un qualunque sottoinsieme di questo prodotto: non tutte le combinazioni possibili, solo quelle che descrivono casi reali del minimondo.
Esempio

D1 = {FIAT, FORD, OPEL}    D2 = {TIPO, PUMA, CORSA}

Il prodotto D1 × D2 contiene tutte e 9 le coppie possibili: (FIAT, TIPO), (FIAT, PUMA), (FIAT, CORSA), (FORD, TIPO), (FORD, PUMA), (FORD, CORSA), (OPEL, TIPO), (OPEL, PUMA), (OPEL, CORSA).

La relazione R tiene solo le coppie in cui il secondo valore è un modello del primo: R = {(FIAT, TIPO), (FORD, PUMA), (OPEL, CORSA)}. (FIAT, PUMA) sta nel prodotto cartesiano, ma non in R.

Le relazioni spesso vengono scritte in forma tabellare.

Esempio: relazione in forma tabellare
Marca (D1)Modello (D2)
FiatTipo
FordPuma
OpelCorsa
Definizione — Istanza di una relazione Si definisce istanza di una relazione un suo elemento. Se la relazione è scritta come tabella, un’istanza è una riga. Nel disegno qui sotto la riga evidenziata è un’istanza della relazione Studente.
Studente Nome Cognome Telefono Email Data di Nascita Mario Rossi 333000111 mariorossiX @gmail.com 2007-11-15 Giovanni Bini 32211099 Gibi@iy. im 2006-12-26 …… Istanza della relazione (una riga)
Una riga della tabella è un’istanza della relazione.
Definizione — Cardinalità di una relazione Si definisce cardinalità di una relazione il numero di righe della sua tabella.
Definizione — Grado di una relazione Si definisce grado di una relazione il numero di colonne della sua tabella, cioè quanti attributi ha.
grado = 2 Marca (D1) Modello (D2) Fiat Tipo Ford Puma Opel Corsa cardinalità = 3
Esempio 1 — grado = 2 (due colonne) e cardinalità = 3 (tre righe).
grado = 3 Matricola Nome Cognome M103 Mario Rossi M104 Giulia Bianchi M105 Lino Lini M106 Anna Rosi M107 Mino Mei cardinalità = 5
Esempio 2 — grado = 3 (tre colonne) e cardinalità = 5 (cinque righe).

In una tabella, un attributo è l’intestazione di una colonna. L’ordine delle colonne e l’ordine delle righe non contano. I valori di una stessa colonna sono tutti dello stesso tipo. Non esistono due righe uguali: per questo l’insieme di tutti gli attributi basta a distinguere una riga da tutte le altre.

Definizione — Superchiave Una superchiave è un insieme di attributi che identifica una sola riga. L’insieme di tutti gli attributi è sempre una superchiave, perché due righe uguali non sono ammesse.
Definizione — Chiave candidata Una chiave candidata è una superchiave minimale: se si toglie anche un solo attributo, l’insieme che resta non identifica più ogni riga. Una relazione può averne più di una. Nella relazione che rappresenta l’entità Dipendente, per esempio, codice fiscale e matricola sono due chiavi candidate.
Definizione — Chiave primaria La chiave primaria è la chiave candidata che il progettista sceglie per identificare ogni riga della tabella.

Chiave esterna

Definizione — Chiave esterna Si definisce chiave esterna di una relazione (tabella A) l’attributo (o l’insieme di attributi) della tabella A che è (sono) chiave primaria di una tabella B. La chiave esterna permette di collegare 2 tabelle.

Nell’esempio sotto, nomeClasse nella tabella Studente è una chiave esterna perché fa riferimento alla chiave primaria nomeClasse della tabella Classe.

Studente
Matricola (PK)NomeCognomenomeClasse (FK)
M103MarioRossi3D
M104GiuliaBianchi4H
M105LinoLini3D
M106AnnaRosi5F
M107MinoMei3T
Classe
nomeClasse (PK)numeroAulaNumeroAlunni
3D520
5F812
4H1218

I valori della chiave primaria non si ripetono nella stessa tabella. I valori della chiave esterna si possono ripetere (più studenti nella stessa classe), ma ognuno di essi deve già comparire nella chiave primaria della tabella collegata. Nell’esempio 3T, valore della chiave esterna della tabella Studente non è tra i valori della chiave primaria della tabella Classe. Questo porta a chi legge la tabella a dubitare che ci sia stato un errore di inserimento e che Mino Mei faccia un’altra classe e non la classe 3T (oppure dubitare che effettivamente Mino Mei faccia la classe 3T di cui in questo caso però non abbiamo nessuna informazione).

Il vincolo di integrità referenziale evita proprio il problema perché impedisce di inserire il valore di una chiave esterna che non esiste tra i valori della chiave primaria collegata; quindi ad esempio se ci fosse stato il vincolo di integrità referenziale non avrei potuto inserire il valore «3T» nella riga dell’alunno Mino Mei.

La tabella che contiene la chiave esterna si chiama tabella referenziante. Nel manuale è chiamata anche tabella referenziale o slave: è la tabella che punta all’altra. La tabella la cui chiave primaria viene citata si chiama tabella referenziata (o master). «Referenziale» è un sinonimo di referenziante, non di referenziata.

Vincoli

Esistono due tipi di vincolo:

Esame
IdEsame (PK)DataVotoLodeNumeroEsameMatricola (FK)
E10410/11/202326No3M105
E10610/04/202425No4M105
E10710/11/202430Sì2M106
E10810/10/202332No6M104
E10920/09/202228Sì5M104
E11023/12/202326No72M103

Nella tabella Esame tre celle rosse violano un vincolo. Il numero di riga è quello dei dati, senza contare l’intestazione.

❌ Errore 1 — dominio, un solo attributo. Quarta riga (E108): Voto vale 32. Un voto non può uscire dall’intervallo 18–30.
❌ Errore 2 — tupla, due attributi insieme. Quinta riga (E109): Lode vale «Sì» ma Voto vale 28. La lode è ammessa solo con voto 30.
❌ Errore 3 — dominio, un solo attributo. Sesta riga (E110): NumeroEsame vale 72. Il numero d’esame deve stare tra 1 e 30.

Il vincolo di dominio Voto>=18 AND Voto<=30 blocca l’Errore 1: guarda solo la colonna Voto.

Il vincolo di tupla Lode="No" OR Voto=30 blocca l’Errore 2: è soddisfatto se la lode è «No», oppure se il voto è 30. Guarda insieme Voto e Lode.

Il vincolo di dominio NumeroEsame>0 AND NumeroEsame<31 blocca l’Errore 3: guarda solo la colonna NumeroEsame.

Notazione del modello logico relazionale

Nel modello logico relazionale le tabelle vengono scritte nella forma:

Esame (IdEsame(PK), data, voto, lode, numeroEsame, Matricola(FK))

dove PK è la chiave primaria e FK è la chiave esterna. Se la chiave è composta da più attributi, i nomi stanno dentro la parentesi: PK(Matricola, IdEsame), FK(CodiceL, Inventario). L’ordine degli attributi è fisso: prima la PK, poi gli attributi propri della tabella, per ultime le FK. Se le FK sono più di una, restano in coda nello stesso ordine in cui compaiono. Nell’esempio, IdEsame è la PK; data, voto, lode e numeroEsame sono attributi propri; Matricola è la FK ed è l’ultimo nome. La stessa notazione è usata nella teoria e negli esercizi.

Procedimento di traduzione dal modello E-R al modello logico

La traduzione dal modello E-R al modello logico avviene in 3 passi ordinati. L’ordine è importante: prima si ristruttura (applicando la Regola 1), poi si traducono entità e associazioni (applicando la Regola 2).

  1. Passo 1 — Ristrutturazione (Regola 1): si eliminano i costrutti che il modello logico non rappresenta: attributo composto, attributo multivalore, generalizzazione e associazione ricorsiva (che si scioglie sdoppiando l’entità nei suoi due ruoli). Si ottiene il modello E-R ristrutturato.
  2. Passo 2 — Traduzione delle entità: ogni entità del modello ristrutturato diventa una tabella. Gli attributi dell’entità diventano colonne; l’identificatore diventa la chiave primaria (PK).
  3. Passo 3 — Traduzione delle associazioni (Regola 2): nel modello logico non esiste il rombo e ogni associazione va tradotta in tabelle e/o chiavi esterne.
Modello E-R originale Passo 1 · Regola 1 Modello E-R ristrutturato senza composto, multivalore, generalizzazione, senza associazioni ricorsive Passo 2 · entità → tabelle (PK) Tabelle delle entità + debole: PK forte + chiave parziale Passo 3 · Regola 2 Modello logico (PK, FK) 1:n · n:n · 1:1 · ternaria · ricorsiva
Procedimento in 3 passi: prima la Regola 1 (ristrutturazione), poi la Regola 2 (associazioni). Saltare il Passo 1 porta a FK verso tabelle destinate a sparire o a un’associazione ricorsiva lasciata irrisolta.
Esempio di lettura Negli esercizi 5–10 e 13–15 applichi prima la Regola 1 (telefono multivalore → entità Telefono, Indirizzo composto → colonne, generalizzazione → Metodo 1, 2 o 3) e solo dopo la Regola 2 (FK o nuova tabella). Le soluzioni mostrano sempre i due momenti separati. Negli esercizi 11–12 la Regola 1 comprende anche lo sdoppiamento dell’entità ricorsiva.

Regola 1 — Eliminazione dei costrutti del modello E-R non presenti nel modello logico

Si eliminano quattro costrutti, che il modello logico non rappresenta: attributo composto, attributo multivalore, generalizzazione, associazione ricorsiva.

Il modello E-R che resta si chiama modello E-R ristrutturato. In questa stessa fase si cerca anche di ridurre lo spazio occupato, la ridondanza e il tempo di accesso: è lo stesso lavoro di ristrutturazione, non una fase in più.

Eliminazione dell’attributo composto

L’attributo composto si cancella e al suo posto restano gli attributi atomici che lo componevano. Il nome dell’attributo composto non diventa una colonna: nel disegno, Indirizzo scompare e restano Via, NumeroCivico e Città.

Prima: attributo composto PERSONA Codice INDIRIZZO VIA NUMERO CIVICO CITTÀ Regola 1: attributi atomici PERSONA Via NumeroCivico Città Codice
Eliminazione dell’attributo composto: modello E-R ristrutturato.

Eliminazione dell’attributo multivalore

L’attributo multivalore diventa un’entità nuova, collegata all’entità di partenza. L’associazione è 1:n oppure n:n, e la scelta si legge sui due esempi di questa sezione:

Prima: attributo multivalore (doppio cerchio) Dipendente Matricola Nome Cognome (1,n) TELEFONO Regola 1: entità + associazione 1:n Dipendente Matricola Nome Cognome (1,n) Possiede (1,1) Telefono Numero
Eliminazione dell’attributo multivalore telefono (1,n): il doppio cerchio diventa l’entità Telefono (con l’attributo Numero come identificatore) collegata a Dipendente dall’associazione 1:n Possiede: modello E-R ristrutturato.
Prima: attributo multivalore (doppio cerchio) Persona CodFiscale Nome LINGUA (1,n) Regola 1: entità + associazione n:n Persona CodFiscale Nome (1,n) Parla (0,n) Lingua Nome
Eliminazione dell’attributo multivalore lingua (1,n): il doppio cerchio diventa l’entità Lingua (con Nome come identificatore: il nome della lingua è già univoco, non serve un codice) collegata a Persona dall’associazione n:n Parla: (1,n) accanto a Persona (ogni persona parla almeno una lingua), (0,n) accanto a Lingua (una lingua può non avere parlanti nel database): modello E-R ristrutturato.

Eliminazione delle generalizzazioni

Le generalizzazioni si eliminano durante la ristrutturazione, non mentre si disegna il modello E-R di partenza. I metodi sono tre e sono alternativi. La scelta usa, in quest’ordine, informazioni già presenti nello schema: la copertura (t/p, e/s), poi gli attributi e le associazioni proprie delle figlie, poi il prezzo che si accetta di pagare (valori vuoti, tabelle in più, associazioni duplicate). La tavola in fondo a questa sezione riassume la stessa scelta.

Metodo 1 — Eliminazione dell’entità padre. Il padre si cancella. Ogni figlia riceve gli attributi del padre, identificatore compreso, e anche le associazioni del padre, ripetute una volta per figlia.

Prima: generalizzazione Vivente → Animale / Vegetale, copertura (t,e) Vivente Codice Nome (0,n) Presenza (1,n) Territorio IdTer Superficie (t,e) Animale Vegetale NumeroZampe Fioritura Metodo 1: eliminazione dell’entità padre Dopo: padre eliminato — attributi comuni e associazioni ripetuti nelle figlie Animale CodiceA Nome NumeroZampe (0,n) PresenzaA (1,n) Vegetale CodiceV Nome Fioritura (0,n) PresenzaV (1,n) Territorio IdTer Superficie
Metodo 1 — esempio: eliminazione dell’entità padre Vivente; gli attributi comuni (Codice, Nome) vengono ripetuti nelle figlie (rinominati CodiceA/CodiceV), che conservano i loro attributi specifici (NumeroZampe, Fioritura); l’associazione Presenza viene ripetuta per ogni entità figlia (PresenzaA, PresenzaV): modello E-R ristrutturato.
Nota — Le figlie non hanno identificatore Nella generalizzazione le entità figlie non hanno un identificatore proprio. Un animale o un vegetale è identificato da Codice, che nel disegno sta solo sul padre Vivente (pallino pieno). Quando il Metodo 1 cancella il padre, quel codice va copiato sulle figlie e rinominato (CodiceA, CodiceV): altrimenti animali e vegetali non avrebbero più un identificatore.
Nota — Rinominare gli attributi comuni Gli attributi comuni copiati sulle figlie, e in particolare l’identificatore, si rinominano in ciascuna figlia (CodiceC in Cane, CodiceG in Gatto). Così, nelle tabelle e nelle chiavi esterne, il nome dice subito di quale figlia si parla. Anche le associazioni che puntavano al padre si duplicano con nomi diversi (RiceveC, RiceveG).

Metodo 2 — Eliminazione delle entità figlie. Le figlie si cancellano e i loro attributi si spostano sul padre. Resta una sola entità, quindi poi una sola tabella.

Prima: generalizzazione Socio → Tennista / Calciatore, copertura (t,s) Socio Tessera Nome Cognome (t,s) Tennista Calciatore NumTorneiVinti Colpo NumeroGol Ruolo Metodo 2: eliminazione delle entità figlie Dopo: attributi delle figlie confluiti nell’entità padre +attributo tipoSocio Socio Tessera tipoSocio Nome Cognome NumeroGol Colpo Ruolo NumTorneiVinti
Metodo 2 — esempio: eliminazione delle entità figlie Tennista e Calciatore; tutti gli attributi (inclusi quelli specifici NumTorneiVinti, Colpo, NumeroGol, Ruolo) confluiscono nell’entità padre Socio, insieme all’attributo di controllo tipoSocio: modello E-R ristrutturato.
Suggerimento Quando le figlie vengono incorporate nel padre, un attributo in più dice a quale figlia appartiene l’istanza. Nel modello di Socio è tipoSocio e i suoi valori sono calciatore oppure tennista oppure entrambi (la copertura è sovrapposta: un socio può essere tutte e due le cose). Nell’esempio seguente è razza, e i suoi valori sono cane oppure gatto oppure altra razza.
Prima: generalizzazione Animale → Cane / Gatto, copertura (p,e), associazione Vendita Animale costo età IdAnimale (1,1) Vendita (1,n) Negozio Nome Telefono (p,e) Cane taglia carattere Gatto lunghezzaPelo colorePelo Metodo 2: figlie incorporate + attributo razza Dopo: Cane e Gatto incorporati in Animale (con razza) Animale IdAnimale costo età razza taglia carattere lunghezzaPelo colorePelo (1,1) Vendita (1,n) Negozio Nome Telefono
Incorporando Cane e Gatto in Animale si aggiunge l’attributo razza; l’associazione Vendita con Negozio resta sul padre. Copertura (p,e).

Metodo 3 — Sostituzione con associazioni 1:1. Il padre resta. Ogni figlia resta. Al posto della freccia di generalizzazione si disegna un’associazione 1:1 tra il padre e quella figlia. Il metodo è sempre possibile.

Prima: generalizzazione Socio → Tennista / Calciatore, copertura (t,s) Socio Tessera Nome Cognome (t,s) Tennista Colpo Calciatore Ruolo Metodo 3: associazioni 1:1 tra padre e figlie Socio Tessera Nome Cognome (0,1) Is_T (1,1) Tennista TesseraT Colpo (0,1) Is_C (1,1) Calciatore TesseraC Ruolo
Metodo 3 — prima la generalizzazione Socio → Tennista / Calciatore (copertura (t,s)); dopo la sostituzione con le associazioni 1:1 Is_T e Is_C. Accanto al padre la cardinalità è (0,1) (un socio può non essere tennista, oppure può non essere calciatore: la copertura totale impone solo che sia almeno una delle due cose); accanto alla figlia è (1,1) (ogni tennista, e ogni calciatore, è esattamente un socio). Nome e cognome di Calciatore e Tennista si ricavano dall’entità Socio a esse collegata.

Stesso metodo, con un’associazione che resta sul padre: Iscrizione verso CircoloSportivo non si sposta sulle figlie; dopo la ristrutturazione la generalizzazione è sostituita solo da Is_T e Is_C.

Prima: generalizzazione Socio → Tennista / Calciatore (t,s) e Iscrizione al CircoloSportivo Socio Tessera Nome Cognome (1,1) Iscrizione (1,n) CircoloSportivo Nome Telefono (t,s) Tennista colpo n.vittorie Calciatore gol ruolo Modello E-R ristrutturato Tennista colpo n.vittorie Calciatore gol ruolo Is_T (1,1) (0,1) Is_C (1,1) (0,1) Socio Tessera Nome Cognome (1,1) Iscrizione (1,n) CircoloSportivo Nome Telefono
Metodo 3 — Iscrizione resta su Socio; la generalizzazione diventa le associazioni 1:1 Is_T e Is_C.
Tavola di scelta — eliminazione delle generalizzazioni
MetodoSceglilo quando…In cambio accetti…
1 — Elimina il padreCopertura totale (obbligo). Meglio se anche esclusiva. Figlie con molti attributi propri.Associazioni del padre duplicate verso ogni figlia; per elencare tutte le istanze dell’entità padre bisogna leggere le tabelle delle figlie.
2 — Elimina le figlieSempre possibile, salvo associazioni che riguardano una sola figlia (in quel caso il Metodo 2 è sbagliato). Meglio se copertura parziale e/o sovrapposta, o figlie senza associazioni proprie.Molti NULL e un attributo di controllo (tipo, razza).
3 — Associazioni 1:1Sempre possibile. Figlie con associazioni proprie da non mescolare; vuoi evitare sia i nulli sia le duplicazioni.Più tabelle; per rileggere una figlia insieme al padre bisogna collegare più tabelle fra loro.
In una verifica o in un esame Motiva sempre la scelta in una riga: «copertura (t,e) e attributi specifici distinti → Metodo 1»; «copertura incerta / parziale, figlie povere → Metodo 2»; «solo i medici hanno l’associazione Segue → Metodo 3».

Eliminazione dell’associazione ricorsiva (sdoppiamento dell’entità)

Il modello logico non ha il rombo. Un’associazione, lì, è solo una chiave esterna fra due tabelle, oppure una tabella di collegamento.

Un’associazione ricorsiva è un rombo con due ruoli sulla stessa entità. Va quindi sostituita già in ristrutturazione, prima della traduzione. L’entità si disegna due volte, una copia per ruolo: «padre di» e «figlio di» nell’esempio. Non nasce un’entità nuova. Le due copie hanno gli stessi attributi e lo stesso identificatore. Il rombo, tra le due copie, è ormai un’associazione binaria, e le cardinalità sono quelle che prima stavano sui ruoli.

Come questa associazione binaria diventa tabelle e chiavi è il Caso 4 della Regola 2.

Prima: associazione ricorsiva (due ruoli sulla stessa entità) Persona CodFiscale Nome (0,n) padre di (0,1) figlio di Genitore Regola 1: sdoppiamento nei due ruoli Dopo: due copie della stessa entità (una per ruolo) e un’associazione binaria Persona ruolo «padre di» CodFiscale Nome (0,n) Genitore (0,1) Persona ruolo «figlio di» CodFiscale Nome
L’entità ricorsiva Persona (associazione Genitore) viene sostituita da due copie della stessa entità, distinte dal solo ruolo («padre di» e «figlio di»): stessi attributi, stesso identificatore CodFiscale. Le due copie sono collegate dall’associazione ormai binaria Genitore: modello E-R ristrutturato.

Regola 2 — Rappresentazione delle associazioni nel modello logico

Qui il rombo scompare e diventa tabelle e chiavi. I primi tre casi valgono per due entità diverse. Il quarto è l’associazione ricorsiva, che dopo la Regola 1 è già un’associazione fra due copie della stessa entità e quindi si traduce con uno dei primi tre.

Caso 1: Associazione 1:n

Si creano due tabelle, una per entità. L’associazione diventa una chiave esterna messa nella tabella dell’entità che ha il massimo uguale a 1 scritto accanto a sé. Quella è la tabella referenziante.

Esempio — Studente (1,1) — Iscrizione — (1,n) Classe. Accanto a Studente c’è (1,1), quindi ogni studente è collegato al massimo a una classe e la FK nomeClasse va in Studente. Accanto a Classe c’è (1,n): una classe ha molti studenti, e Classe è la tabella referenziata, quella che contiene la PK nomeClasse. Il minimo 1 accanto a Studente dice che la FK ha sempre un valore; se il minimo fosse 0, la FK potrebbe restare vuota.

Studente Matricola Nome Cognome (1,1) Iscrizione (1,n) Classe nomeClasse numeroAula
Associazione 1:n Iscrizione tra Studente e Classe (Regola 2, Caso 1).
-- Il modello logico associato al modello E-R soprastante:
Studente (Matricola(PK), Nome, Cognome, nomeClasse(FK))
Classe   (nomeClasse(PK), numeroAula)

Se l’associazione ha attributi propri, stanno in Studente, prima della FK, che resta l’ultimo attributo.

Studente Matricola Nome Cognome (1,1) Iscrizione Data (1,n) Classe nomeClasse numeroAula
Associazione 1:n Iscrizione con l’attributo Data. Nel modello logico Data sta in Studente, prima della FK nomeClasse.
-- Data è attributo di Iscrizione: sta in Studente, prima della FK
Studente (Matricola(PK), Nome, Cognome, Data, nomeClasse(FK))
Classe   (nomeClasse(PK), numeroAula)

Caso 2: Associazioni n:n

Si crea una nuova tabella, con il nome dell’associazione. Le due entità restano due tabelle, senza FK aggiunte.

La tabella nuova è formata da:

  1. la PK, formata dalla coppia delle chiavi primarie delle due entità. Gli attributi dell’associazione non entrano nella PK;
  2. gli attributi dell’associazione, se ci sono (nell’esempio, Voto e Data);
  3. Due chiavi esterne che sono le due chiavi primarie delle due entità collegate.
Studente Matricola Nome (0,n) Svolgimento (0,n) Esame IdEsame Nome Voto Data
Associazione n:n Svolgimento tra Studente e Esame, con gli attributi Voto e Data sull’associazione (Regola 2, Caso 2).
Studente    (Matricola(PK), Nome)
Esame       (IdEsame(PK), Nome)
Svolgimento (PK(Matricola, IdEsame), Voto, Data, Matricola(FK), IdEsame(FK))

Caso 3: Associazione 1:1

La scelta dipende dai minimi delle due cardinalità. Tre casi:

Prima strategia — (1,1) da entrambi i lati: una sola tabella. Si fondono le due entità in un’unica tabella con gli attributi di entrambe e una sola chiave primaria. Nessun valore resta mai vuoto: è la soluzione migliore.

Persona CodFiscale Nome Cognome (1,1) Possesso (1,1) Tessera Sanitaria Numero DataScadenza
Associazione 1:1 Possesso tra Persona e Tessera Sanitaria — prima strategia (fusione delle entità).
-- usando la prima strategia:
Persona (CodFiscale(PK), Nome, Cognome, Numero, DataScadenza)

Seconda strategia — (1,1) da un solo lato: per ognuna delle 2 entità una tabella e chiave esterna nella tabella relativa all’entità con cardinalità (1,1).

Stato Nome NumAbitanti (0,1) Presidenza (1,1) Presidente Nome Cognome
Associazione 1:1 Presidenza tra Stato e Presidente — seconda strategia (chiave esterna); identificatore composto di Presidente con barra orizzontale e unico pallino pieno.
-- usando la seconda strategia: perché con la prima si avrebbero molte righe con valori nulli
Stato      (Nome(PK), NumAbitanti)
Presidente (PK(Nome, Cognome), NomeStato(FK))

Terza strategia — (0,1) da entrambi i lati: tabella separata. Se da entrambi i lati il legame può mancare, la chiave esterna resterebbe vuota in molte righe, da qualunque parte la si metta. Si crea allora una terza tabella con il nome dell’associazione: la sua chiave primaria è una delle due chiavi esterne. Così le due tabelle restano pulite e solo i legami esistenti occupano una riga.

Docente IdDocente Nome (0,1) Tutor (0,1) Studente Matricola Nome
Associazione 1:1 Tutor tra Docente e Studente — terza strategia (tabella separata).
-- usando la terza strategia (esempio: Docente (0,1) — Tutor — (0,1) Studente):
Docente  (IdDocente(PK), Nome)
Studente (Matricola(PK), Nome)
Tutor    (IdDocente(PK), IdDocente(FK), Matricola(FK))

Caso 4: Associazione ricorsiva (associazione fra due entità con lo stesso nome)

Dopo la ristrutturazione l’associazione ricorsiva collega due copie della stessa entità, distinte solo dal ruolo. La traduzione ha due momenti, in quest’ordine:

  1. Le due copie diventano una sola tabella. Hanno gli stessi attributi e lo stesso identificatore, quindi non si creano due tabelle Persona.
  2. L’associazione si traduce con il caso già visto, scelto dalle cardinalità: Caso 1 se è 1:n, Caso 2 se è n:n, Caso 3 se è 1:1.

La tabella citata dalle FK è la tabella stessa. Nel Caso 1 la FK sta nella tabella unica e punta alla sua PK (auto-referenza). Nel Caso 2 nasce la tabella dell’associazione, con due FK verso quella stessa tabella.

Esempio — Caso 1 (1:n). In anagrafe, Persona ha CodFiscale e Nome, e l’associazione ricorsiva Genitore ha i ruoli «padre di» (0,n) e «figlio di» (0,1). È lo stesso esempio della Regola 1, dove ci sono il modello E-R e il modello ristrutturato. Le due copie sono la stessa entità, quindi la tabella è una sola. Il rombo, tra le copie, è 1:n: la FK va dal lato del ruolo con massimo 1, cioè «figlio di» (ogni persona ha al più un genitore). La colonna si chiama CodPadre perché contiene il codice del padre, e punta a CodFiscale della stessa tabella.

-- Passo 1: sdoppiamento dei ruoli · Passo 3 (Caso 1): FK auto-referenziante
Persona (CodFiscale(PK), Nome, CodPadre(FK))   -- CodPadre → Persona.CodFiscale
CodFiscale (PK) Nome CodPadre (FK) CF01 Mario CF02 CF02 Giulia CF03 CF03 Anna NULL FK auto-referenziante: CodPadre → CodFiscale della stessa tabella
La FK CodPadre non punta a un’altra tabella, ma alla PK della stessa tabella: Mario (CF01) è figlio di Giulia (CF02), che è figlia di Anna (CF03), che nel database non ha genitore (NULL). Il legame è quindi fra righe della stessa tabella.

Due controlli, letti sulle cardinalità dei ruoli. Il ruolo «padre di» ha massimo n: lo stesso padre può comparire su più figli, quindi la FK CodPadre può ripetersi (nel modello fisico non avrà il vincolo di unicità; lo avrebbe solo se anche quel ruolo avesse massimo 1, cioè se l’associazione fosse 1:1). Il minimo 0 del ruolo «figlio di» dice che qualche persona non ha il genitore nel database (il capostipite): per quelle righe CodPadre resta vuoto (nel modello fisico: valore NULL).

Esempio — Caso 2 (n:n). I follower di un social. L’entità è Utente (IdUtente, Nickname). L’associazione ricorsiva Segue ha i ruoli «segue» (0,n) — un utente segue più utenti — e «è seguito da» (0,n) — un utente è seguito da più utenti. Chi segue e chi è seguito sono entrambi utenti: è la stessa entità nei due ruoli.

Utente IdUtente Nickname (0,n) segue (0,n) è seguito da Segue
Il modello E-R di partenza: Utente con l’associazione ricorsiva Segue — ruoli «segue» (0,n) e «è seguito da» (0,n).
⬇ Modello E-R ristrutturato (Regola 1: sdoppiamento dell’entità ricorsiva)
Utente ruolo «segue» IdUtente Nickname (0,n) Segue (0,n) Utente ruolo «è seguito da» IdUtente Nickname
Dopo la ristrutturazione: Utente compare due volte, una per ruolo (stessi attributi, stesso identificatore IdUtente), e Segue è un’associazione binaria n:n.

Le due copie di Utente sono la stessa entità, quindi la tabella degli utenti è una sola, con IdUtente e Nickname. Nessuno dei due ruoli ha massimo 1, quindi nessuna delle due copie può ospitare una sola FK: si applica il Caso 2. Nasce la tabella Segue. La sua PK è la coppia dei due ruoli; le due colonne prendono il nome dal ruolo, IdFollower per «segue» e IdSeguito per «è seguito da»; le stesse due colonne sono ripetute in coda come FK verso Utente. Una riga significa «il primo utente segue il secondo».

-- Passo 3 (Caso 2): tabella dell’associazione, due FK verso la stessa tabella
Utente (IdUtente(PK), Nickname)
Segue  (PK(IdFollower, IdSeguito), IdFollower(FK), IdSeguito(FK))
-- entrambe le FK → Utente.IdUtente

5 Esercizi — Dal modello E-R al modello logico

Regola 1 · Ristrutturazione del modello E-R  +  Regola 2 · Associazioni nel modello logico

Gli esercizi seguenti sono raggruppati per tipo e, dentro ogni gruppo, disposti in ordine di difficoltà crescente. Per ognuno sono forniti il testo, il modello E-R (disegnato seguendo le convenzioni grafiche del manuale: entità come rettangoli, associazioni come rombi, attributi con pallino, identificatore con pallino pieno, cardinalità come coppie), lo svolgimento commentato e la soluzione in notazione modello logico con PK per le chiavi primarie e FK per le chiavi esterne. Prova a risolvere l’esercizio prima di aprire la soluzione.

Procedimento in 3 passi: dal modello E-R al modello logico. I passi vanno eseguiti in ordine, senza saltarne nessuno.
Passo 1 — Ristrutturazione (Regola 1): si elimina ciò che il modello logico non rappresenta
Attributo compostoScompare come nome unico; restano le sue parti come attributi semplici dell’entità.Indirizzo → Via, NumeroCivico, Città.
Attributo multivaloreDiventa una nuova entità con il proprio identificatore, collegata alla vecchia da un’associazione 1:n.Telefono multivalore di Dipendente → entità Telefono (Numero).
GeneralizzazioneSi elimina con uno dei 3 metodi: Metodo 1 (resta solo ogni figlia), Metodo 2 (resta solo il padre + attributo di controllo tipo...), Metodo 3 (padre e figlie collegati da associazioni 1:1 Is...).Socio → Tennista/Calciatore con Metodo 2 + tipoSocio.
Associazione ricorsivaSi sdoppia l’entità nei suoi due ruoli: si disegna due volte la stessa entità, una per ruolo. Non nasce nessuna entità nuova.Persona padre di Persona → due copie: ruolo «padre di», ruolo «figlio di».
Passo 2 — Traduzione delle entità: ogni entità diventa una tabella
Entità forteUna tabella con il nome dell’entità; gli attributi diventano colonne; l’identificatore diventa la chiave primaria (PK).Studente (Matricola, Nome) → Studente (Matricola(PK), Nome).
Entità deboleUna tabella come sopra, ma la PK è composta: prima la chiave dell’entità forte, poi la chiave parziale. Al Passo 2 la debole resta momentaneamente senza PK: la PK si completa al Passo 3 con la FK dell’identificante.Ricovero debole di Paziente → PK(CodPaziente, NumRicovero).
Passo 3 — Traduzione delle associazioni (Regola 2): il rombo scompare, restano tabelle e chiavi esterne (FK)
Associazione 1:nDue tabelle; la FK va nella tabella con cardinalità (1,1) o (0,1), cioè dal lato con massimo 1.Studente (1,1) — Classe (1,n) → FK nomeClasse in Studente.
Associazione n:nTerza tabella col nome dell’associazione; PK = coppia delle PK; due FK, una per entità.Svolgimento → PK(Matricola, IdEsame) + 2 FK.
Associazione 1:1, prima strategia(1,1) da entrambi i lati: una sola tabella con gli attributi di entrambe e una sola PK.Persona–Tessera → un’unica tabella.
Associazione 1:1, seconda strategia(1,1) da un solo lato: due tabelle; FK nella tabella con cardinalità (1,1).Stato (0,1) — Presidente (1,1) → FK NomeStato in Presidente.
Associazione 1:1, terza strategia(0,1) da entrambi i lati: terza tabella col nome dell’associazione; la PK è una delle due FK.Tutor → Tutor (IdDocente(PK), IdDocente(FK), Matricola(FK)).
Associazione identificanteLa FK si scrive in coda come in un 1:n normale e, in più, entra a far parte della PK composta dell’entità debole (chiave del forte per prima). Non nasce nessuna tabella aggiuntiva.Via debole di Città → Via (PK(CAP, nome), lunghezza, CAP(FK)).
Associazione ricorsivaLe due copie diventano una sola tabella; l’associazione si traduce col caso 1:n, n:n o 1:1 secondo le cardinalità dei ruoli.CodPadre(FK) in Persona; Segue(PK(IdFollower, IdSeguito)).

Gruppo 1 — Associazioni fra due entità (Regola 2)

Nessuna ristrutturazione: si applica solo la Regola 2 (Casi 1, 2 e 3): due tabelle e la chiave esterna dal lato con massimo 1.

Esercizio 1 — Associazione 1:n Facile

Testo Un laboratorio analisi conserva i pazienti (codice, nome, cognome) e i referti (numero, data). Ogni referto è riferito a esattamente un paziente, mentre ogni paziente può avere molti referti (almeno uno). Tradurre il modello E-R sottostante in modello logico.
Paziente Codice Nome Cognome (1,n) Riferito (1,1) Referto Numero Data
Modello E-R: Paziente (1,n) — Riferito — (1,1) Referto.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): niente da eliminare: non ci sono attributi composti, multivalore né generalizzazioni. Il modello è già ristrutturato.

Passo 2 — Traduzione delle entità: ogni entità diventa una tabella (ancora senza le FK delle associazioni, che si aggiungono al Passo 3):

-- Passo 2: tabelle delle entità, senza FK da associazioni
Paziente (Codice(PK), Nome, Cognome)
Referto  (Numero(PK), Data)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione Riferito 1:n viene rappresentata con una FK aggiunta nella tabella referenziante Referto. Accanto a Referto c’è (1,1): ogni referto punta a un solo paziente, quindi la FK sta in Referto. Il minimo 1 della stessa coppia dice che la FK ha sempre un valore e non può restare vuota.

-- Passo 1: nulla da ristrutturare; Passo 2: 2 tabelle; Passo 3: 1:n → FK in Referto
Paziente (Codice(PK), Nome, Cognome)
Referto  (Numero(PK), Data, codPaziente(FK))

Esercizio 2 — Associazione 1:n con attributo dell’associazione Facile

Testo Una biblioteca gestisce libri (ISBN, titolo) e copie fisiche (inventario). Ogni copia appartiene a un solo libro; di ogni copia interessa anche la condizione (buono, danneggiato…), che nel modello E-R è rappresentata come attributo dell’associazione Appartenenza tra copia e libro. Tradurre in modello logico, decidendo in quale tabella va a finire la condizione.
Libro ISBN Titolo (0,n) Appartenenza Condizione (1,1) Copia Inventario
Modello E-R: Libro (0,n) — Appartenenza — (1,1) Copia, con attributo condizione sull’associazione.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): niente da eliminare: nessun composto, multivalore o generalizzazione. Il modello è già ristrutturato.

Passo 2 — Traduzione delle entità: Libro e Copia diventano tabelle (ancora senza FK né attributi di associazione):

-- Passo 2: senza FK da associazioni
Libro (ISBN(PK), Titolo)
Copia (Inventario(PK))

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione Appartenenza 1:n viene rappresentata con una FK aggiunta nella tabella referenziante Copia ((1,1) verso Libro); l’attributo dell’associazione Condizione viene rappresentato nella stessa tabella, prima della FK (che resta l’ultimo attributo).

-- Passo 1: nulla da ristrutturare; Passo 3: 1:n → FK + attributo in Copia
Libro (ISBN(PK), Titolo)
Copia (Inventario(PK), Condizione, ISBN(FK))

Esercizio 3 — Associazione n:n Medio

Testo Un sistema di streaming registra utenti (idUtente, username) e film (idFilm, titolo). Un utente può guardare molti film, un film può essere guardato da molti utenti; per ogni visione interessa la data. Tradurre in modello logico.
Utente IdUtente Username (0,n) Guarda Data (0,n) Film IdFilm Titolo
Modello E-R: Utente (0,n) — Guarda — (0,n) Film, con attributo data sull’associazione.
Osserva — Ipotesi nascosta nel modello E-R Chi ha disegnato questo schema ha fatto l’ipotesi che un utente non guardi lo stesso film più di una volta. Senza quell’ipotesi il modello E-R è sbagliato: la coppia Utente–Film potrebbe ripetersi (stesso utente, stesso film, date diverse) e quindi Guarda non sarebbe più un’associazione ma un’entità, con un proprio identificatore; Data diventerebbe attributo di quell’entità.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): niente da eliminare. Il modello è già ristrutturato.

Passo 2 — Traduzione delle entità: Utente e Film diventano tabelle (la tabella dell’associazione nasce solo al Passo 3):

-- Passo 2: senza tabella Guarda
Utente (IdUtente(PK), Username)
Film   (IdFilm(PK), Titolo)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione Guarda n:n viene rappresentata con una nuova tabella col nome dell’associazione, con PK formata dalla coppia delle PK (che sono anche due FK) più l’attributo Data. Una sola FK non basterebbe perché un utente guarda molti film e viceversa.

-- Passo 3: n:n → nuova tabella con PK(IdUtente, IdFilm)
Utente (IdUtente(PK), Username)
Film   (IdFilm(PK), Titolo)
Guarda (PK(IdUtente, IdFilm), Data, IdUtente(FK), IdFilm(FK))

Esercizio 4 — Associazione 1:1 Medio

Testo Un comune gestisce persone (codiceFiscale, nome, cognome) e patenti (numero, dataScadenza). Ogni persona possiede al più una patente e ogni patente appartiene a esattamente una persona. Scegliere la strategia di traduzione più opportuna (Regola 2, Caso 3) e motivarla.
Persona CodFiscale Nome (0,1) Rilascio (1,1) Patente Numero Scadenza
Modello E-R: Persona (0,1) — Rilascio — (1,1) Patente.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): niente da eliminare. Il modello è già ristrutturato.

Passo 2 — Traduzione delle entità: Persona e Patente diventano tabelle (ancora senza la FK di Rilascio):

-- Passo 2: senza FK di Rilascio
Persona (CodFiscale(PK), Nome, Cognome)
Patente (Numero(PK), DataScadenza)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): Rilascio è 1:1 ed è seconda strategia — (1,1) da un solo lato: accanto a Persona c’è (0,1), accanto a Patente c’è (1,1). Si tengono due tabelle e la FK va nella tabella con cardinalità (1,1), cioè Patente (ogni patente ha sempre una persona; molte persone non hanno patente).

-- Passo 3: 1:1 seconda strategia → FK in Patente (cardinalità (1,1))
Persona (CodFiscale(PK), Nome, Cognome)
Patente (Numero(PK), DataScadenza, codFiscale(FK))

Gruppo 2 — Attributo multivalore (Regola 1)

Prima si trasforma l'attributo in entità con la Regola 1, poi si traduce la 1:n come nel Gruppo 1.

Esercizio 5 — Attributo multivalore (Regola 1) Medio

Testo Un’azienda registra i dipendenti (matricola, nome, cognome) e, per ciascuno, uno o più numeri di telefono. Il telefono è un attributo multivalore (1,n): ristrutturare il modello E-R e tradurre il risultato in modello logico.
Dipendente Matricola Nome Cognome Telefono (1,n)
Modello E-R da ristrutturare: telefono è un attributo multivalore (1,n).
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): si elimina l’attributo multivalore telefono (1,n) trasformandolo nell’entità Telefono (PK Numero) collegata a Dipendente dall’associazione 1:n Possiede ((1,n) verso Dipendente, (1,1) verso Telefono).

⬇ Modello E-R ristrutturato (Regola 1: multivalore → entità + 1:n)
Dipendente Nome Cognome Matricola (1,n) Possiede (1,1) Telefono Numero
Dopo la ristrutturazione: entità Telefono + associazione 1:n Possiede.

Passo 2 — Traduzione delle entità: le entità ristrutturate diventano tabelle (ancora senza la FK di Possiede):

-- Passo 2: senza FK di Possiede
Dipendente (Matricola(PK), Nome, Cognome)
Telefono   (Numero(PK))

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): l’associazione Possiede è 1:n, quindi la FK va nella tabella che ha massimo 1 accanto a sé, cioè Telefono. Rendere quella FK obbligatoria direbbe solo che ogni telefono appartiene a un dipendente. Il vincolo «ogni dipendente ha almeno un telefono» sta sull’altro lato, accanto a Dipendente, e si controlla a parte, con una procedura.

-- Passo 1: multivalore → entità Telefono + Possiede 1:n; Passo 3: 1:n → FK in Telefono
Dipendente (Matricola(PK), Nome, Cognome)
Telefono   (Numero(PK), matricola(FK))

Gruppo 3 — Entità debole e associazione identificante

La FK dell'identificante si scrive in coda e entra nella PK composta: chiave del forte + chiave parziale.

Esercizio 6 — Entità debole Medio-alto

Testo Un comune gestisce le città (CAP, nome) e le vie (nome, lunghezza). Ogni città contiene una o più vie; una via esiste solo all’interno della città che la contiene e viene identificata solo dal nome relativo alla città: la via è un’entità debole. Tradurre in modello logico.
Via nome lunghezza (1,1) Contiene (1,n) Città CAP nome
Via è un’entità debole: nome ha il pallino vuoto (chiave parziale). Il pallino pieno a sinistra rappresenta l’identificatore di Via ed è collegato, con la barra orizzontale, all’associazione identificante Contiene: l’identificatore completo è nome + identificatore di Città.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): niente da eliminare (l’entità debole non si elimina con la Regola 1). Via resta debole con chiave parziale nome.

Passo 2 — Traduzione delle entità: le entità diventano tabelle (la debole Via è ancora senza la FK identificante, che completa la PK solo al Passo 3):

-- Passo 2: Via senza FK di Contiene (PK incompleta)
Città (CAP(PK), nome)
Via   (nome, lunghezza)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione identificante Contiene 1:n viene rappresentata con la FK aggiunta CAP in Via: la PK diventa così PK(CAP, nome) = PK forte + chiave parziale. Non serve una tabella in più.

-- Passo 2: debole → PK(CAP, nome); Passo 3: Contiene già nella FK
Città      (CAP(PK), nome)
Via        (PK(CAP, nome), lunghezza, CAP(FK))

Gruppo 4 — Generalizzazione: la scelta del metodo

Per ogni generalizzazione scegli il Metodo 1, 2 o 3, motiva la scelta in una riga, poi ristruttura e traduci.

Esercizio 7 — Generalizzazione (Regola 1) Medio-alto

Testo Un negozio di animali distingue gli animali (codice, nome, razza) in cani (peso medio) e gatti (colore occhi) e registra le vaccinazioni: di ogni vaccinazione interessa il codice identificatore e il nome, mentre la data di somministrazione è un’informazione del legame tra la vaccinazione e l’animale che la riceve. Si fa l’ipotesi che il negozio venda solo cani e gatti (e che nessun animale sia entrambi): la copertura è quindi (t,e). Scegliere il metodo di eliminazione più adatto, ristrutturare il modello e tradurlo in modello logico.
Animale Codice Nome Razza (t,e) (0,n) Riceve Data (1,1) Vaccinazione Codice vacc. Nome Cane pesoMedio Gatto coloreOcchi
Generalizzazione Animale con figlie Cane e Gatto, copertura (t,e) (ipotesi: il negozio vende solo cani e gatti); entità Vaccinazione collegata dall’associazione Riceve con attributo Data.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): l’ipotesi «solo cani e gatti, mai entrambi» dà copertura totale ed esclusiva (t,e) → Metodo 1, eliminazione del padre Animale. Gli attributi comuni (codice, nome, razza) vengono ripetuti nelle figlie con identificatori rinominati (CodiceC, CodiceG); l’associazione Riceve viene duplicata in RiceveC e RiceveG. Il Metodo 2 mescolerebbe in una sola tabella pesoMedio e coloreOcchi (tanti nulli) e costringerebbe a un attributo di controllo accanto a Razza.

⬇ Modello E-R ristrutturato (Metodo 2: eliminazione delle entità figlie)
Opera Codice tipoOpera Titolo Anno NumPagine Genere (1,n) Raccoglie (1,1) Copia Inventario Stato (0,n) Prende (0,n) Utente Tessera
La generalizzazione scompare: resta la sola entità Opera con l’attributo di controllo tipoOpera (libro oppure rivista); Copia resta un’unica entità debole di Opera e Prende resta una sola associazione n:n.

Passo 2 — Traduzione delle entità: Opera, Copia e Utente diventano tabelle (Copia è debole, quindi la sua PK nasce al Passo 3 incrociando la chiave dell’opera con la chiave parziale):

-- Passo 2: padre con tipoOpera, copia debole, utente
Opera  (Codice(PK), Titolo, Anno, NumPagine, Genere, Periodicita, Editore, tipoOpera)
Utente (Tessera(PK), Nome)
Copia  (Inventario, Stato)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): l’associazione identificante Raccoglie completa la PK di Copia: PK(Codice, Inventario). L’associazione Prende è n:n: nasce un’unica tabella con PK(Tessera, Codice, Inventario); la chiave esterna verso la copia è composta (il solo Inventario non la identifica).

-- Passo 1: Metodo 2 (identificante sul padre) → una sola Opera, una sola Copia; Passo 3: identificante in PK, una sola n:n
Opera  (Codice(PK), Titolo, Anno, NumPagine, Genere, Periodicita, Editore, tipoOpera)
Utente (Tessera(PK), Nome)
Copia  (PK(Codice, Inventario), Stato, Codice(FK))
Prende (PK(Tessera, Codice, Inventario), Tessera(FK), FK(Codice, Inventario))
Perché non gli altri metodi Metodo 1: lecito con la copertura (t,e), ma costringerebbe a sdoppiare Copia in Copialibro/Copiarivista e a duplicare Raccoglie e Prende: tabelle doppie senza alcun vantaggio. Metodo 3: corretto (vedi la nota al Passo 1), ma con due tabelle in più per le figlie a fronte di soli due attributi propri ciascuna.

Esercizio 8 — Generalizzazione: meglio il Metodo 2 Medio-alto

Testo Un circolo sportivo registra gli istruttori (codice, nome, qualifica) e i soci (tessera, nome, cognome). Ogni socio è seguito da un solo istruttore e un istruttore allena più soci. I soci si dividono in tennisti, di cui interessa il ranking, e nuotatori, di cui interessa lo stile; esistono però anche soci che praticano solo la palestra, che non sono né tennisti né nuotatori, e nessuno è entrambe le cose: la copertura è (p,e). Inoltre nessuna delle due sottoentità ha associazioni proprie. Analizzare la copertura, scegliere il metodo di eliminazione più adatto, ristrutturare e tradurre in modello logico.
Istruttore Socio Tennista Nuotatore Allena Codice Nome Qualifica Tessera Nome Cognome Ranking Stile (1,n) (1,1) (p,e)
Generalizzazione Socio con figlie Tennista e Nuotatore, copertura (p,e) (esistono soci che praticano solo la palestra); associazione Allena 1:n tra Istruttore e Socio.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): la copertura è (p,e), quindi il Metodo 1 è vietato: eliminando Socio si perderebbero i soci che praticano solo la palestra. Il Metodo 3 sarebbe lecito ma inutile, perché Tennista e Nuotatore non hanno associazioni proprie da conservare. Le figlie hanno pochissimi attributi specifici (ranking, stile) e i soci «solo palestra» restano nel padre: la scelta guidata è il Metodo 2, figlie incorporate in Socio con l’attributo di controllo TipoFiglia.

⬇ Modello E-R ristrutturato (Metodo 2: figlie nel padre + TipoFiglia)
Istruttore Socio Allena Codice Nome Qualifica Tessera Nome Cognome TipoFiglia Ranking Stile (1,n) (1,1)
Tennista e Nuotatore confluiscono in Socio: Ranking, Stile e TipoFiglia diventano attributi del padre; Allena resta invariata.

Passo 2 — Traduzione delle entità: le due entità diventano tabelle:

-- Passo 2: tabelle delle entità
Istruttore (Codice(PK), Nome, Qualifica)
Socio      (Tessera(PK), Nome, Cognome, Ranking, Stile, TipoFiglia)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): l’associazione Allena 1:n mette la FK in Socio, la tabella dal lato con massimo 1 (accanto a Socio c’è (1,1)). La generalizzazione non produce altre tabelle.

-- Passo 1: Metodo 2 (p,e, figlie povere) → una sola tabella per i soci; Passo 3: 1:n → FK in Socio
Istruttore (Codice(PK), Nome, Qualifica)
Socio      (Tessera(PK), Nome, Cognome, Ranking, Stile, TipoFiglia, Codice(FK))
Perché non gli altri metodi Metodo 1: vietato, la copertura è parziale (perderesti i soci «solo palestra»). Metodo 3: lecito, ma creerebbe due tabelle in più (Tennista, Nuotatore) solo per due attributi, e obbligherebbe a collegarle ogni volta al padre. Il Metodo 2 costa due colonne con qualche NULL (Ranking vuoto per i nuotatori, Stile vuoto per i tennisti) in cambio di una sola tabella.

Esercizio 9 — Generalizzazione con associazione identificante (Metodo 2) Medio-alto

Testo Una biblioteca registra le opere (codice, titolo, anno) e le copie che ne possiede: una copia è identificata dal numero di inventario all’interno dell’opera (due opere diverse possono avere entrambe la copia n. 1) e ne interessa lo stato; una copia esiste solo se esiste l’opera da cui proviene. Le opere si dividono in libri, di cui interessano numero di pagine e genere, e riviste, di cui interessano periodicità ed editore. La biblioteca registra anche gli utenti (tessera, nome) e i prestiti: un utente può prendere in prestito più copie in momenti diversi e la stessa copia può passare a utenti diversi. Si fa l’ipotesi che la biblioteca possieda solo libri e riviste e che nessuna opera sia di entrambi i tipi: la copertura è quindi (t,e), e le due figlie hanno due attributi propri ciascuna più l’associazione identificante da ripetere. Scegliere il metodo di eliminazione più adatto, ristrutturare e tradurre in modello logico.
Opera Raccoglie Copia Prende Utente Libro Rivista Codice Titolo Anno Stato Tessera Nome NumPagine Genere Periodicita Editore (1,n) (1,1) (0,n) (0,n) Inventario (t,e)
Generalizzazione Opera con figlie Libro e Rivista, copertura (t,e); Copia è un’entità debole di Opera: il suo identificatore è formato dalla chiave dell’opera e da Inventario; Prende è l’associazione n:n tra Copia e Utente.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): la copertura è totale ed esclusiva (t,e), quindi ogni opera è un libro o una rivista e nessuna è entrambe. Il più semplice è il Metodo 2: resta la sola entità Opera con tutti gli attributi (NumPagine, Genere, Periodicita, Editore) e con l’attributo di controllo tipoOpera (libro oppure rivista); Copia resta un’unica entità debole di Opera. Il Metodo 1 sarebbe lecito, ma costringerebbe a sdoppiare Copia e a duplicare Raccoglie e Prende. Il Metodo 3 sarebbe corretto (vedi la nota qui sotto), ma con due tabelle in più per le figlie.

Nota — il Metodo 3 sarebbe comunque corretto Con il Metodo 3 il padre Opera resterebbe, Libro e Rivista avrebbero PK = FK e Copia resterebbe un’unica entità debole di Opera: soluzione corretta, al prezzo di due tabelle in più per le figlie.
⬇ Modello E-R ristrutturato (Metodo 2: eliminazione delle entità figlie)
Opera Codice tipoOpera Titolo Anno NumPagine Genere Periodicita Editore (1,n) Raccoglie (1,1) Copia Inventario Stato (0,n) Prende (0,n) Utente Tessera Nome
La generalizzazione scompare: resta la sola entità Opera con l’attributo di controllo tipoOpera (libro oppure rivista); Copia resta un’unica entità debole di Opera e Prende resta una sola associazione n:n.

Passo 2 — Traduzione delle entità: Opera, Copia e Utente diventano tabelle (Copia è debole, quindi la sua PK nasce al Passo 3 incrociando la chiave dell’opera con la chiave parziale):

-- Passo 2: padre con tipoOpera, copia debole, utente
Opera  (Codice(PK), Titolo, Anno, NumPagine, Genere, Periodicita, Editore, tipoOpera)
Utente (Tessera(PK), Nome)
Copia  (Inventario, Stato)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): l’associazione identificante Raccoglie completa la PK di Copia: PK(Codice, Inventario). L’associazione Prende è n:n: nasce un’unica tabella con PK(Tessera, Codice, Inventario); la chiave esterna verso la copia è composta (il solo Inventario non la identifica).

-- Passo 1: Metodo 2 (identificante sul padre) → una sola Opera, una sola Copia; Passo 3: identificante in PK, una sola n:n
Opera  (Codice(PK), Titolo, Anno, NumPagine, Genere, Periodicita, Editore, tipoOpera)
Utente (Tessera(PK), Nome)
Copia  (PK(Codice, Inventario), Stato, Codice(FK))
Prende (PK(Tessera, Codice, Inventario), Tessera(FK), FK(Codice, Inventario))
Perché non gli altri metodi Metodo 1: lecito con la copertura (t,e), ma costringerebbe a sdoppiare Copia in Copialibro/Copiarivista e a duplicare Raccoglie e Prende: tabelle doppie senza alcun vantaggio. Metodo 3: corretto (vedi la nota al Passo 1), ma con due tabelle in più per le figlie a fronte di soli due attributi propri ciascuna.

Esercizio 10 — Generalizzazione: meglio il Metodo 3 Difficile

Testo Un’azienda di noleggio registra i propri mezzi (targa, marca, modello), che si dividono in autovetture, di cui interessa il numero di posti, e motocicli, di cui interessa la cilindrata; esistono però anche furgoni, che restano semplici mezzi senza attributi propri (copertura (p,e)). Le autovetture — e solo quelle — possono essere noleggiate dai clienti (partitaIVA, ragioneSociale): un cliente può noleggiare più autovetture in momenti diversi e la stessa autovettura può essere noleggiata da più clienti. Analizzare la copertura, scegliere il metodo di eliminazione più adatto, ristrutturare e tradurre in modello logico.
Mezzo Cliente Autovettura Motociclo Noleggio Targa Marca Modello PartitaIVA RagioneSociale NumPosti Cilindrata (1,n) (0,n) (p,e)
Generalizzazione Mezzo con figlie Autovettura e Motociclo, copertura (p,e) (esistono furgoni); l’associazione Noleggio n:n riguarda solo Autovettura.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): la copertura è (p,e), quindi il Metodo 1 è vietato (perderesti i furgoni). Il Metodo 2 è sbagliato: porterebbe in Mezzo l’associazione Noleggio, che riguarda solo le autovetture (un furgone non può essere noleggiato, un motociclo nemmeno). La scelta guidata è il Metodo 3: Mezzo resta, e ogni figlia ha come PK la PK del padre, che è anche FK verso il padre.

⬇ Modello E-R ristrutturato (Metodo 3: associazioni 1:1 con le figlie)
Mezzo Cliente Noleggio Autovettura Motociclo Is_A Is_M Targa Marca Modello PartitaIVA RagioneSociale Targa NumPosti Cilindrata Targa (0,1) (1,1) (0,1) (1,1) (1,n) (0,n)
La generalizzazione diventa le due associazioni 1:1 Is_A (Mezzo–Autovettura) e Is_M (Mezzo–Motociclo): NumPosti e Cilindrata restano nelle figlie, Noleggio resta su Autovettura e i furgoni restano solo in Mezzo.

Passo 2 — Traduzione delle entità: il padre e le due figlie diventano tre tabelle; le figlie hanno come chiave primaria la chiave del padre, che è anche chiave esterna:

-- Passo 2: padre + figlie con PK = FK verso il padre
Mezzo       (Targa(PK), Marca, Modello)
Autovettura (Targa(PK), NumPosti, Targa(FK))
Motociclo   (Targa(PK), Cilindrata, Targa(FK))
Cliente     (PartitaIVA(PK), RagioneSociale)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): le due 1:1 sono già rappresentate dalla PK-FK delle figlie. L’associazione Noleggio è n:n fra Cliente e Autovettura: nasce una nuova tabella con PK = coppia delle PK (che sono anche due FK).

-- Passo 1: Metodo 3 (figlia con associazione propria); Passo 3: n:n → nuova tabella
Mezzo       (Targa(PK), Marca, Modello)
Autovettura (Targa(PK), NumPosti, Targa(FK))
Motociclo   (Targa(PK), Cilindrata, Targa(FK))
Cliente     (PartitaIVA(PK), RagioneSociale)
Noleggio    (PK(PartitaIVA, Targa), PartitaIVA(FK), Targa(FK))
Perché non gli altri metodi Metodo 1: vietato, la copertura è parziale (i furgoni stanno solo in Mezzo). Metodo 2: porterebbe NumPosti e Cilindrata in Mezzo, ma Noleggio riguarda solo le autovetture: la FK verso il padre non distinguerebbe un furgone da un’autovettura e servirebbe un controllo su TipoFiglia. Il Metodo 3 tiene separate le figlie e lascia Noleggio dov’è.

Gruppo 5 — Associazioni ricorsive

L'entità ricorsiva si sdoppia nei due ruoli (Regola 1), poi il rombo si traduce con i Casi del Gruppo 1 (Regola 2).

Esercizio 11 — Associazione ricorsiva 1:n (Regola 1 + Regola 2) Medio-alto

Testo Un’azienda registra i dipendenti (matricola, nome, cognome). Ogni dipendente dipende da un solo capo, tranne il direttore, che non dipende da nessuno; un capo può coordinare più dipendenti. La relazione è quindi un’associazione ricorsiva Coordina sull’entità Dipendente, con i ruoli «capo di» (0,n) e «dipende da» (0,1). Ristrutturare il modello E-R e tradurlo in modello logico.
Dipendente Matricola Nome Cognome (0,n) capo di (0,1) dipende da Coordina
Modello E-R: associazione ricorsiva Coordina sull’entità Dipendente — ruoli «capo di» (0,n) e «dipende da» (0,1).
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): l’entità ricorsiva va sostituita: il modello logico non ha il rombo ricorsivo, quindi Dipendente si sdoppia nei due ruoli, cioè si disegna due volte la stessa entità, una col ruolo «capo di» e una col ruolo «dipende da» (stessi attributi, stesso identificatore Matricola; non nasce nessuna entità nuova). Coordina diventa un’associazione binaria 1:n ((0,n) verso il ruolo «capo di», (0,1) verso il ruolo «dipende da»).

⬇ Modello E-R ristrutturato (Regola 1: sdoppiamento dell’entità ricorsiva)
Dipendente ruolo «capo di» Matricola Nome Cognome (0,n) Coordina (0,1) Dipendente ruolo «dipende da» Matricola Nome Cognome
Dopo la ristrutturazione: Dipendente compare due volte, una per ruolo (stessi attributi, stesso identificatore Matricola), e Coordina è un’associazione binaria 1:n. Il nome del ruolo servirà solo a nominare la chiave esterna: MatricolaCapo.

Passo 2 — Traduzione delle entità: i due ruoli hanno gli stessi attributi e lo stesso identificatore, quindi non diventano due tabelle: sono una sola tabella (il raddoppio della tabella duplicherebbe ogni dipendente e servirebbe un collegamento in più per risalire al capo).

-- Passo 2: i due ruoli coincidono → una sola tabella
Dipendente (Matricola(PK), Nome, Cognome)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): Coordina è ormai un’associazione binaria 1:n: la FK va nel ruolo con massimo 1 («dipende da»), cioè in Dipendente. Non esiste una seconda tabella verso cui puntare, quindi la FK punta alla PK della stessa tabella (FK auto-referenziante).

-- Passo 1: sdoppiamento dei ruoli; Passo 3: 1:n → FK auto-referenziante
Dipendente (Matricola(PK), Nome, Cognome, MatricolaCapo(FK))   -- MatricolaCapo → Dipendente.Matricola
Osserva — La direzione della FK Se avessi messo la FK nel ruolo «capo di» avresti potuto registrare un solo subordinato per capo, contraddicendo il testo: la FK va sempre nel ruolo con massimo 1, quello che punta all’altro.
NULL e direttore Il ruolo «dipende da» ha minimo 0 proprio perché esiste il direttore: MatricolaCapo è l’unico attributo che può valere NULL. Se il testo dicesse «ogni dipendente dipende da un capo», il minimo diventerebbe 1, la colonna sarebbe not null e il direttore non potrebbe più essere registrato come dipendente.

Esercizio 12 — Associazione ricorsiva n:n Difficile

Testo Un ateneo registra gli insegnamenti (codice, denominazione). Tra insegnamenti esiste la propedeuticità: un insegnamento precede (0,n) più insegnamenti e segue (0,n) più insegnamenti. Ristrutturare il modello E-R e tradurlo in modello logico.
Insegnamento Codice Denominazione (0,n) precede (0,n) segue Propedeuticità
Modello E-R: associazione ricorsiva Propedeuticità sull’entità Insegnamento — ruoli «precede» (0,n) e «segue» (0,n).
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): l’entità ricorsiva Insegnamento si sdoppia nei due ruoli: si disegna due volte la stessa entità, una col ruolo «precede» e una col ruolo «segue» (stessi attributi, stesso identificatore Codice; non nasce nessuna entità nuova), e Propedeuticità diventa un’associazione binaria n:n. I nomi dei ruoli serviranno solo a nominare le due colonne della tabella dell’associazione (CodicePrecedente, CodiceSuccessivo).

⬇ Modello E-R ristrutturato (Regola 1: sdoppiamento dell’entità ricorsiva)
Insegnamento ruolo «precede» Codice Denominazione (0,n) Propedeuticità (0,n) Insegnamento ruolo «segue» Codice Denominazione
Dopo la ristrutturazione: Insegnamento compare due volte, una per ruolo (stessi attributi, stesso identificatore Codice), e Propedeuticità è un’associazione binaria n:n. I nomi dei ruoli serviranno solo a nominare le due colonne della tabella dell’associazione.

Passo 2 — Traduzione delle entità: i due ruoli sono due viste della stessa entità: la tabella è una sola, quella dell’entità Insegnamento.

-- Passo 2: i due ruoli sono due viste della stessa entità → una sola tabella
Insegnamento (Codice(PK), Denominazione)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): l’associazione è n:n, quindi serve una nuova tabella (Caso 2) con PK formata dalla coppia dei ruoli e con due FK che puntano entrambe alla stessa tabella, una per ruolo.

-- Passo 3: n:n → nuova tabella, PK coppia dei ruoli, due FK sulla stessa tabella
Insegnamento   (Codice(PK), Denominazione)
Propedeuticita (PK(CodicePrecedente, CodiceSuccessivo), CodicePrecedente(FK), CodiceSuccessivo(FK))
-- entrambe le FK → Insegnamento.Codice
Perché due FK e non una Entrambi i ruoli hanno massimo n: con una sola FK un insegnamento potrebbe avere un solo precedente (o seguire un solo insegnamento), contraddicendo il testo. La coppia della PK è ordinata: (A, B) significa «A precede B» ed è diversa da (B, A).
Cosa la chiave non impedisce La coppia impedisce di ripetere lo stesso legame, ma non impedisce che un insegnamento preceda se stesso né che si formino cicli (A precede B e B precede A): sono vincoli in più, che il modello E-R non esprime.

Gruppo 6 — Associazione ternaria (approfondimento)

Costrutto fuori programma per l'ITT: la ternaria si riconduce al Caso 2 con la PK formata dalle tre chiavi.

Esercizio 13 — Caso complesso: associazione ternaria + attributo multivalore Difficile

Testo Un’azienda di forniture gestisce dipartimenti (nomeDip, piano), prodotti (idProdotto, descrizione) e venditori (pIVA, ragioneSociale). Un venditore fornisce un prodotto a un dipartimento; per ogni fornitura interessa la quantità. Ogni dipartimento inoltre ha uno o più telefoni (attributo multivalore). Ristrutturare il modello E-R dove necessario e tradurre in modello logico.
Dipartimento Piano NomeDip Telefono (1,n) (0,n) Fornitura Quantità (0,n) Prodotto IdProdotto Descrizione (0,n) Venditore PIVA RagioneSociale
Associazione ternaria Fornitura (con attributo quantità) tra Dipartimento, Prodotto e Venditore; telefono è multivalore su Dipartimento.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): si elimina il multivalore telefono (1,n) trasformandolo nell’entità Telefono collegata a Dipartimento dall’associazione 1:n Possiede.

⬇ Modello E-R ristrutturato (Regola 1: multivalore → entità + 1:n)
Dipartimento Piano NomeDip (1,n) Possiede (1,1) Telefono Numero (0,n) Fornitura Quantità (0,n) Prodotto IdProdotto Descrizione (0,n) Venditore PIVA RagioneSociale
Telefono non è più multivalore (doppio cerchio) ma entità con identificatore Numero (pallino pieno), collegata a Dipartimento da Possiede 1:n; Fornitura ternaria resta invariata.

Passo 2 — Traduzione delle entità: le entità ristrutturate diventano tabelle (ancora senza FK da associazioni; le tabelle Fornitura e Possiede non esistono ancora):

-- Passo 2: senza FK, senza Fornitura
Dipartimento (NomeDip(PK), Piano)
Prodotto     (IdProdotto(PK), Descrizione)
Venditore    (PIVA(PK), RagioneSociale)
Telefono     (Numero(PK))

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione ternaria Fornitura viene rappresentata con una nuova tabella con PK formata dalla terna delle PK più Quantita; l’associazione Possiede 1:n viene rappresentata con una FK aggiunta in Telefono.

-- Passo 1: telefono → Telefono + Possiede; Passo 3: ternaria → nuova tabella terna
Dipartimento (NomeDip(PK), Piano)
Prodotto     (IdProdotto(PK), Descrizione)
Venditore    (PIVA(PK), RagioneSociale)
Fornitura    (PK(NomeDip, IdProdotto, PIVA), Quantita, NomeDip(FK), IdProdotto(FK), PIVA(FK))
Telefono     (Numero(PK), nomeDip(FK))
Nota L’associazione ternaria non ha una regola dedicata: la si riconduce al Caso 2 (n:n) generalizzando l’idea della “nuova tabella” con chiave primaria composta dalle chiavi delle entità collegate.

Gruppo 7 — Esercizi riepilogativi: più costrutti insieme

Regola 1 e Regola 2 nello stesso esercizio, come in una verifica completa.

Esercizio 14 — Attributo composto, multivalore, 1:n e n:n insieme Difficile

Testo Un ateneo registra gli studenti (matricola, nome, cognome); di ogni studente interessa l’indirizzo, scomponibile in via, numero civico e città, e uno o più numeri di telefono. Gli studenti sostengono esami sui corsi (idCorso, titolo) ottenendo un voto in una data; ogni corso è tenuto da un solo docente (idDocente, nome), mentre un docente può tenere più corsi. Tradurre il modello in modello logico, ristrutturando dove necessario.
Studente Matricola Nome Cognome Indirizzo via numero civico città telefono (1,n) (0,n) Sostiene Voto Data (0,n) Corso IdCorso Titolo (1,1) Tiene (0,n) Docente IdDocente Nome
Modello E-R: Studente con Indirizzo composto (via, numero civico, città) e telefono multivalore (1,n); Sostiene n:n con Voto e Data; Tiene 1:n tra Corso e Docente.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): Indirizzo composto → colonne Via, NumeroCivico, Citta; telefono multivalore (1,n) → entità Telefono + associazione 1:n Possiede. Nessuna generalizzazione.

⬇ Modello E-R ristrutturato (Regola 1: composto → colonne, multivalore → entità + 1:n)
Studente Matricola Nome Cognome Via NumCivico Città (1,n) Possiede (1,1) Telefono Numero (0,n) Sostiene Voto Data (0,n) Corso IdCorso Titolo (1,1) Tiene (0,n) Docente IdDocente Nome
Indirizzo composto (pallino grande) sostituito da Via, NumCivico, Città (pallini vuoti); telefono multivalore (doppio cerchio) diventato entità Telefono con Possiede 1:n; Sostiene e Tiene invariati.

Passo 2 — Traduzione delle entità: le entità ristrutturate diventano tabelle (ancora senza FK; le tabelle Sostiene e le FK di Tiene/Possiede nascono al Passo 3):

-- Passo 2: senza FK, senza Sostiene
Studente (Matricola(PK), Nome, Cognome, Via, NumeroCivico, Citta)
Telefono (Numero(PK))
Docente  (IdDocente(PK), Nome)
Corso    (IdCorso(PK), Titolo)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico Tiene 1:n viene rappresentata con una FK aggiunta idDocente in Corso; Sostiene n:n viene rappresentata con una nuova tabella con PK(Matricola, IdCorso) più Voto, Data; Possiede 1:n viene rappresentata con FK aggiunta in Telefono.

-- Passo 1: composto → colonne, multivalore → Telefono; Passo 3: 1:n → FK, n:n → nuova tabella
Studente   (Matricola(PK), Nome, Cognome, Via, NumeroCivico, Citta)
Telefono   (Numero(PK), matricola(FK))
Docente    (IdDocente(PK), Nome)
Corso      (IdCorso(PK), Titolo, idDocente(FK))
Sostiene   (PK(Matricola, IdCorso), Voto, Data, Matricola(FK), IdCorso(FK))
Nota sull’interpretazione del modello. Il modello E-R presentato, con l’associazione Sostiene n:n e gli attributi Voto e Data, è coerente solo nell’ipotesi in cui si registrino esclusivamente gli esami effettivamente superati: per ogni coppia Studente–Corso si registra quindi un solo esame. Se si vogliono registrare anche gli esami non superati, la stessa coppia può ripetersi più volte, con date e voti diversi. In tal caso si deve sostituire l’associazione Sostiene con l’entità Esame, collegata a Studente con un’associazione 1:n e a Corso con un’associazione 1:n; data e voto diventano attributi dell’entità Esame, che avrà un proprio identificatore.

Esercizio 15 — Generalizzazione, entità debole, composito e 1:n insieme Molto difficile

Testo Un ospedale registra i pazienti (codSanitario, nome, cognome), di ciascuno dei quali interessa l’indirizzo, scomponibile in via, numero civico e città. Ogni paziente può effettuare più ricoveri; un ricovero è identificato dal numero progressivo solo all’interno del paziente e di esso interessa la dataIngresso e la dataDimissione. Il personale sanitario (codice fiscale, nome, cognome, telefono) si distingue in medici (con specializzazione) e infermieri (con piano); esistono però anche tecnici di laboratorio e amministrativi, che non sono né medici né infermieri, e nessuno è entrambe le cose: la copertura è (p,e). Ogni ricovero è seguito da un solo medico, mentre un medico può seguire più ricoveri. Analizzare la copertura della generalizzazione, scegliere il metodo più adatto, ristrutturare e tradurre in modello logico.
Paziente CodSanitario Nome Cognome Indirizzo via numero civico città (1,n) Effettua (1,1) Ricovero NumRicovero DataIngresso DataDimissione (1,1) Segue (0,n) CF Nome Cognome telefono Personale (p,e) Medico specializzazione Infermiere piano
Modello E-R: Paziente con Indirizzo composto; Ricovero entità debole (NumRicovero ha pallino vuoto: è chiave parziale; la staffa su Effettua porta il pallino pieno); generalizzazione Personale → Medico/Infermiere (copertura (p,e)); Segue 1:n tra Medico e Ricovero.
Osserva — Perché NumRicovero non è identificatore Il numero di ricovero è progressivo solo all’interno dello stesso paziente: il primo ricovero di Mario è il n. 1 e il primo ricovero di Anna è di nuovo il n. 1. Quindi sì, possono esistere più ricoveri con lo stesso numero, purché appartengano a pazienti diversi. Per questo Ricovero è un’entità debole: NumRicovero da solo non identifica (pallino vuoto = chiave parziale); l’identificatore completo è la coppia paziente + numero.
Mostra svolgimento e soluzione

Passo 1 — Ristrutturazione (applicando la Regola 1): Indirizzo composto → colonne Via, NumeroCivico, Citta; generalizzazione Personale con copertura (p,e) → il Metodo 1 è vietato (perderesti tecnici e amministrativi, che stanno solo nel padre). Resta da scegliere tra Metodo 2 e Metodo 3, ma vale la regola della teoria: il Metodo 2 non si può usare quando un’associazione riguarda una sola figlia — e qui Segue riguarda solo Medico. Si applica quindi il Metodo 3: Personale resta, Medico e Infermiere hanno PK = FK verso il padre e Segue resta collegata a Medico. Ricovero resta debole.

⬇ Modello E-R ristrutturato (Regola 1: composto → colonne, Metodo 3: associazioni 1:1)
Paziente CodSanitario Nome Cognome Via NumCivico Città (1,n) Effettua (1,1) Ricovero NumRicovero DataIngresso DataDimissione (1,1) Segue (0,n) Personale CF Nome Cognome Telefono Is_M Is_I (0,1) (1,1) (0,1) (1,1) Medico Infermiere CF Specializzazione CF Piano
Indirizzo appiattito in colonne; generalizzazione eliminata con Metodo 3: Personale resta, Medico e Infermiere sono collegati al padre dalle 1:1 Is_M e Is_I e hanno PK = FK; Ricovero resta debole (barra + pallino pieno su Effettua); Segue ora punta a Medico.

Passo 2 — Traduzione delle entità: le entità ristrutturate diventano tabelle (la debole Ricovero è ancora senza le FK identificante e di Segue, che completano la tabella al Passo 3):

-- Passo 2: senza FK di Effettua/Segue
Paziente   (CodSanitario(PK), Nome, Cognome, Via, NumeroCivico, Citta)
Personale  (CF(PK), Nome, Cognome, Telefono)
Medico     (CF(PK), Specializzazione, CF(FK))
Infermiere (CF(PK), Piano, CF(FK))
Ricovero   (NumRicovero, DataIngresso, DataDimissione)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione identificante Effettua viene rappresentata con la FK aggiunta CodPaziente in Ricovero (la PK diventa PK(CodPaziente, NumRicovero): il numero da solo non basta, perché due pazienti possono avere entrambi il ricovero n. 1); l’associazione Segue 1:n viene rappresentata con una FK aggiunta CFMedico in Ricovero, che punta a Medico.CF e non a Personale: solo i medici possono seguire un ricovero.

-- Passo 1: composto → colonne, Metodo 3; Passo 3: Effettua in PK, Segue → FK verso Medico
Paziente   (CodSanitario(PK), Nome, Cognome, Via, NumeroCivico, Citta)
Personale  (CF(PK), Nome, Cognome, Telefono)
Medico     (CF(PK), Specializzazione, CF(FK))
Infermiere (CF(PK), Piano, CF(FK))
Ricovero   (PK(CodPaziente, NumRicovero), DataIngresso, DataDimissione, CodPaziente(FK), CFMedico(FK))
Nota Con il Metodo 3 (scelto al Passo 1 perché la copertura è (p,e) e Segue riguarda solo Medico) non servono né un attributo di controllo né i NULL sulle specializzazioni.