Eserciziario interattivo

Dal modello E-R al modello logico

Quindici esercizi guidati con modello E-R, svolgimento commentato e verifica automatica della tua traduzione. Scrivi lo schema logico e premi «Verifica»: il correttore controlla tabelle, chiavi primarie, chiavi esterne e l’ordine degli attributi.

Come si traduce — promemoria

La traduzione avviene in 3 passi ordinati. L’ordine conta: prima si ristruttura, poi si traducono entità e associazioni.

  1. Passo 1 — Ristrutturazione (Regola 1): si eliminano i costrutti che il modello logico non rappresenta: attributo composto (→ colonne), attributo multivalore (→ nuova entità + associazione 1:n), generalizzazione. La generalizzazione si risolve in uno dei tre metodi della tabella qui sotto.
  2. Passo 2 — Entità → tabelle: ogni entità diventa una tabella con i propri attributi; l’identificatore diventa la chiave primaria (PK). L’entità debole ha come PK PK dell’entità forte + chiave parziale.
  3. Passo 3 — Associazioni (Regola 2): 1:n → FK nella tabella dal lato con massimo 1; n:n → nuova tabella con PK = coppia delle PK; 1:1 → fusione oppure FK nella tabella con meno valori nulli (spesso UNIQUE); identificante → la FK è già dentro la PK composta della debole.

Come risolvere una generalizzazione: i tre metodi

MetodoChe cosa faSceglilo quando…In cambio accetti…
1 — Elimina il padre Il padre sparisce; ogni figlia diventa una tabella che ripete gli attributi comuni e le associazioni del padre, con l’identificatore rinominato (es. CodiceA / CodiceV). Copertura totale (è obbligatorio); meglio se anche esclusiva. Figlie con molti attributi propri. Associazioni del padre duplicate verso ogni figlia; le query «su tutti i padri» diventano un’unione.
2 — Elimina le figlie Le figlie confluiscono nel padre: attributi specifici e associazioni comuni in un’unica tabella, più un attributo di controllo che dice a quale figlia appartiene l’istanza (TipoFiglia; nel manuale compare anche con nomi concreti come razza o ruolo). Sempre possibile. Meglio se la copertura è parziale e/o sovrapposta, o se le figlie sono «povere»: pochi attributi specifici e nessuna associazione propria. Molti valori NULL: gli attributi di una figlia restano vuoti sulle istanze delle altre.
3 — Associazioni 1:1 La generalizzazione diventa un’associazione 1:1 tra padre e ciascuna figlia (es. Is_T, Is_C): il padre resta, e ogni figlia ha PK = PK del padre, che è anche FK, es. Medico (CodiceFiscale(PK), Specializzazione, CodiceFiscale(FK)). Sempre possibile. Figlie con associazioni proprie da non mescolare sul padre (es. solo i medici seguono i ricoveri); vuoi evitare sia i nulli del Metodo 2 sia le duplicazioni del Metodo 1. Più tabelle e più join per rileggere una figlia insieme al padre.
Come si sceglie, in ordine: 1) guarda la copertura scritta nel testo (se è parziale, il Metodo 1 è vietato: perderesti chi sta solo nel padre); 2) le figlie hanno vita propria? (attributi specifici numerosi e/o associazioni proprie → 1 o 3; figlie «povere» → 2); 3) che cosa vuoi evitare nello schema logico? (nulli → non il 2; associazioni del padre duplicate e query a unione → non l’1; troppe tabelle e join → non il 3). Motiva sempre la scelta in una riga.
Notazione usata in tutto l’eserciziario. Le tabelle si scrivono Nome (Attributo(PK), Altro, ChiaveEsterna(FK)). La chiave primaria si può indicare in due modi equivalenti: Codice(PK) oppure PK(Codice); per la chiave esterna Codice(FK) oppure FK(Codice). Una chiave esterna composta si scrive FK(Codice, NumInventario). La chiave esterna è sempre l’ultimo attributo elencato: prima la PK, poi gli attributi propri, infine la/e FK.
Come rispondere. Una tabella per riga, nella forma qui sopra. Il correttore non bada a spazi, maiuscole o ordine delle righe; controlla invece il contenuto: quali tabelle esistono, chi è PK, chi è FK, quali attributi sono presenti e che le FK stiano in coda. Per le tabelle introdotte dalla traduzione (associazioni n:n, attributi multivalore, tabelle derivate) il nome è libero: la tabella viene riconosciuta dalla struttura (PK, FK, attributi), purché gli attributi siano quelli giusti.

Esercizi

Filtra

Esercizio 1 — Tre entità: un n:n con attributo e un 1:nBase

3 entitàn:n con attributo1:n
TestoUna biblioteca registra i libri (codice, titolo, anno) e gli autori (idAutore, nome, cognome). Un autore può scrivere più libri e un libro può avere più autori; di ogni collaborazione la biblioteca registra il ruolo (per esempio «principale», «traduttore»). Ogni libro è pubblicato da una sola casa editrice (partitaIVA, ragioneSociale), mentre una casa editrice pubblica molti libri. Tradurre il modello in modello logico.
Autore Libro CasaEditrice Scrive Pubblica idAutore Nome Cognome Codice Titolo Anno PartitaIVA RagioneSociale Ruolo (0,n) (0,n) (1,1) (1,n)
Modello E-R dell’esercizio 1.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Nessun attributo composto, multivalore o generalizzazione: il modello E-R è già ristrutturato.
  2. Tre entità → tre tabelle: Autore, Libro, CasaEditrice, ciascuna con il proprio identificatore come PK.
  3. L’associazione Pubblica è 1:n: la FK va nella tabella dal lato con massimo 1, cioè Libro (accanto a Libro c’è (1,1) verso la casa editrice).
  4. L’associazione Scrive è n:n con attributo proprio: nasce una nuova tabella con PK = coppia delle PK e l’attributo ruolo.
Soluzione
Autore  (idAutore(PK), Nome, Cognome)
CasaEditrice  (PartitaIVA(PK), RagioneSociale)
Libro  (Codice(PK), Titolo, Anno, PartitaIVA(FK))
Scrive  (PK(idAutore, Codice), Ruolo, idAutore(FK), Codice(FK))
Da scrivere così
Autore (idAutore(PK), Nome, Cognome)
CasaEditrice (PartitaIVA(PK), RagioneSociale)
Libro (Codice(PK), Titolo, Anno, PartitaIVA(FK))
Scrive (PK(idAutore, Codice), Ruolo, idAutore(FK), Codice(FK))

Esercizio 2 — Due entità con un attributo multivaloreBase

multivalore1:n
TestoUn’azienda registra i dipendenti (matricola, nome, cognome) e i reparti (codiceReparto, nome, sede). Ogni dipendente lavora in un solo reparto e un reparto ha molti dipendenti. Di ogni dipendente l’azienda registra uno o più numeri di telefono. Tradurre il modello in modello logico, ristrutturando dove necessario.
Dipendente Reparto Lavora Matricola Nome Cognome telefono (1,n) CodiceReparto Nome Sede (1,1) (1,n)
Modello E-R dell’esercizio 2.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — l’attributo telefono è multivalore: diventa una nuova entità Telefono collegata a Dipendente dall’associazione 1:n Possiede.
  2. Passo 2 — Dipendente e Reparto diventano tabelle con il proprio identificatore come PK.
  3. Passo 3 — l’associazione Lavora 1:n mette la FK in Dipendente (accanto a Dipendente c’è (1,1)); l’associazione Possiede 1:n mette la FK in Telefono.
Soluzione
Reparto  (CodiceReparto(PK), Nome, Sede)
Dipendente  (Matricola(PK), Nome, Cognome, CodiceReparto(FK))
Telefono  (Numero(PK), Matricola(FK))
Da scrivere così
Reparto (CodiceReparto(PK), Nome, Sede)
Dipendente (Matricola(PK), Nome, Cognome, CodiceReparto(FK))
Telefono (Numero(PK), Matricola(FK))

Esercizio 3 — Generalizzazione: entità figlieMedia

entità figliegeneralizzazione1:n
TestoUn’officina registra i veicoli (targa, marca, modello). I veicoli si dividono in autovetture, di cui interessa il numero di posti, e motocicli, di cui interessa la cilindrata: ogni veicolo è o un’autovettura o un motociclo (copertura totale ed esclusiva). Ogni veicolo può essere sottoposto a più interventi (codice, descrizione, costo); ogni intervento riguarda un solo veicolo. Tradurre il modello in modello logico applicando il Metodo 2 — eliminazione delle entità figlie.
Veicolo Autovettura Motociclo Intervento Eseguito Targa Marca Modello NumPosti Cilindrata Codice Descrizione Costo (0,n) (1,1) (t,e)
Modello E-R dell’esercizio 3.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è totale ed esclusiva (t,e) e le figlie hanno pochi attributi propri: la scelta guidata è il Metodo 2 (figlie incorporate nel padre + attributo di controllo TipoFiglia). Con il Metodo 1 il padre sparirebbe e ogni figlia ripeterebbe i suoi attributi; con il Metodo 3 resterebbero Veicolo più due figlie con PK(Targa) che è anche FK. Trovi tutte e tre le soluzioni.
  2. Passo 2 — Veicolo e Intervento diventano tabelle; l’identificatore resta la PK.
  3. Passo 3 — l’associazione Eseguito 1:n mette la FK in Intervento (accanto a Intervento c’è (1,1)).
  4. Con il Metodo 1 si ottengono due tabelle figlie con gli attributi del padre ripetuti e, in Intervento, due FK nullable; con il Metodo 2 una sola tabella ma colonne con molti NULL. La scelta guidata resta il Metodo 2, perché le figlie hanno pochissimi attributi propri.
Metodo 2 — Eliminazione delle entità figlie (scelta guidata)
Veicolo  (Targa(PK), Marca, Modello, NumPosti, Cilindrata, TipoFiglia)
Intervento  (Codice(PK), Descrizione, Costo, Targa(FK))
Metodo 1 — Eliminazione dell’entità padre (copertura totale)
Autovettura  (Targa(PK), Marca, Modello, NumPosti)
Motociclo  (Targa(PK), Marca, Modello, Cilindrata)
Intervento  (Codice(PK), Descrizione, Costo, TargaAutovettura(FK), TargaMotociclo(FK))
Metodo 3 — Associazioni 1:1
Veicolo  (Targa(PK), Marca, Modello)
Autovettura  (Targa(PK), NumPosti, Targa(FK))
Motociclo  (Targa(PK), Cilindrata, Targa(FK))
Intervento  (Codice(PK), Descrizione, Costo, Targa(FK))
Da scrivere così
Veicolo (Targa(PK), Marca, Modello, NumPosti, Cilindrata, TipoFiglia)
Intervento (Codice(PK), Descrizione, Costo, Targa(FK))

Esercizio 4 — Entità deboleMedia

entità deboleidentificante1:n
TestoUn’agenzia commerciale registra i clienti (partitaIVA, ragioneSociale) e gli agenti (matricola, nome, cognome). Ogni cliente è seguito da un solo agente e un agente segue più clienti. Di ogni cliente l’agenzia registra gli ordini: un ordine ha un numero progressivo all’interno del cliente, una data e un importo. Ordini di clienti diversi possono avere lo stesso numero progressivo. Tradurre il modello in modello logico.
Cliente Agente Ordine Segue Effettua PartitaIVA RagioneSociale Matricola Nome Cognome NumProgressivo Data Importo (1,1) (0,n) (0,n) (1,1)
Modello E-R dell’esercizio 4.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — niente da ristrutturare: non ci sono attributi composti, multivalore o generalizzazioni.
  2. Passo 2 — Cliente e Agente sono entità forti. Ordine è un’entità debole: da sola non ha un identificatore, perché NumProgressivo è solo una chiave parziale.
  3. Passo 3 — l’associazione identificante Effettua non crea una tabella: la PK di Ordine diventa PK(PartitaIVA, NumProgressivo) = PK dell’entità forte + chiave parziale.
  4. L’associazione Segue 1:n mette la FK in Cliente (accanto a Cliente c’è (1,1) verso l’agente).
Soluzione
Agente  (Matricola(PK), Nome, Cognome)
Cliente  (PartitaIVA(PK), RagioneSociale, Matricola(FK))
Ordine  (PK(PartitaIVA, NumProgressivo), Data, Importo, PartitaIVA(FK))
Da scrivere così
Agente (Matricola(PK), Nome, Cognome)
Cliente (PartitaIVA(PK), RagioneSociale, Matricola(FK))
Ordine (PK(PartitaIVA, NumProgressivo), Data, Importo, PartitaIVA(FK))

Esercizio 5 — Entità figlie e entità deboleAlta

entità figlieentità deboleentrambi
TestoUn ospedale registra il personale (codiceFiscale, nome, cognome) e i pazienti (codiceSanitario, nome, cognome). Il personale si divide in medici, di cui interessa la specializzazione, e infermieri, di cui interessa il piano: ogni persona è o medico o infermiere (copertura totale ed esclusiva). I ricoveri sono identificati dal numero progressivo all’interno del paziente e hanno data di ingresso e data di dimissione. Ogni ricovero è seguito da un solo medico e un medico può seguire più ricoveri. Tradurre il modello in modello logico applicando il Metodo 1 — eliminazione dell’entità padre.
Personale Medico Infermiere Paziente Ricovero Effettua Segue CodiceFiscale Nome Cognome Specializzazione Piano CodiceSanitario Nome Cognome NumProgressivo DataIngresso DataDimissione (0,n) (1,1) (0,n) (1,1) (t,e)
Modello E-R dell’esercizio 5.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è totale ed esclusiva (t,e): ogni persona è necessariamente un medico o un infermiere, quindi il Metodo 1 (eliminazione dell’entità padre) è lecito ed è quello richiesto dal testo. Personale sparisce e ogni figlia diventa una tabella che ripete gli attributi comuni, con l’identificatore rinominato (CodiceFiscaleMedico / CodiceFiscaleInfermiere). Restano possibili anche il Metodo 2 (figlie incorporate nel padre + TipoFiglia) e il Metodo 3 (associazioni 1:1) — trovi tutte e tre le soluzioni.
  2. Passo 2 — con il Metodo 1 le tabelle sono Medico, Infermiere e Paziente (con il Metodo 2 resterebbero nel padre Personale); Ricovero è un’entità debole, quindi il suo scheletro di PK è la chiave parziale NumProgressivo più la PK di Paziente.
  3. Passo 3 — l’associazione identificante Effettua non crea una tabella: la PK di Ricovero diventa PK(CodiceSanitario, NumProgressivo).
  4. L’associazione Segue 1:n mette la FK in Ricovero: con il Metodo 1 punta a Medico (CodiceFiscaleMedico(FK)); con il Metodo 2 punta al padre Personale (il vincolo «deve essere un medico» si esprime con un controllo su TipoFiglia); con il Metodo 3 punta a Medico.
Metodo 1 — Eliminazione dell’entità padre (scelta guidata)
Medico  (CodiceFiscaleMedico(PK), Nome, Cognome, Specializzazione)
Infermiere  (CodiceFiscaleInfermiere(PK), Nome, Cognome, Piano)
Paziente  (CodiceSanitario(PK), Nome, Cognome)
Ricovero  (PK(CodiceSanitario, NumProgressivo), DataIngresso, DataDimissione, CodiceSanitario(FK), CodiceFiscaleMedico(FK))
Metodo 2 — Eliminazione delle entità figlie
Personale  (CodiceFiscale(PK), Nome, Cognome, Specializzazione, Piano, TipoFiglia)
Paziente  (CodiceSanitario(PK), Nome, Cognome)
Ricovero  (PK(CodiceSanitario, NumProgressivo), DataIngresso, DataDimissione, CodiceSanitario(FK), CodiceFiscale(FK))
Metodo 3 — Associazioni 1:1
Personale  (CodiceFiscale(PK), Nome, Cognome)
Medico  (CodiceFiscale(PK), Specializzazione, CodiceFiscale(FK))
Infermiere  (CodiceFiscale(PK), Piano, CodiceFiscale(FK))
Paziente  (CodiceSanitario(PK), Nome, Cognome)
Ricovero  (PK(CodiceSanitario, NumProgressivo), DataIngresso, DataDimissione, CodiceSanitario(FK), CodiceFiscale(FK))
Da scrivere così
Medico (CodiceFiscaleMedico(PK), Nome, Cognome, Specializzazione)
Infermiere (CodiceFiscaleInfermiere(PK), Nome, Cognome, Piano)
Paziente (CodiceSanitario(PK), Nome, Cognome)
Ricovero (PK(CodiceSanitario, NumProgressivo), DataIngresso, DataDimissione, CodiceSanitario(FK), CodiceFiscaleMedico(FK))

Esercizio 6 — Figlie, entità debole e associazione n:n su chiave compostaAlta

entità figlieentità deboleentrambi3 entitàn:n
TestoUna biblioteca universitaria registra le opere (codice, titolo). Le opere sono di due tipi: i libri, di cui interessa il numero di pagine, e le riviste, di cui interessa la periodicità (copertura totale ed esclusiva). Di ogni opera la biblioteca possiede una o più copie, identificate dal numero di inventario all’interno dell’opera, con stato e collocazione. Gli utenti (numeroTessera, nome, cognome) prendono in prestito le copie: la stessa copia può essere prestata a utenti diversi in momenti diversi e un utente può prendere in prestito più copie; di ogni prestito interessano la data e la durata. Tradurre il modello in modello logico applicando il Metodo 2 — eliminazione delle entità figlie.
Opera Libro Rivista Copia Utente Possiede Prestito Codice Titolo NumPagine Periodicità NumInventario Stato Collocazione NumTessera Nome Cognome Data Durata (1,n) (1,1) (0,n) (0,n) (t,e)
Modello E-R dell’esercizio 6.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è totale ed esclusiva (t,e), ma le figlie Libro e Rivista hanno pochi attributi propri e nessuna associazione propria: la scelta guidata è il Metodo 2 (figlie incorporate in Opera con NumPagine, Periodicità e l’attributo di controllo TipoFiglia). Sotto trovi anche le soluzioni con il Metodo 1 e con il Metodo 3.
  2. Passo 2 — Opera e Utente sono entità forti; Copia è un’entità debole di Opera (chiave parziale NumInventario), quindi la sua PK è PK(Codice, NumInventario) grazie all’associazione identificante Possiede.
  3. Passo 3 — il prestito è un’associazione n:n tra Utente e Copia: nasce la tabella Prestito con PK = chiavi delle due entità e gli attributi dell’associazione (Data, Durata).
  4. La chiave esterna verso Copia è composta: servono entrambe le colonne, scritte insieme come FK(Codice, NumInventario).
  5. Con il Metodo 1 il padre Opera sparisce e le copie vanno duplicate per ciascuna figlia: per lo stesso motivo anche il prestito si sdoppia in PrestitoLibro e PrestitoRivista, perché la chiave della copia cambia nome (CodiceLibro / CodiceRivista). Con il Metodo 3 il padre resta e ogni figlia ha PK(Codice) che è anche FK verso Opera. La scelta guidata resta il Metodo 2, che evita sia le duplicazioni sia le tabelle in più.
Metodo 2 — Eliminazione delle entità figlie (scelta guidata)
Opera  (Codice(PK), Titolo, NumPagine, Periodicità, TipoFiglia)
Utente  (NumTessera(PK), Nome, Cognome)
Copia  (PK(Codice, NumInventario), Stato, Collocazione, Codice(FK))
Prestito  (PK(NumTessera, Codice, NumInventario), Data, Durata, NumTessera(FK), FK(Codice, NumInventario))
Metodo 1 — Eliminazione dell’entità padre (copertura (t,e))
Libro  (Codice(PK), Titolo, NumPagine)
Rivista  (Codice(PK), Titolo, Periodicità)
Utente  (NumTessera(PK), Nome, Cognome)
CopiaLibro  (PK(CodiceLibro, NumInventario), Stato, Collocazione, CodiceLibro(FK))
CopiaRivista  (PK(CodiceRivista, NumInventario), Stato, Collocazione, CodiceRivista(FK))
PrestitoLibro  (PK(NumTessera, CodiceLibro, NumInventario), Data, Durata, NumTessera(FK), FK(CodiceLibro, NumInventario))
PrestitoRivista  (PK(NumTessera, CodiceRivista, NumInventario), Data, Durata, NumTessera(FK), FK(CodiceRivista, NumInventario))
Metodo 3 — Associazioni 1:1
Opera  (Codice(PK), Titolo)
Libro  (Codice(PK), NumPagine, Codice(FK))
Rivista  (Codice(PK), Periodicità, Codice(FK))
Utente  (NumTessera(PK), Nome, Cognome)
Copia  (PK(Codice, NumInventario), Stato, Collocazione, Codice(FK))
Prestito  (PK(NumTessera, Codice, NumInventario), Data, Durata, NumTessera(FK), FK(Codice, NumInventario))
Da scrivere così
Opera (Codice(PK), Titolo, NumPagine, Periodicità, TipoFiglia)
Utente (NumTessera(PK), Nome, Cognome)
Copia (PK(Codice, NumInventario), Stato, Collocazione, Codice(FK))
Prestito (PK(NumTessera, Codice, NumInventario), Data, Durata, NumTessera(FK), FK(Codice, NumInventario))

Esercizio 7 — Tre entità, n:n con attributo e 1:nMedia

3 entitàn:n con attributo1:n
TestoUn negozio di strumenti musicali registra i musicisti (codiceFiscale, nome, cognome) e gli strumenti (codice, nome, prezzo). Un musicista può suonare più strumenti e uno strumento può essere suonato da più musicisti; di ogni abbinamento il negozio registra gli anni di esperienza del musicista su quello strumento. Ogni strumento è prodotto da una sola marca (partitaIVA, nome), mentre una marca produce molti strumenti. Tradurre il modello in modello logico.
Musicista Strumento Marca Suona Produce CodFiscale Nome Cognome Codice Nome Prezzo PartitaIVA Nome AnniEsperienza (0,n) (0,n) (1,1) (1,n)
Modello E-R dell’esercizio 7.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — nessun attributo composto, multivalore o generalizzazione: il modello E-R è già ristrutturato.
  2. Passo 2 — tre entità → tre tabelle: Musicista, Strumento, Marca, ciascuna con il proprio identificatore come PK.
  3. Passo 3 — l’associazione Produce è 1:n: la FK va in Strumento, la tabella dal lato con massimo 1 (accanto a Strumento c’è (1,1) verso la marca).
  4. Passo 4 — l’associazione Suona è n:n con attributo proprio: nasce una nuova tabella con PK = coppia delle PK e l’attributo AnniEsperienza.
Soluzione
Musicista  (CodFiscale(PK), Nome, Cognome)
Marca  (PartitaIVA(PK), Nome)
Strumento  (Codice(PK), Nome, Prezzo, PartitaIVA(FK))
Suona  (PK(CodFiscale, Codice), AnniEsperienza, CodFiscale(FK), Codice(FK))
Da scrivere così
Musicista (CodFiscale(PK), Nome, Cognome)
Marca (PartitaIVA(PK), Nome)
Strumento (Codice(PK), Nome, Prezzo, PartitaIVA(FK))
Suona (PK(CodFiscale, Codice), AnniEsperienza, CodFiscale(FK), Codice(FK))

Esercizio 8 — Attributo multivaloreBase

multivaloren:n1:n
TestoUna pizzeria registra i propri pizzaioli (matricola, nome, cognome) e le pizze (codPizza, nome, prezzo). Ogni pizza è preparata da un solo pizzaiolo e un pizzaiolo prepara più pizze. Di ogni pizza interessano uno o più ingredienti (per esempio «pomodoro», «mozzarella», «basilico»); lo stesso ingrediente può comparire in più pizze. Tradurre il modello in modello logico, ristrutturando dove necessario.
Pizzaiolo Pizza Prepara Matricola Nome Cognome CodPizza Nome Prezzo ingredienti (1,n) (1,1)
Modello E-R dell’esercizio 8.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — l’attributo ingredienti è multivalore e l’informazione è condivisa: lo stesso ingrediente («pomodoro») compare in più pizze. Diventa perciò una nuova entità Ingrediente, identificata da Nome(PK), collegata a Pizza dall’associazione n:n Composta (sarebbe 1:n solo se ogni ingrediente appartenesse a una sola pizza).
  2. Passo 2 — Pizzaiolo e Pizza diventano tabelle con il proprio identificatore come PK.
  3. Passo 3 — l’associazione Prepara 1:n mette la FK in Pizza (accanto a Pizza c’è (1,1)); Composta è n:n, quindi nasce la tabella Composta con PK(CodPizza, Nome) e le due FK CodPizza e Nome.
Soluzione
Pizzaiolo  (Matricola(PK), Nome, Cognome)
Pizza  (CodPizza(PK), Nome, Prezzo, Matricola(FK))
Ingrediente  (Nome(PK))
Composta  (PK(CodPizza, Nome), CodPizza(FK), Nome(FK))
Da scrivere così
Pizzaiolo (Matricola(PK), Nome, Cognome)
Pizza (CodPizza(PK), Nome, Prezzo, Matricola(FK))
Ingrediente (Nome(PK))
Composta (PK(CodPizza, Nome), CodPizza(FK), Nome(FK))

Esercizio 9 — Multivalore ed entità deboleAlta

multivaloreentità debole3 entità
TestoUn amministratore di condominio registra i condomini (codFiscale, indirizzo), di cui conserva uno o più numeri di telefono. Ogni condominio comprende più appartamenti, identificati dal numero interno all’interno del condominio (due condomini diversi possono avere lo stesso numero interno), con piano e superficie. Un appartamento esiste solo dentro il suo condominio. Tradurre il modello in modello logico, ristrutturando dove necessario.
Condominio Appartamento Comprende CodFiscale Indirizzo telefoni Piano Superficie (1,n) (1,1) NumeroInterno
Modello E-R dell’esercizio 9.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — l’attributo telefoni è multivalore: diventa l’entità Telefono collegata a Condominio dall’associazione 1:n Contatta.
  2. Passo 2 — Condominio è un’entità forte. Appartamento è un’entità debole: NumeroInterno è solo una chiave parziale.
  3. Passo 3 — l’associazione identificante Comprende non crea una tabella: la PK di Appartamento diventa PK(CodFiscale, NumeroInterno).
  4. L’associazione Contatta 1:n mette la FK in Telefono.
Soluzione
Condominio  (CodFiscale(PK), Indirizzo)
Telefono  (Numero(PK), CodFiscale(FK))
Appartamento  (PK(CodFiscale, NumeroInterno), Piano, Superficie, CodFiscale(FK))
Da scrivere così
Condominio (CodFiscale(PK), Indirizzo)
Telefono (Numero(PK), CodFiscale(FK))
Appartamento (PK(CodFiscale, NumeroInterno), Piano, Superficie, CodFiscale(FK))

Esercizio 10 — Generalizzazione parziale e associazione n:nAlta

entità figlien:n3 entità
TestoUn’azienda registra i dipendenti (matricola, nome, cognome), i mezzi (targa, marca) e le sedi (codSede, città). I mezzi 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 parziale ed esclusiva). Ogni mezzo è assegnato a una sola sede e una sede ha molti mezzi. Un dipendente può usare più mezzi in momenti diversi e lo stesso mezzo può essere usato da più dipendenti; di ogni uso interessa la data di inizio. Tradurre il modello in modello logico, scegliendo il metodo di eliminazione della generalizzazione più adatto alla copertura indicata.
Dipendente Mezzo Sede Autovettura Motociclo Usa Assegnato Matricola Nome Cognome DataInizio Targa Marca CodSede Citta NumPosti Cilindrata (0,n) (0,n) (1,1) (1,n) (p,e)
Modello E-R dell’esercizio 10.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è parziale ed esclusiva (p,e): i furgoni sono mezzi che non appartengono a nessuna figlia. Il Metodo 1 è quindi vietato: eliminando il padre si perderebbero i dati dei furgoni. Restano il Metodo 2 (figlie incorporate nel padre + TipoFiglia) e il Metodo 3 (associazioni 1:1), entrambi sempre possibili — trovi le due soluzioni.
  2. Passo 2 — Dipendente e Sede sono entità forti; Mezzo diventa la tabella del padre con gli attributi delle figlie (Metodo 2) o resta il padre di due 1:1 (Metodo 3).
  3. Passo 3 — l’associazione Assegnato 1:n mette la FK in Mezzo (accanto a Mezzo c’è (1,1) verso la sede).
  4. Passo 4 — l’associazione Usa è n:n con attributo proprio: nasce la tabella Usa con PK = coppia delle PK e l’attributo DataInizio.
Metodo 2 — Eliminazione delle entità figlie (scelta guidata)
Dipendente  (Matricola(PK), Nome, Cognome)
Sede  (CodSede(PK), Citta)
Mezzo  (Targa(PK), Marca, NumPosti, Cilindrata, TipoFiglia, CodSede(FK))
Usa  (PK(Matricola, Targa), DataInizio, Matricola(FK), Targa(FK))
Metodo 3 — Associazioni 1:1
Dipendente  (Matricola(PK), Nome, Cognome)
Sede  (CodSede(PK), Citta)
Mezzo  (Targa(PK), Marca, CodSede(FK))
Autovettura  (Targa(PK), NumPosti, Targa(FK))
Motociclo  (Targa(PK), Cilindrata, Targa(FK))
Usa  (PK(Matricola, Targa), DataInizio, Matricola(FK), Targa(FK))
Da scrivere così
Dipendente (Matricola(PK), Nome, Cognome)
Sede (CodSede(PK), Citta)
Mezzo (Targa(PK), Marca, NumPosti, Cilindrata, TipoFiglia, CodSede(FK))
Usa (PK(Matricola, Targa), DataInizio, Matricola(FK), Targa(FK))

Esercizio 11 — Sei entità: officina meccanicaAlta

6 entitàn:n con attributo1:n
TestoUn’officina meccanica registra gli interventi (codice) eseguiti sui veicoli (targa, marca, modello) dei clienti (codiceFiscale, nome, telefono) dai propri meccanici (matricola, nome, cognome). Ogni intervento riguarda un solo veicolo, è richiesto da un solo cliente, è eseguito in una sola officina (partitaIVA, nome, città) e da un solo meccanico. Un intervento può utilizzare più ricambi (codRicambio, descrizione, costo) e lo stesso ricambio può servire più interventi. Tradurre il modello in modello logico.
Intervento Officina Meccanico Ricambio Veicolo Cliente Ripara (1,1) (1,n) PartitaIVA Nome Citta Esegue (1,1) (1,n) Matricola Nome Cognome Utilizza (0,n) (0,n) CodRicambio Descrizione Costo Riguarda (1,1) (1,n) Targa Marca Modello Richiede (1,1) (1,n) CodFiscale Nome Telefono Codice
Modello E-R dell’esercizio 11.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — nessun attributo composto, multivalore o generalizzazione: il modello E-R è già ristrutturato.
  2. Passo 2 — sei entità → sei tabelle, ciascuna con il proprio identificatore come PK.
  3. Passo 3 — le tre associazioni 1:n Ripara, Riguarda, Richiede (e le altre verso meccanico/officina) mettono la FK nella tabella dal lato con massimo 1, cioè sempre in Intervento: la tabella referenziante è quella con (1,1) accanto a sé.
  4. Passo 4 — l’associazione Utilizza è n:n: nasce una nuova tabella con PK = coppia delle PK. Attenzione: in Intervento le chiavi esterne vanno tutte in coda.
Soluzione
Officina  (PartitaIVA(PK), Nome, Citta)
Meccanico  (Matricola(PK), Nome, Cognome)
Ricambio  (CodRicambio(PK), Descrizione, Costo)
Veicolo  (Targa(PK), Marca, Modello)
Cliente  (CodFiscale(PK), Nome, Telefono)
Intervento  (Codice(PK), PartitaIVA(FK), Matricola(FK), Targa(FK), CodFiscale(FK))
Utilizza  (PK(Codice, CodRicambio), Codice(FK), CodRicambio(FK))
Da scrivere così
Officina (PartitaIVA(PK), Nome, Citta)
Meccanico (Matricola(PK), Nome, Cognome)
Ricambio (CodRicambio(PK), Descrizione, Costo)
Veicolo (Targa(PK), Marca, Modello)
Cliente (CodFiscale(PK), Nome, Telefono)
Intervento (Codice(PK), PartitaIVA(FK), Matricola(FK), Targa(FK), CodFiscale(FK))
Utilizza (PK(Codice, CodRicambio), Codice(FK), CodRicambio(FK))

Esercizio 12 — Sei entità: studio veterinarioAlta

6 entitàn:n con attributo1:n
TestoUno studio veterinario registra le visite (codVisita) effettuate nella propria clinica (partitaIVA, nome) dai veterinari (codice, nome, cognome) su un animale (microchip, nome, specie) di un proprietario (codiceFiscale, nome, cognome); ogni animale ha un solo proprietario e un proprietario può avere più animali. Ogni visita riguarda un solo animale, è effettuata in una sola clinica e da un solo veterinario. In una visita il veterinario può prescrivere più farmaci (codFarmaco, nome, prezzo) e lo stesso farmaco può essere prescritto in più visite. Tradurre il modello in modello logico.
Visita Clinica Veterinario Farmaco Animale Effettua (1,1) (1,n) PartitaIVA Nome Esegue (1,1) (1,n) Codice Nome Cognome Prescrive (0,n) (0,n) CodFarmaco Nome Prezzo Riguarda (1,1) (1,n) Microchip Nome Specie CodVisita Proprietario Possiede (1,1) (0,n) CodFiscale Nome Cognome
Modello E-R dell’esercizio 12.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — nessun attributo composto, multivalore o generalizzazione: il modello E-R è già ristrutturato.
  2. Passo 2 — sei entità → sei tabelle con il proprio identificatore come PK.
  3. Passo 3 — le associazioni 1:n Effettua, Esegue, Riguarda mettono la FK in Visita; l’associazione Possiede 1:n fra Proprietario e Animale mette la FK in Animale.
  4. Passo 4 — l’associazione Prescrive è n:n (una visita prescrive più farmaci, un farmaco compare in più visite): nasce la tabella Prescrive con PK = coppia delle PK.
Soluzione
Clinica  (PartitaIVA(PK), Nome)
Veterinario  (Codice(PK), Nome, Cognome)
Proprietario  (CodFiscale(PK), Nome, Cognome)
Animale  (Microchip(PK), Nome, Specie, CodFiscale(FK))
Farmaco  (CodFarmaco(PK), Nome, Prezzo)
Visita  (CodVisita(PK), PartitaIVA(FK), Codice(FK), Microchip(FK))
Prescrive  (PK(CodVisita, CodFarmaco), CodVisita(FK), CodFarmaco(FK))
Da scrivere così
Clinica (PartitaIVA(PK), Nome)
Veterinario (Codice(PK), Nome, Cognome)
Proprietario (CodFiscale(PK), Nome, Cognome)
Animale (Microchip(PK), Nome, Specie, CodFiscale(FK))
Farmaco (CodFarmaco(PK), Nome, Prezzo)
Visita (CodVisita(PK), PartitaIVA(FK), Codice(FK), Microchip(FK))
Prescrive (PK(CodVisita, CodFarmaco), CodVisita(FK), CodFarmaco(FK))

Esercizio 13 — Sette entità: spedizioniAlta

7 entitàn:n con attributo1:n
TestoUna società di logistica registra le spedizioni (codSpedizione). Ogni spedizione è ordinata da un solo cliente (partitaIVA, ragioneSociale), ha una sola destinazione (codDest, città, provincia), usa un solo camion (targa, portata), è gestita da un solo dipendente (matricola, nome, cognome) ed è organizzata da una sola filiale (codFiliale, città); ogni cliente, destinazione, camion, dipendente e filiale può comparire in molte spedizioni. Una spedizione può contenere più merci (codMerce, descrizione) e la stessa merce può comparire in più spedizioni. Tradurre il modello in modello logico.
Spedizione Cliente Destinazione Merce Camion Dipendente Filiale Ordina (1,1) (1,n) PartitaIVA RagioneSociale Diretta (1,1) (1,n) CodDest Citta Provincia Contiene (0,n) (0,n) CodMerce Descrizione Usa (1,1) (1,n) Targa Portata Gestisce (1,1) (1,n) Matricola Nome Cognome Organizza (1,1) (1,n) CodFiliale Citta
Modello E-R dell’esercizio 13.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — nessun attributo composto, multivalore o generalizzazione: il modello E-R è già ristrutturato.
  2. Passo 2 — sette entità → sette tabelle con il proprio identificatore come PK.
  3. Passo 3 — tutte le associazioni 1:n mettono la FK in Spedizione, che è la tabella referenziante (accanto a Spedizione c’è (1,1) in ogni associazione).
  4. Passo 4 — l’associazione Contiene è n:n: nasce la tabella Contiene con PK = coppia delle PK. In Spedizione le cinque chiavi esterne vanno tutte in coda.
Soluzione
Cliente  (PartitaIVA(PK), RagioneSociale)
Destinazione  (CodDest(PK), Citta, Provincia)
Camion  (Targa(PK), Portata)
Dipendente  (Matricola(PK), Nome, Cognome)
Filiale  (CodFiliale(PK), Citta)
Merce  (CodMerce(PK), Descrizione)
Spedizione  (CodSpedizione(PK), PartitaIVA(FK), CodDest(FK), Targa(FK), Matricola(FK), CodFiliale(FK))
Contiene  (PK(CodSpedizione, CodMerce), CodSpedizione(FK), CodMerce(FK))
Da scrivere così
Cliente (PartitaIVA(PK), RagioneSociale)
Destinazione (CodDest(PK), Citta, Provincia)
Camion (Targa(PK), Portata)
Dipendente (Matricola(PK), Nome, Cognome)
Filiale (CodFiliale(PK), Citta)
Merce (CodMerce(PK), Descrizione)
Spedizione (CodSpedizione(PK), PartitaIVA(FK), CodDest(FK), Targa(FK), Matricola(FK), CodFiliale(FK))
Contiene (PK(CodSpedizione, CodMerce), CodSpedizione(FK), CodMerce(FK))

Esercizio 14 — Sei entità: lezioniAlta

7 entitàn:n con attributo1:n
TestoUn istituto scolastico registra le lezioni (codLezione). Ogni lezione è pianificata da un solo istituto (codIstituto, città), è tenuta da un solo docente (codDocente, nome, cognome), si svolge in una sola aula (codAula, piano, capienza) ed è dedicata a una sola materia (codMateria, denominazione); ogni istituto, docente, aula e materia può comparire in molte lezioni. A ogni lezione possono partecipare più studenti (matricola, nome, cognome) e uno studente partecipa a più lezioni. Di ogni studente la segreteria registra anche uno o più numeri di telefono. Tradurre il modello in modello logico, ristrutturando dove necessario.
Lezione Istituto Docente Aula Materia Studente Pianifica (1,1) (1,n) CodIstituto Citta Tiene (1,1) (1,n) CodDocente Nome Cognome Ospita (1,1) (1,n) CodAula Piano Capienza Tratta (1,1) (1,n) CodMateria Denominazione Partecipa (0,n) (0,n) Matricola Nome Cognome telefoni
Modello E-R dell’esercizio 14.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — l’attributo telefoni dello studente è multivalore: diventa l’entità Telefono collegata a Studente dall’associazione 1:n Recapita.
  2. Passo 2 — le sei entità del modello E-R diventano sei tabelle con il proprio identificatore come PK (a queste si aggiunge Telefono, creata al passo 1).
  3. Passo 3 — le associazioni 1:n mettono la FK in Lezione (istituto, docente, aula, materia).
  4. Passo 4 — l’associazione Partecipa è n:n fra Studente e Lezione: nasce la tabella Partecipa con PK = coppia delle PK.
  5. Passo 5 — l’associazione Recapita mette la FK in Telefono.
Soluzione
Istituto  (CodIstituto(PK), Citta)
Docente  (CodDocente(PK), Nome, Cognome)
Aula  (CodAula(PK), Piano, Capienza)
Materia  (CodMateria(PK), Denominazione)
Studente  (Matricola(PK), Nome, Cognome)
Lezione  (CodLezione(PK), CodIstituto(FK), CodDocente(FK), CodAula(FK), CodMateria(FK))
Partecipa  (PK(CodLezione, Matricola), CodLezione(FK), Matricola(FK))
Telefono  (Numero(PK), Matricola(FK))
Da scrivere così
Istituto (CodIstituto(PK), Citta)
Docente (CodDocente(PK), Nome, Cognome)
Aula (CodAula(PK), Piano, Capienza)
Materia (CodMateria(PK), Denominazione)
Studente (Matricola(PK), Nome, Cognome)
Lezione (CodLezione(PK), CodIstituto(FK), CodDocente(FK), CodAula(FK), CodMateria(FK))
Partecipa (PK(CodLezione, Matricola), CodLezione(FK), Matricola(FK))
Telefono (Numero(PK), Matricola(FK))

Esercizio 15 — Generalizzazione con il Metodo 3Media

entità figlieMetodo 31:1
TestoUna banca registra i clienti (codiceFiscale, nome, cognome) e i conti (numeroConto, saldo, dataApertura): ogni conto è intestato a un solo cliente e un cliente può avere più conti. I conti si dividono in conti correnti, di cui interessa il tasso di interesse, e conti deposito, di cui interessa il numero massimo di prelievi (copertura totale ed esclusiva). Solo i conti correnti hanno carte di pagamento (numero, circuito): un conto corrente può avere più carte e ogni carta appartiene a un solo conto corrente. Tradurre il modello in modello logico applicando il Metodo 3 — associazioni 1:1.
Cliente Conto ContoCorrente ContoDeposito Carta Intestato Possiede CodiceFiscale Nome Cognome NumeroConto Saldo DataApertura TassoInteresse MaxPrelievi Numero Circuito (0,n) (1,1) (0,n) (1,1) (t,e)
Modello E-R dell’esercizio 15.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura della generalizzazione è totale ed esclusiva (t,e). Le figlie hanno pochi attributi propri, ma solo i conti correnti hanno un’associazione propria (Possiede → Carta): per non appiattirla sul padre e per non riempire di NULL la tabella del padre, la scelta guidata è il Metodo 3 — associazioni 1:1.
  2. Passo 2 — Cliente, Conto e Carta diventano tabelle con il proprio identificatore come PK.
  3. Passo 3 — con il Metodo 3 la generalizzazione diventa una 1:1 tra il padre Conto e ciascuna figlia: ContoCorrente e ContoDeposito hanno PK(NumeroConto) che è anche FK verso Conto.
  4. Passo 4 — l’associazione Intestato 1:n mette la FK in Conto (accanto a Conto c’è (1,1)); l’associazione Possiede 1:n mette la FK in Carta: Carta.NumeroConto è FK verso ContoCorrente (non verso Conto), perché le carte esistono solo per i conti correnti.
Metodo 3 — Associazioni 1:1
Cliente  (CodiceFiscale(PK), Nome, Cognome)
Conto  (NumeroConto(PK), Saldo, DataApertura, CodiceFiscale(FK))
ContoCorrente  (NumeroConto(PK), TassoInteresse, NumeroConto(FK))
ContoDeposito  (NumeroConto(PK), MaxPrelievi, NumeroConto(FK))
Carta  (Numero(PK), Circuito, NumeroConto(FK))
Da scrivere così
Cliente (CodiceFiscale(PK), Nome, Cognome)
Conto (NumeroConto(PK), Saldo, DataApertura, CodiceFiscale(FK))
ContoCorrente (NumeroConto(PK), TassoInteresse, NumeroConto(FK))
ContoDeposito (NumeroConto(PK), MaxPrelievi, NumeroConto(FK))
Carta (Numero(PK), Circuito, NumeroConto(FK))