Eserciziario interattivo

Dal modello E-R al modello logico

Trentacinque esercizi raccolti dai tre eserciziari in un'unica progressione per difficoltà — Base, Media e Alta — selezionabile dai filtri in cima alla lista. Ogni esercizio ha modello E-R, svolgimento commentato e verifica automatica della tua traduzione: il correttore controlla tabelle, chiavi primarie, chiavi esterne e l’ordine degli attributi.

Come si traduce — le tre regole, in ordine

La traduzione si affronta in tre passi, e l’ordine non è una preferenza di stile: prima si toglie dal modello E-R ciò che il modello logico non sa rappresentare, poi si traducono le entità, infine le associazioni. Invertire i passi è l’errore più frequente.

  1. Passo 1 — Ristrutturare (Regola 1). Si eliminano i costrutti senza corrispondenza diretta: l’attributo composto si spezza negli attributi semplici che lo compongono; l’attributo multivalore genera una nuova entità: l’associazione di collegamento è 1:n se ogni valore appartiene a una sola istanza (l’email, il numero di telefono), n:n se i valori sono condivisi fra più istanze (una lingua parlata da più persone). La nuova entità ha come PK il valore stesso dell’attributo e come FK la PK dell’ente proprietario; la generalizzazione si risolve con uno dei tre metodi della tabella qui sotto.
  2. Passo 2 — Da ogni entità una tabella. Gli attributi diventano colonne; l’identificatore diventa la chiave primaria (PK). L’entità debole prende come PK la PK dell’entità forte più la propria chiave parziale.
  3. Passo 3 — Da ogni associazione, una collocazione per la chiave esterna. 1:n → la FK sta nella tabella che è dal lato con massimo 1. n:n → una tabella nuova con PK = coppia delle PK. 1:1 → (1,1) da entrambi i lati: una sola tabella; (1,1) da un solo lato: FK nella tabella con cardinalità (1,1); (0,1) da entrambi i lati: terza tabella col nome dell’associazione. Se l’associazione è identificante, la FK entra nella PK composta dell’entità debole (prima la chiave del forte, poi la chiave parziale) e si può ripetere in coda come in un 1:n normale: il correttore accetta entrambe le grafie, che sono la stessa cosa. Se l’associazione ha attributi propri, finiscono nella tabella generata dall’n:n, nella tabella fusa o — nel caso 1:1 con la FK in una delle due tabelle — nella tabella che contiene la FK, prima della FK (che resta l’ultimo attributo).
Attenzione alla PK: decide il testo, non tu. La regola «PK = coppia delle PK» vale finché il testo non prevede che la stessa coppia possa ricorrere più volte: rileggi il testo prima di scegliere la PK. Se la stessa coppia ricorre, l’associazione ha occorrenze con vita propria e non è più una semplice tabella n:n: diventa un’entità, con un identificatore proprio e le FK verso le entità collegate. Se invece la coppia non può ripetersi, la PK = coppia delle PK va bene — e non si inventa nessun attributo che il modello non preveda.

La generalizzazione: tre modi di risolverla

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. L’identificatore va rinominato per distinguere le figlie (es. codiceC / codiceG); se la copertura è anche esclusiva, il correttore accetta anche lo stesso nome nelle due tabelle. Copertura totale (è obbligatorio); meglio se anche esclusiva. Figlie «ricche», con molti attributi propri. Le associazioni del padre duplicate verso ogni figlia; le interrogazioni «su tutti i padri» diventano un’unione di tabelle.
2 — Elimina le figlie Le figlie rientrano nel padre: un’unica tabella con gli attributi specifici di tutte, 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). In questo eserciziario l’attributo di controllo si chiama con un nome che comincia con «tipo» (tipoFiglia, ma anche tipo, tipoCorso…): il correttore accetta qualunque di queste grafie. Sempre possibile, salvo il caso di un’associazione che riguarda una sola figlia (vedi la nota qui sotto). È la scelta naturale se la copertura è parziale o sovrapposta, o se le figlie sono «povere»: pochi attributi propri e nessuna associazione propria. Molti valori NULL: su ogni riga restano vuoti gli attributi delle figlie diverse.
3 — Tieni tutti: associazioni 1:1 La generalizzazione diventa un’associazione 1:1 tra il padre e ciascuna figlia (es. Is_C, Is_I): il padre resta, e ogni figlia ha PK = PK del padre, che è anche FK. Sempre possibile. Figlie con associazioni proprie da tenere separate (es. solo i medici seguono i ricoveri); vuoi evitare sia i nulli del Metodo 2 sia le duplicazioni del Metodo 1. Più tabelle: per rileggere una figlia insieme al padre servono più join.
L’ordine in cui decidere: 1) la copertura scritta nel testo — se è parziale, il Metodo 1 è vietato, perché perderesti chi sta solo nel padre; 2) le figlie hanno vita propria, cioè attributi specifici numerosi o associazioni proprie? (sì → 1 o 3; figlie povere → 2); 3) che cosa vuoi evitare nello schema logico? (valori nulli → non il 2; associazioni duplicate e interrogazioni a unione → non l’1; tabelle e join in più → non il 3). Motiva sempre la scelta in una riga.
Quando il Metodo 2 non basta. Se un’associazione riguarda una sola figlia (per esempio «solo i medici seguono i ricoveri»), fondere le figlie nel padre fa perdere questo vincolo: la FK punterebbe al padre e potrebbe riferirsi anche all’altra figlia. In quel caso scegli il Metodo 1 o il Metodo 3.
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 o le FK.

Come si legge il modello E-R

SimboloChe cosa significa
RettangoloEntità: ha un identificatore proprio.
RomboAssociazione fra due entità.
Cerchio pienoChiave primaria (identificatore).
Cerchio vuotoAttributo semplice.
Cerchio doppioAttributo multivalore (va trasformato in una nuova entità).
Pallino nero pieno (●) con il tratto che lo collega Segnala l’entità debole: il pallino chiude il tratto che collega la chiave parziale al rombo dell’associazione identificante — è questo che distingue la debole da un’entità forte. Il tratto passa sotto l’attributo chiave parziale (quello che il testo indica come «numero progressivo interno»). L’entità debole non ha un identificatore proprio: la sua chiave è la PK dell’entità forte più la chiave parziale.
Albero con (t,e) o (p,e) Generalizzazione: il padre sta in alto, le figlie sotto. (t,e) = copertura totale ed esclusiva, (p,e) = copertura parziale (esistono istanze del padre che non sono né l’una né l’altra figlia).
(min,max) accanto a un’entità Quante volte quell’entità partecipa all’associazione: (1,1) = esattamente una volta, (0,1) = al massimo una (con massimo 1 si ha, in un’associazione 1:n, il lato in cui finisce la chiave esterna), (0,n) = da nessuna a n volte.
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. I nomi degli attributi devono corrispondere a quelli del testo e del diagramma: il correttore accetta le grafie equivalenti indicate di volta in volta (per esempio codCentro o CodSede per la stessa chiave esterna). 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).

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 — Noleggio di attrezzature: un n:n con attributo e un 1:nBase

3 entitàn:n con attributo1:n
TestoUno sportello di noleggio registra le attrezzature (codAttrezzo, descrizione, tariffaOraria) e i propri soci (tessera, nome, cognome). Ogni attrezzatura è acquistata da un solo fornitore (partitaIVA, denominazione, nazione), mentre un fornitore rifornisce più attrezzature. Un socio può noleggiare più attrezzature e un’attrezzatura può essere noleggiata da più soci; di ogni noleggio si registrano la data di inizio e la data di fine; ogni socio noleggia una determinata attrezzatura al più una volta. Tradurre il modello in modello logico.
Socio Attrezzatura Fornitore Noleggia Fornita tessera nome cognome codAttrezzo descrizione tariffaOraria partitaIVA denominazione nazione dataInizio dataFine (0,n) (0,n) (1,1) (1,n)
Modello E-R dell’esercizio 2.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Il modello E-R è già ristrutturato: nessun attributo composto, nessun multivalore, nessuna generalizzazione.
  2. Tre entità → tre tabelle: Socio, Attrezzatura, Fornitore, ognuna con il proprio identificatore come PK.
  3. L’associazione Fornita è 1:n: la FK va nella tabella dal lato con massimo 1, cioè Attrezzatura (accanto a Attrezzatura c’è (1,1)).
  4. L’associazione Noleggia è n:n e ha attributi propri: nasce una nuova tabella con PK = coppia delle PK, più dataInizio e dataFine.
  5. Prima di fissare la PK, ricontrolla il testo: la stessa coppia socio–attrezzatura non può presentarsi più volte (il testo non lo prevede), quindi la PK = coppia delle PK va bene. Se il testo lo prevedesse, l’associazione Noleggia avrebbe occorrenze con vita propria e dovrebbe diventare un’entità con un identificatore proprio.
Soluzione
Socio  (tessera(PK), nome, cognome)
Fornitore  (partitaIVA(PK), denominazione, nazione)
Attrezzatura  (codAttrezzo(PK), descrizione, tariffaOraria, partitaIVA(FK))
Noleggia  (PK(tessera, codAttrezzo), dataInizio, dataFine, tessera(FK), codAttrezzo(FK))
Da scrivere così
Socio  (tessera(PK), nome, cognome)
Fornitore  (partitaIVA(PK), denominazione, nazione)
Attrezzatura  (codAttrezzo(PK), descrizione, tariffaOraria, partitaIVA(FK))
Noleggia  (PK(tessera, codAttrezzo), dataInizio, dataFine, tessera(FK), codAttrezzo(FK))

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

3 entitàn:n con attributo1:n
TestoUn laboratorio dolciario registra i dolci (codice, nome, prezzo) e gli ingredienti (codIngrediente, nome, fornitore). Ogni dolce usa più ingredienti e un ingrediente può essere usato in più dolci; per ogni uso il laboratorio registra la quantità in grammi. Ogni dolce è preparato da un solo pasticciere (matricola, nome, cognome), mentre un pasticciere prepara più dolci. Tradurre il modello in modello logico.
Pasticciere Dolce Ingrediente Prepara Usa (0,n) (1,1) (1,n) (0,n) matricola nome cognome codice nome prezzo codIngrediente nome fornitore quantita
Modello E-R dell’esercizio 3.

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: Pasticciere, Dolce, Ingrediente, ciascuna con il proprio identificatore come PK.
  3. L’associazione Prepara è 1:n: la FK va nella tabella dal lato con massimo 1, cioè Dolce (accanto a Dolce c’è (1,1) verso il pasticciere).
  4. L’associazione Usa è n:n con attributo proprio: nasce una nuova tabella con PK = coppia delle PK e l’attributo quantità.
Soluzione
Pasticciere  (matricola(PK), nome, cognome)
Ingrediente  (codIngrediente(PK), nome, fornitore)
Dolce  (codice(PK), nome, prezzo, matricola(FK))
Usa  (PK(codice, codIngrediente), quantita, codice(FK), codIngrediente(FK))
Da scrivere così
Pasticciere (matricola(PK), nome, cognome)
Ingrediente (codIngrediente(PK), nome, fornitore)
Dolce (codice(PK), nome, prezzo, matricola(FK))
Usa (PK(codice, codIngrediente), quantita, codice(FK), codIngrediente(FK))

Esercizio 4 — 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 4.

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 5 — Due associazioni 1:n e un attributo multivaloreBase

multivalore1:n3 entità
TestoUna federazione sportiva registra gli atleti (tessera, nome, cognome, annoNascita), ciascuno tesserato presso una sola società (codSocietà, nome, città): una società ha però molti atleti. Ogni atleta pratica una sola disciplina (codDisciplina, denominazione) e una disciplina ha molti atleti. Di ogni atleta la federazione registra uno o più indirizzi email. Tradurre il modello in modello logico, ristrutturando dove necessario.
Societa Atleta Disciplina Tesserato Pratica codSocieta nome citta tessera nome cognome annoNascita email (1,n) codDisciplina denominazione (1,n) (1,1) (1,1) (1,n)
Modello E-R dell’esercizio 5.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — email è multivalore: diventa una nuova entità Email, collegata ad Atleta dall’associazione 1:n Possiede.
  2. Passo 2 — tre entità → tre tabelle: Atleta, Societa, Disciplina.
  3. Passo 3 — Tesserato e Pratica sono entrambe 1:n e in tutte e due l’atleta sta dal lato con massimo 1: le due FK finiscono perciò nella stessa tabella, Atleta, una in coda all’altra.
  4. La tabella generata dal multivalore ha come PK il valore stesso (l’indirizzo email) e la FK all’atleta: l’indirizzo è già univoco, quindi non serve aggiungere altro alla PK.
Soluzione
Disciplina  (codDisciplina(PK), denominazione)
Societa  (codSocieta(PK), nome, citta)
Atleta  (tessera(PK), nome, cognome, annoNascita, codSocieta(FK), codDisciplina(FK))
Email  (email(PK), tessera(FK))
Da scrivere così
Disciplina  (codDisciplina(PK), denominazione)
Societa  (codSocieta(PK), nome, citta)
Atleta  (tessera(PK), nome, cognome, annoNascita, codSocieta(FK), codDisciplina(FK))
Email  (email(PK), tessera(FK))

Esercizio 6 — Due entità con un attributo multivaloreBase

multivalore1:n
TestoUna società di consegne registra i corrieri (codice, nome, cognome) e le zone (codZona, nome, cap). Ogni corriere opera in una sola zona e una zona è coperta da più corrieri. Di ogni corriere la società registra uno o più numeri di telefono. Tradurre il modello in modello logico, ristrutturando dove necessario.
Corriere Zona Opera (1,1) (1,n) codice nome cognome codZona nome cap telefono (1,n)
Modello E-R dell’esercizio 6.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — l’attributo telefono è multivalore: diventa una nuova entità Telefono collegata a Corriere dall’associazione 1:n Possiede.
  2. Passo 2 — Corriere e Zona diventano tabelle con il proprio identificatore come PK.
  3. Passo 3 — l’associazione Opera 1:n mette la FK in Corriere (accanto a Corriere c’è (1,1)); l’associazione Possiede 1:n mette la FK in Telefono.
Soluzione
Zona  (codZona(PK), nome, cap)
Corriere  (codice(PK), nome, cognome, codZona(FK))
Telefono  (numero(PK), codice(FK))
Da scrivere così
Zona (codZona(PK), nome, cap)
Corriere (codice(PK), nome, cognome, codZona(FK))
Telefono (numero(PK), codice(FK))

Esercizio 7 — 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,n) (1,1)
Modello E-R dell’esercizio 7.

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 nomeIngrediente(PK) (non nome, per non confonderlo con l’altro nome), 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, nomeIngrediente) e le due FK codPizza e nomeIngrediente.
Soluzione
Pizzaiolo  (matricola(PK), nome, cognome)
Pizza  (codPizza(PK), nome, prezzo, matricola(FK))
Ingrediente  (nomeIngrediente(PK))
Composta  (PK(codPizza, nomeIngrediente), codPizza(FK), nomeIngrediente(FK))
Da scrivere così
Pizzaiolo (matricola(PK), nome, cognome)
Pizza (codPizza(PK), nome, prezzo, matricola(FK))
Ingrediente (nomeIngrediente(PK))
Composta (PK(codPizza, nomeIngrediente), codPizza(FK), nomeIngrediente(FK))

Esercizio 8 — 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 8.

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 l’identificatore rinominato (targaAutovettura / targaMotociclo); 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.
  5. Il nome dell’attributo di controllo è libero purché cominci con «tipo» (tipoFiglia, tipo, tipoVeicolo…): il correttore accetta tutte queste grafie.
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  (targaAutovettura(PK), marca, modello, numPosti)
Motociclo  (targaMotociclo(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 9 — Generalizzazione totale ed esclusiva: tre metodiMedia

entità figliegeneralizzazione1:n
TestoUna società di formazione eroga i corsi (codCorso, titolo, durataOre). I corsi si dividono in teorici, di cui interessa il numero di aule assegnate, e pratici, di cui interessa il numero di prove di guida: ogni corso è o teorico o pratico (copertura totale ed esclusiva). Ogni corso è erogato in un solo centro (codCentro, città, indirizzo) e in un centro si erogano più corsi. Tradurre il modello in modello logico usando uno dei tre metodi, a scelta.
Corso Teorico Pratico Centro Erogato codCorso titolo durataOre numAule numProveGuida codCentro citta indirizzo (1,1) (1,n) (t,e)
Modello E-R dell’esercizio 9.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. La copertura è totale ed esclusiva: nessuno dei tre metodi è vietato, la scelta è di merito.
  2. Metodo 1: elimini il padre Corso; le figlie ripetono titolo e durataOre, e l’associazione Erogato si duplica verso entrambe. L’identificatore si può rinominare (codCorsoT / codCorsoP) oppure lasciare com’è: con copertura esclusiva le due tabelle non si pestano i piedi.
  3. Metodo 2: le figlie confluiscono in un’unica tabella Corso con anche numAule e numProveGuida, più l’attributo di controllo tipoFiglia; molte celle restano vuote. Il nome dell’attributo di controllo è libero purché cominci con «tipo» (tipoFiglia, tipo, tipoCorso…): il correttore accetta tutte queste grafie.
  4. Metodo 3: il padre resta e ogni figlia diventa una tabella con PK = PK del padre, che è anche FK. Qui l’attributo di controllo tipoFiglia è ridondante (il tipo si deduce dalla presenza della riga nella tabella figlia): si può omettere, e il correttore accetta entrambe le forme.
Metodo 2 — le entità figlie rientrano nel padre
Centro  (codCentro(PK), citta, indirizzo)
Corso  (codCorso(PK), titolo, durataOre, numAule, numProveGuida, tipoFiglia, codCentro(FK))
Metodo 1 — eliminazione dell’entità padre
Centro  (codCentro(PK), citta, indirizzo)
Teorico  (codCorsoT(PK), titolo, durataOre, numAule, codCentro(FK))
Pratico  (codCorsoP(PK), titolo, durataOre, numProveGuida, codCentro(FK))
Metodo 1 — variante accettata, identificatore non rinominato
Centro  (codCentro(PK), citta, indirizzo)
Teorico  (codCorso(PK), titolo, durataOre, numAule, codCentro(FK))
Pratico  (codCorso(PK), titolo, durataOre, numProveGuida, codCentro(FK))
Metodo 3 — associazioni 1:1 tra padre e figlie
Centro  (codCentro(PK), citta, indirizzo)
Corso  (codCorso(PK), titolo, durataOre, tipoFiglia, codCentro(FK))
Teorico  (codCorso(PK), numAule, codCorso(FK))
Pratico  (codCorso(PK), numProveGuida, codCorso(FK))
Da scrivere così
Centro  (codCentro(PK), citta, indirizzo)
Corso  (codCorso(PK), titolo, durataOre, numAule, numProveGuida, tipoFiglia, codCentro(FK))

Esercizio 10 — Generalizzazione: film e serie TVMedia

entità figliegeneralizzazione1:n
TestoUna piattaforma di streaming registra i contenuti (codice, titolo, anno). I contenuti sono film, di cui interessa la durata in minuti, oppure serie TV, di cui interessa il numero di stagioni: ogni contenuto è o un film o una serie (copertura totale ed esclusiva). Ogni contenuto appartiene a un solo genere (codGenere, nome) e un genere raccoglie più contenuti. Tradurre il modello in modello logico, motivando il metodo scelto per la generalizzazione.
Contenuto Film SerieTv Genere Appartiene (1,1) (0,n) (t,e) codice titolo anno durataMinuti numeroStagioni codGenere nome
Modello E-R dell’esercizio 10.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è totale ed esclusiva (t,e) e le figlie hanno un solo attributo proprio ciascuna: 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 Contenuto più due figlie con PK(codice) che è anche FK. Trovi tutte e tre le soluzioni.
  2. Passo 2 — Contenuto e Genere diventano tabelle; l’identificatore resta la PK.
  3. Passo 3 — l’associazione Appartiene 1:n mette la FK in Contenuto (accanto a Contenuto c’è (1,1) verso il genere).
  4. Nel Metodo 2 l’attributo di controllo è libero purché cominci con «tipo» (tipoFiglia, tipo, tipoContenuto…): il correttore accetta tutte queste grafie.
Metodo 2 — Eliminazione delle entità figlie (scelta guidata)
Genere  (codGenere(PK), nome)
Contenuto  (codice(PK), titolo, anno, durataMinuti, numeroStagioni, tipoFiglia, codGenere(FK))
Metodo 1 — Eliminazione dell’entità padre
Genere  (codGenere(PK), nome)
Film  (codiceFilm(PK), titolo, anno, durataMinuti, codGenere(FK))
SerieTv  (codiceSerie(PK), titolo, anno, numeroStagioni, codGenere(FK))
Metodo 3 — Associazioni 1:1
Genere  (codGenere(PK), nome)
Contenuto  (codice(PK), titolo, anno, codGenere(FK))
Film  (codice(PK), durataMinuti, codice(FK))
SerieTv  (codice(PK), numeroStagioni, codice(FK))
Da scrivere così
Genere (codGenere(PK), nome)
Contenuto (codice(PK), titolo, anno, durataMinuti, numeroStagioni, tipoFiglia, codGenere(FK))

Esercizio 11 — Generalizzazione parziale: il Metodo 1 è vietatoMedia

entità figliegeneralizzazionecopertura parziale1:n
TestoUn’azienda agricola registra i terreni (particella, estensioneEttari). I terreni si dividono in seminativi, di cui interessa la coltura, e prati, di cui interessa il numero di tagli annuali; esistono però anche terreni incolti, che restano semplici terreni senza attributi specifici (copertura parziale). Ogni conducente (codConducente, nome, cognome) coltiva un solo terreno, mentre un terreno può essere coltivato da più conducenti. Tradurre il modello in modello logico con il Metodo 2 oppure con il Metodo 3.
Terreno Seminativo Prato Conducente Coltiva particella estensioneEttari coltura numTagli codConducente nome cognome (0,n) (1,1) (p,e)
Modello E-R dell’esercizio 11.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. La copertura è parziale: esistono terreni che non sono né seminativi né prati.
  2. Per questo il Metodo 1 è vietato: eliminando il padre Terreno perderesti del tutto gli incolti, che non hanno una figlia in cui stare.
  3. Resta il Metodo 2 (tutti in un’unica tabella + attributo di controllo, con nulli) o il Metodo 3 (padre e figlie in 1:1, che conserva anche gli incolti). L’attributo di controllo del Metodo 2 si chiama con un nome che comincia con «tipo» (tipoFiglia, tipo, tipoTerreno…): il correttore accetta tutte queste grafie.
  4. In entrambi i casi l’associazione Coltiva mette la FK in Conducente: è il lato con massimo 1 (accanto a Conducente c’è (1,1)), perché ogni conducente coltiva un solo terreno.
  5. Nel Metodo 3 l’attributo di controllo tipoFiglia è ridondante (il tipo si deduce dalla presenza della riga in Seminativo o in Prato): si può omettere, e il correttore accetta entrambe le forme.
Metodo 2 — le entità figlie rientrano nel padre
Conducente  (codConducente(PK), nome, cognome, particella(FK))
Terreno  (particella(PK), estensioneEttari, coltura, numTagli, tipoFiglia)
Metodo 3 — associazioni 1:1 tra padre e figlie
Conducente  (codConducente(PK), nome, cognome, particella(FK))
Terreno  (particella(PK), estensioneEttari, tipoFiglia)
Seminativo  (particella(PK), coltura, particella(FK))
Prato  (particella(PK), numTagli, particella(FK))
Da scrivere così
Conducente  (codConducente(PK), nome, cognome, particella(FK))
Terreno  (particella(PK), estensioneEttari, coltura, numTagli, tipoFiglia)

Esercizio 12 — 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 12.

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))

Esercizio 13 — Generalizzazione con il Metodo 3Media

entità figlieMetodo 31:n
TestoUn’azienda di soccorso stradale registra i mezzi (targa, marca, modello). I mezzi sono ambulanze, di cui interessa il numero di barelle, oppure carri attrezzi, di cui interessa la portata: ogni mezzo è o un’ambulanza o un carro attrezzi (copertura totale ed esclusiva). Solo le ambulanze effettuano gli interventi (codIntervento, data, luogo): un’ambulanza può effettuare più interventi e ogni intervento è effettuato da una sola ambulanza. Tradurre il modello in modello logico applicando il Metodo 3 — associazioni 1:1.
Mezzo Ambulanza CarroAttrezzi Intervento Effettua (0,n) (1,1) (t,e) targa marca modello numeroBarelle portata codIntervento data luogo
Modello E-R dell’esercizio 13.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è totale ed esclusiva (t,e). Le figlie hanno pochi attributi propri, ma solo le ambulanze hanno un’associazione propria (Effettua → Intervento): 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 — Mezzo e Intervento diventano tabelle con il proprio identificatore come PK.
  3. Passo 3 — con il Metodo 3 la generalizzazione diventa una 1:1 tra il padre Mezzo e ciascuna figlia: Ambulanza e CarroAttrezzi hanno PK(targa) che è anche FK verso Mezzo.
  4. Passo 3 (continua) — l’associazione Effettua 1:n mette la FK in Intervento: Intervento.targa è FK verso Ambulanza (non verso Mezzo), perché gli interventi esistono solo per le ambulanze.
Metodo 3 — Associazioni 1:1
Mezzo  (targa(PK), marca, modello)
Ambulanza  (targa(PK), numeroBarelle, targa(FK))
CarroAttrezzi  (targa(PK), portata, targa(FK))
Intervento  (codIntervento(PK), data, luogo, targa(FK))
Da scrivere così
Mezzo (targa(PK), marca, modello)
Ambulanza (targa(PK), numeroBarelle, targa(FK))
CarroAttrezzi (targa(PK), portata, targa(FK))
Intervento (codIntervento(PK), data, luogo, targa(FK))

Esercizio 14 — 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 14.

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 15 — Entità debole con identificazione internaMedia

entità deboleidentificante1:n
TestoUna banca tiene traccia dei propri correntisti (codiceFiscale, nome, cognome) e dei conti correnti a loro intestati. Ogni conto è intestato a un solo correntista; di ogni conto si registra il numero progressivo interno al correntista (due correntisti diversi possono avere conti con lo stesso numero progressivo), la data di apertura e il saldo attuale. Tradurre il modello in modello logico.
Correntista codiceFiscale nome cognome Intestato (1,n) (1,1) ContoCorrente numProgressivo dataApertura saldo
Modello E-R dell’esercizio 15.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. ContoCorrente è un’entità debole: non ha un proprio identificatore, si distingue solo dal numero progressivo interno al correntista a cui è intestata.
  2. La PK è quindi composta: chiave del correntista + numero progressivo.
  3. La FK al correntista va nella stessa tabella — ed è già dentro la PK, perciò la tabella ha una sola FK, non due.
  4. La FK dentro la PK è implicita: ContoCorrente(PK(codiceFiscale, numProgressivo), …) basta da sola, ma se la dichiari lo stesso in coda — cioè codiceFiscale(FK) come ultimo attributo — il risultato è lo stesso e il correttore accetta anche entrambe le forme.
  5. Correntista diventa una tabella normale, con il proprio identificatore come PK.
Soluzione
Correntista  (codiceFiscale(PK), nome, cognome)
ContoCorrente  (PK(codiceFiscale, numProgressivo), dataApertura, saldo, codiceFiscale(FK))
Da scrivere così
Correntista  (codiceFiscale(PK), nome, cognome)
ContoCorrente  (PK(codiceFiscale, numProgressivo), dataApertura, saldo, codiceFiscale(FK))

Esercizio 16 — Entità debole: i pagamenti degli allieviMedia

entità deboleidentificante1:n
TestoUna scuola di musica registra gli allievi (matricola, nome, cognome) e i docenti (codDocente, nome, cognome). Ogni allievo segue un solo docente e un docente segue più allievi. Di ogni allievo la scuola registra i pagamenti: un pagamento ha un numero progressivo all’interno dell’allievo, una data e un importo. Pagamenti di allievi diversi possono avere lo stesso numero progressivo. Tradurre il modello in modello logico.
Allievo Docente Pagamento Segue (1,1) (1,n) Effettua (0,n) (1,1) matricola nome codDocente nome cognome cognome numProgressivo data importo
Modello E-R dell’esercizio 16.

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 — Allievo e Docente sono entità forti. Pagamento è 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 Pagamento diventa PK(matricola, numProgressivo) = PK dell’entità forte + chiave parziale.
  4. L’associazione Segue 1:n mette la FK in Allievo (accanto a Allievo c’è (1,1) verso il docente).
Soluzione
Docente  (codDocente(PK), nome, cognome)
Allievo  (matricola(PK), nome, cognome, codDocente(FK))
Pagamento  (PK(matricola, numProgressivo), data, importo, matricola(FK))
Da scrivere così
Docente (codDocente(PK), nome, cognome)
Allievo (matricola(PK), nome, cognome, codDocente(FK))
Pagamento (PK(matricola, numProgressivo), data, importo, matricola(FK))

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

3 entitàn:n con attributo1:n
TestoUn negozio di strumenti musicali registra i musicisti (codFiscale, 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 17.

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 18 — Quattro entità: cateringMedia

4 entitàn:n con attributo1:n
TestoUn’azienda di catering registra i clienti (partitaIVA, ragioneSociale, telefono), gli eventi (codEvento, data, luogo, numeroInvitati) e i menu (codMenu, nome, prezzoPersona). Ogni evento è organizzato per un solo cliente e un cliente può organizzare più eventi. Ogni evento prevede un solo menu, mentre lo stesso menu può essere previsto in più eventi. I piatti (codPiatto, nome, portata) compaiono in più menu e un menu contiene più piatti; di ogni presenza si registra l’ordine di servizio. Tradurre il modello in modello logico.
Cliente Evento Menu Piatto Organizza Prevede (0,n) (1,1) (1,1) (1,n) Composizione (1,n) (0,n) ordine partitaIVA ragioneSociale telefono codEvento data luogo numeroInvitati codMenu nome prezzoPersona codPiatto nome portata
Modello E-R dell’esercizio 18.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — niente da ristrutturare: nessun attributo composto, multivalore o generalizzazione.
  2. Passo 2 — quattro entità → quattro tabelle: Cliente, Evento, Menu, Piatto.
  3. Passo 3 — Organizza (1:n) mette partitaIVA(FK) in Evento; Prevede (1:n) mette codMenu(FK) in Evento: entrambe le FK vanno in coda, dopo gli attributi propri.
  4. Passo 3 (continua) — Composizione è n:n con attributo proprio: nuova tabella con PK(codMenu, codPiatto), l’attributo ordine e le due FK.
Soluzione
Cliente  (partitaIVA(PK), ragioneSociale, telefono)
Menu  (codMenu(PK), nome, prezzoPersona)
Piatto  (codPiatto(PK), nome, portata)
Evento  (codEvento(PK), data, luogo, numeroInvitati, partitaIVA(FK), codMenu(FK))
Composizione  (PK(codMenu, codPiatto), ordine, codMenu(FK), codPiatto(FK))
Da scrivere così
Cliente (partitaIVA(PK), ragioneSociale, telefono)
Menu (codMenu(PK), nome, prezzoPersona)
Piatto (codPiatto(PK), nome, portata)
Evento (codEvento(PK), data, luogo, numeroInvitati, partitaIVA(FK), codMenu(FK))
Composizione (PK(codMenu, codPiatto), ordine, codMenu(FK), codPiatto(FK))

Esercizio 19 — Un’associazione 1:1Alta

1:1n:n con attributo3 entità
TestoUna settimana della moda registra gli stilisti (codStilista, nome, cognome) e le sfilate (codSfilata, data, città). Ogni sfilata è allestita da un solo stilista e ogni stilista allestisce al massimo una sfilata. Ogni sfilata presenta più capi (codCapo, descrizione, prezzo) e un capo può essere presentato in più sfilate; di ogni presentazione si registra il numero progressivo di uscita in passerella. Tradurre il modello in modello logico.
Stilista Sfilata Capo Organizza Presenta codStilista nome cognome codSfilata citta data codCapo descrizione prezzo numUscita (0,1) (1,1) (1,n) (0,n)
Modello E-R dell’esercizio 19.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. L’associazione Organizza è 1:1: una sfilata ha un solo stilista e uno stilista ha al massimo una sfilata.
  2. È seconda strategia — (1,1) da un solo lato: accanto a Stilista c’è (0,1), accanto a Sfilata c’è (1,1). Si tengono due tabelle e la FK va nella tabella con cardinalità (1,1), cioè Sfilata.
  3. L’associazione Presenta è n:n con attributo: nuova tabella con PK = coppia delle PK e numUscita.
Soluzione — la FK sta in Sfilata
Stilista  (codStilista(PK), nome, cognome)
Sfilata  (codSfilata(PK), data, citta, codStilista(FK))
Capo  (codCapo(PK), descrizione, prezzo)
Presenta  (PK(codSfilata, codCapo), numUscita, codSfilata(FK), codCapo(FK))
Da scrivere così
Stilista  (codStilista(PK), nome, cognome)
Sfilata  (codSfilata(PK), data, citta, codStilista(FK))
Capo  (codCapo(PK), descrizione, prezzo)
Presenta  (PK(codSfilata, codCapo), numUscita, codSfilata(FK), codCapo(FK))

Esercizio 20 — 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 20.

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). Il Metodo 2 va invece scartato: Segue riguarda solo i medici, e fondendo le figlie nel padre il ricovero potrebbe riferirsi anche a un infermiere (il vincolo andrebbe perso). Resta possibile il Metodo 3 (associazioni 1:1) — trovi le due soluzioni.
  2. Passo 2 — con il Metodo 1 le tabelle sono Medico, Infermiere e Paziente; 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 3 punta a Medico, non a Personale: solo i medici seguono i ricoveri.
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 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 21 — Generalizzazione e entità deboleAlta

entità figlieentità deboleentrambi
TestoUna casa di produzione registra il personale (codiceFiscale, nome, cognome), distinti in registi, di cui interessa il numero di film diretti, e attori, di cui interessa l’altezza: ogni persona del personale è o regista o attore (copertura totale ed esclusiva). Le produzioni (codProduzione, titolo, anno) possono avere più contratti. I contratti sono stipulati con i registi: un contratto ha un numero progressivo all’interno del regista, una data di stipula e un compenso, e riguarda una sola produzione. Tradurre il modello in modello logico applicando il Metodo 1 — eliminazione dell’entità padre.
Personale Regista Attore Contratto Produzione Stipula (0,n) (1,1) Riguarda (1,1) (0,n) (t,e) codiceFiscale nome cognome numFilmDiretti altezza numProgressivo dataStipula compenso codProduzione titolo anno
Modello E-R dell’esercizio 21.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è totale ed esclusiva (t,e) e il testo richiede il Metodo 1: Personale sparisce e ogni figlia diventa una tabella che ripete gli attributi comuni, con l’identificatore rinominato (codiceFiscaleRegista / codiceFiscaleAttore). Resta possibile il Metodo 3 (associazioni 1:1). Il Metodo 2 qui è sbagliato: fondendo Regista e Attore in Personale, Contratto dovrebbe riferirsi a Personale e nulla impedirebbe di stipulare un contratto con un attore; il fatto che il contratto riguardi «solo registi» non sarebbe più rappresentato nel modello E-R ristrutturato.
  2. Passo 2 — con il Metodo 1 le tabelle sono Regista, Attore e Produzione; Contratto è un’entità debole, quindi il suo scheletro di PK è la chiave parziale numProgressivo più la PK di Regista.
  3. Passo 3 — l’associazione identificante Stipula non crea una tabella: la PK di Contratto diventa PK(codiceFiscaleRegista, numProgressivo).
  4. L’associazione Riguarda 1:n mette la FK codProduzione in Contratto (accanto a Contratto c’è (1,1), accanto a Produzione (0,n)).
  5. Nel Metodo 3 le figlie hanno PK = FK verso il padre, quindi Contratto può riferirsi direttamente a Regista senza perdere il vincolo.
Metodo 1 — Eliminazione dell’entità padre (scelta richiesta)
Produzione  (codProduzione(PK), titolo, anno)
Regista  (codiceFiscaleRegista(PK), nome, cognome, numFilmDiretti)
Attore  (codiceFiscaleAttore(PK), nome, cognome, altezza)
Contratto  (PK(codiceFiscaleRegista, numProgressivo), dataStipula, compenso, codiceFiscaleRegista(FK), codProduzione(FK))
Metodo 3 — Associazioni 1:1
Produzione  (codProduzione(PK), titolo, anno)
Personale  (codiceFiscale(PK), nome, cognome)
Regista  (codiceFiscale(PK), numFilmDiretti, codiceFiscale(FK))
Attore  (codiceFiscale(PK), altezza, codiceFiscale(FK))
Contratto  (PK(codiceFiscale, numProgressivo), dataStipula, compenso, codiceFiscale(FK), codProduzione(FK))
Da scrivere così
Produzione (codProduzione(PK), titolo, anno)
Regista (codiceFiscaleRegista(PK), nome, cognome, numFilmDiretti)
Attore (codiceFiscaleAttore(PK), nome, cognome, altezza)
Contratto (PK(codiceFiscaleRegista, numProgressivo), dataStipula, compenso, codiceFiscaleRegista(FK), codProduzione(FK))

Esercizio 22 — Entità debole di una generalizzazioneAlta

entità figlieentità deboledebole + generalizzazionegeneralizzazione1:n
TestoUna catena di palestre registra i corsi (codCorso, nome, livello). I corsi si dividono in collettivi, di cui interessa il numero massimo di partecipanti, e individuali, di cui interessa la durata in minuti: ogni corso è o collettivo o individuale (copertura totale ed esclusiva). Di ogni corso si tengono più sedute, identificate da un numero progressivo interno al corso, di cui interessa la data e l’aula. Ogni corso è tenuto da un solo istruttore (matricola, nome, cognome) e un istruttore tiene più corsi. Tradurre il modello in modello logico usando uno dei tre metodi per la generalizzazione.
Corso codCorso nome livello (t,e) Collettivo Individuale maxPartecipanti durataMinuti Tenuto (1,1) (1,n) Istruttore matricola nome cognome Identifica (1,n) (1,1) Seduta numSeduta data aula
Modello E-R dell’esercizio 22.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Due costrutti insieme: una generalizzazione (t,e) sulle figlie e un’entità debole che dipende dal padre della generalizzazione.
  2. Con il Metodo 1 il costo è doppio: oltre a duplicare l’associazione Tenuto devi duplicare anche l’entità debole, perché Seduta era identificata da un codice che non esiste più.
  3. Con il Metodo 2 nulla si duplica: un’unica tabella Corso con l’attributo di controllo, e Seduta resta identificata da quella PK. L’attributo di controllo si chiama con un nome che comincia con «tipo» (tipoFiglia, tipo, tipoCorso…): il correttore accetta tutte queste grafie.
  4. Con il Metodo 3 il padre resta, quindi Seduta continua a puntare a Corso; le figlie hanno PK = PK del padre, che è anche FK. Qui tipoFiglia è ridondante e si può omettere: il correttore accetta entrambe le forme.
  5. Nel Metodo 1 l’identificatore si può rinominare (codCorsoC / codCorsoI) oppure lasciare com’è: con copertura esclusiva le due tabelle figlie non si pestano i piedi, e il correttore accetta entrambe le forme.
Metodo 2 — le entità figlie rientrano nel padre
Istruttore  (matricola(PK), nome, cognome)
Corso  (codCorso(PK), nome, livello, maxPartecipanti, durataMinuti, tipoFiglia, matricola(FK))
Seduta  (PK(codCorso, numSeduta), data, aula, codCorso(FK))
Metodo 1 — eliminazione dell’entità padre
Istruttore  (matricola(PK), nome, cognome)
Collettivo  (codCorso(PK), nome, livello, maxPartecipanti, matricola(FK))
Individuale  (codCorso(PK), nome, livello, durataMinuti, matricola(FK))
SedutaCollettiva  (PK(codCorso, numSeduta), data, aula, codCorso(FK))
SedutaIndividuale  (PK(codCorso, numSeduta), data, aula, codCorso(FK))
Metodo 1 — variante accettata, identificatore rinominato
Istruttore  (matricola(PK), nome, cognome)
Collettivo  (codCorsoC(PK), nome, livello, maxPartecipanti, matricola(FK))
Individuale  (codCorsoI(PK), nome, livello, durataMinuti, matricola(FK))
SedutaCollettiva  (PK(codCorsoC, numSeduta), data, aula, codCorsoC(FK))
SedutaIndividuale  (PK(codCorsoI, numSeduta), data, aula, codCorsoI(FK))
Metodo 3 — associazioni 1:1 tra padre e figlie
Istruttore  (matricola(PK), nome, cognome)
Corso  (codCorso(PK), nome, livello, tipoFiglia, matricola(FK))
Collettivo  (codCorso(PK), maxPartecipanti, codCorso(FK))
Individuale  (codCorso(PK), durataMinuti, codCorso(FK))
Seduta  (PK(codCorso, numSeduta), data, aula, codCorso(FK))
Da scrivere così
Istruttore  (matricola(PK), nome, cognome)
Corso  (codCorso(PK), nome, livello, maxPartecipanti, durataMinuti, tipoFiglia, matricola(FK))
Seduta  (PK(codCorso, numSeduta), data, aula, codCorso(FK))

Esercizio 23 — Multivalore ed entità deboleAlta

multivaloreentità debole2 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 (1,n) piano superficie (1,n) (1,1) numeroInterno
Modello E-R dell’esercizio 23.

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 24 — Multivalore ed entità debole insiemeAlta

multivaloreentità debole3 entità1:n
TestoUn ufficio postale registra i propri mittenti (codMittente, nome, cognome) e le raccomandate spedite. Ogni raccomandata è intestata a un solo mittente; di ogni raccomandata si registra il numero progressivo interno al mittente, la data di spedizione e il peso. Di ogni mittente l’ufficio registra uno o più numeri di telefono. Ogni raccomandata è spedita a una sola località (codCAP, denominazione, provincia) e verso una località partono più raccomandate. Tradurre il modello in modello logico.
Mittente codMittente nome cognome Telefono (1,n) Intestata (1,n) (1,1) Raccomandata numProgressivo dataSpedizione peso Destinata (1,1) (1,n) Localita codCAP denominazione provincia
Modello E-R dell’esercizio 24.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Attenzione ai nomi: l’entità si chiama Localita, il suo identificatore è codCAP e denominazione è un attributo semplice.
  2. Due ristrutturazioni distinte: il multivalore telefono genera una nuova entità Telefono, con PK il numero stesso e FK al mittente; Raccomandata è debole perché il suo numero progressivo ha senso solo dentro un mittente.
  3. La PK di Raccomandata è: codMittente + numProgressivo.
  4. Le FK di Raccomandata sono due — una al mittente (che però è già nella PK) e una alla località — e vanno entrambe in coda.
Soluzione
Localita  (codCAP(PK), denominazione, provincia)
Mittente  (codMittente(PK), nome, cognome)
Raccomandata  (PK(codMittente, numProgressivo), dataSpedizione, peso, codMittente(FK), codCAP(FK))
Telefono  (numero(PK), codMittente(FK))
Da scrivere così
Localita  (codCAP(PK), denominazione, provincia)
Mittente  (codMittente(PK), nome, cognome)
Raccomandata  (PK(codMittente, numProgressivo), dataSpedizione, peso, codMittente(FK), codCAP(FK))
Telefono  (numero(PK), codMittente(FK))

Esercizio 25 — Multivalore ed entità deboleAlta

multivaloreentità debole4 entità
TestoUna clinica odontoiatrica registra i pazienti (codPaziente, nome, cognome) e i dentisti (codDentista, nome, cognome). Ogni paziente è seguito da un solo dentista e un dentista segue più pazienti. Di ogni paziente la clinica registra uno o più indirizzi email. Le prestazioni sono identificate dal numero progressivo all’interno del paziente e riportano data e importo; prestazioni di pazienti diversi possono avere lo stesso numero progressivo. Tradurre il modello in modello logico.
Dentista Paziente Prestazione Segue (1,n) (1,1) Riceve (0,n) (1,1) codDentista nome cognome codPaziente nome cognome email (1,n) numProgressivo data importo
Modello E-R dell’esercizio 25.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — l’attributo email è multivalore: diventa una nuova entità Email, con l’indirizzo come PK e una FK verso Paziente.
  2. Passo 2 — Paziente e Dentista sono entità forti; Prestazione è un’entità debole identificata da Paziente tramite la chiave parziale numProgressivo.
  3. Passo 3 — l’associazione Segue 1:n mette la FK in Paziente; l’associazione identificante Riceve non crea tabelle: la PK di Prestazione è PK(codPaziente, numProgressivo).
  4. La tabella Email deriva dal multivalore: la sua PK è il valore stesso (indirizzo) e la FK è codPaziente, la chiave del paziente a cui appartiene l’indirizzo.
Soluzione
Dentista  (codDentista(PK), nome, cognome)
Paziente  (codPaziente(PK), nome, cognome, codDentista(FK))
Email  (indirizzo(PK), codPaziente(FK))
Prestazione  (PK(codPaziente, numProgressivo), data, importo, codPaziente(FK))
Da scrivere così
Dentista (codDentista(PK), nome, cognome)
Paziente (codPaziente(PK), nome, cognome, codDentista(FK))
Email (indirizzo(PK), codPaziente(FK))
Prestazione (PK(codPaziente, numProgressivo), data, importo, codPaziente(FK))

Esercizio 26 — Quattro entità: aeroportoAlta

4 entitàn:n con attributo1:n
TestoUn aeroporto registra le compagnie (codCompagnia, nome, nazione), gli aerei (codAereo, modello, numeroPosti) e i voli (codVolo, data, oraPartenza, destinazione). Ogni aereo appartiene a una sola compagnia e una compagnia possiede più aerei. Ogni volo è operato da un solo aereo e un aereo può operare più voli. I passeggeri (codPasseggero, nome, cognome) prenotano i voli; di ogni prenotazione si registrano il posto e il prezzo. Tradurre il modello in modello logico.
Compagnia Aereo Volo Passeggero Possiede Effettua (1,n) (1,1) (1,n) (1,1) Prenota (0,n) (0,n) posto prezzo codCompagnia nome nazione codAereo modello numeroPosti codVolo data oraPartenza destinazione codPasseggero nome cognome
Modello E-R dell’esercizio 26.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — niente da ristrutturare: nessun attributo composto, multivalore o generalizzazione.
  2. Passo 2 — quattro entità → quattro tabelle: Compagnia, Aereo, Volo, Passeggero.
  3. Passo 3 — Possiede (1:n) mette codCompagnia(FK) in Aereo; Effettua (1:n) mette codAereo(FK) in Volo.
  4. Passo 3 (continua) — Prenota è n:n con attributi propri: nuova tabella con PK(codPasseggero, codVolo), gli attributi posto e prezzo, poi le due FK.
Soluzione
Compagnia  (codCompagnia(PK), nome, nazione)
Aereo  (codAereo(PK), modello, numeroPosti, codCompagnia(FK))
Volo  (codVolo(PK), data, oraPartenza, destinazione, codAereo(FK))
Passeggero  (codPasseggero(PK), nome, cognome)
Prenotazione  (PK(codPasseggero, codVolo), posto, prezzo, codPasseggero(FK), codVolo(FK))
Da scrivere così
Compagnia (codCompagnia(PK), nome, nazione)
Aereo (codAereo(PK), modello, numeroPosti, codCompagnia(FK))
Volo (codVolo(PK), data, oraPartenza, destinazione, codAereo(FK))
Passeggero (codPasseggero(PK), nome, cognome)
Prenotazione (PK(codPasseggero, codVolo), posto, prezzo, codPasseggero(FK), codVolo(FK))

Esercizio 27 — Generalizzazione e associazione n:nAlta

entità figliegeneralizzazionen:n con attributo
TestoUn museo registra le opere (codOpera, titolo, anno) e gli artisti (codArtista, nome, nazionalità). Le opere si dividono in dipinti, di cui interessa la tecnica, e sculture, di cui interessa il materiale: ogni opera è o un dipinto o una scultura (copertura totale ed esclusiva). Un artista realizza più opere e un’opera può essere realizzata da più artisti; di ogni collaborazione si registra il ruolo. Tradurre il modello in modello logico applicando il Metodo 2 — eliminazione delle entità figlie.
Artista Opera Dipinto Scultura Realizza (0,n) (0,n) ruolo (t,e) codArtista nome nazionalita codOpera titolo anno tecnica materiale
Modello E-R dell’esercizio 27.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Passo 1 — la copertura è totale ed esclusiva (t,e) e il testo richiede il Metodo 2: le figlie rientrano nel padre Opera, che conserva gli attributi comuni e acquista tecnica, materiale e l’attributo di controllo tipoFiglia.
  2. Passo 2 — Artista e Opera diventano tabelle con il proprio identificatore come PK; il nome dell’attributo di controllo è libero purché cominci con «tipo».
  3. Passo 3 — Realizza è n:n con attributo proprio: nasce una nuova tabella con PK(codOpera, codArtista), l’attributo ruolo e le due FK.
  4. Con il Metodo 2 le colonne tecnica e materiale restano vuote sulle righe dell’altra figlia: è il prezzo da pagare per una sola tabella.
Metodo 2 — Eliminazione delle entità figlie
Artista  (codArtista(PK), nome, nazionalita)
Opera  (codOpera(PK), titolo, anno, tecnica, materiale, tipoFiglia)
Realizza  (PK(codOpera, codArtista), ruolo, codOpera(FK), codArtista(FK))
Da scrivere così
Artista (codArtista(PK), nome, nazionalita)
Opera (codOpera(PK), titolo, anno, tecnica, materiale, tipoFiglia)
Realizza (PK(codOpera, codArtista), ruolo, codOpera(FK), codArtista(FK))

Esercizio 28 — Generalizzazione e n:n con attributoAlta

entità figliegeneralizzazionen:n con attributo
TestoUn’agenzia immobiliare registra gli immobili (codImmobile, indirizzo, superficieMq, canoneMensile). Gli immobili si dividono in uffici, di cui interessa il numero di posti, e negozi, di cui interessa la larghezza della vetrina: ogni immobile è o un ufficio o un negozio (copertura totale ed esclusiva). Gli inquilini (codInquilino, nome, cognome) prendono in affitto gli immobili: un inquilino può avere in affitto più immobili e un immobile può essere affittato a più inquilini, e di ogni contratto si registrano la data di inizio e la data di fine; ogni inquilino affitta un determinato immobile al più una volta. Tradurre il modello in modello logico con il Metodo 2 oppure con il Metodo 3.
Immobile Ufficio Negozio Inquilino Affitta codImmobile indirizzo superficieMq canoneMensile numPosti larghezzaVetrina codInquilino nome cognome dataInizio dataFine (0,n) (0,n) (t,e)
Modello E-R dell’esercizio 28.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. La copertura è totale ed esclusiva, quindi anche il Metodo 1 sarebbe lecito: ma l’n:n Affitta si raddoppierebbe (una tabella per gli uffici, una per i negozi) — è il motivo per cui qui conviene il 2 o il 3.
  2. Metodo 2: un’unica tabella Immobile con tipoFiglia; numero di posti e larghezza della vetrina restano nulli a metà. L’attributo di controllo si chiama con un nome che comincia con «tipo» (tipoFiglia, tipo, tipoImmobile…): il correttore accetta tutte queste grafie.
  3. Metodo 3: il padre tiene gli attributi comuni, le figlie solo il proprio attributo specifico, con PK = PK del padre che è anche FK; l’n:n Affitta non si duplica, perché il padre è ancora lì. Qui tipoFiglia è ridondante e si può omettere: il correttore accetta entrambe le forme.
  4. In entrambi i casi Affitta ha PK = coppia delle PK di Inquilino e della tabella che rappresenta l’immobile. Prima di fissare la PK, ricontrolla il testo: la stessa coppia inquilino–immobile non può presentarsi più volte (il testo non lo prevede), quindi la PK = coppia delle PK va bene.
Metodo 2 — le entità figlie rientrano nel padre
Inquilino  (codInquilino(PK), nome, cognome)
Immobile  (codImmobile(PK), indirizzo, superficieMq, canoneMensile, numPosti, larghezzaVetrina, tipoFiglia)
Affitta  (PK(codInquilino, codImmobile), dataInizio, dataFine, codInquilino(FK), codImmobile(FK))
Metodo 3 — associazioni 1:1 tra padre e figlie
Inquilino  (codInquilino(PK), nome, cognome)
Immobile  (codImmobile(PK), indirizzo, superficieMq, canoneMensile, tipoFiglia)
Ufficio  (codImmobile(PK), numPosti, codImmobile(FK))
Negozio  (codImmobile(PK), larghezzaVetrina, codImmobile(FK))
Affitta  (PK(codInquilino, codImmobile), dataInizio, dataFine, codInquilino(FK), codImmobile(FK))
Da scrivere così
Inquilino  (codInquilino(PK), nome, cognome)
Immobile  (codImmobile(PK), indirizzo, superficieMq, canoneMensile, numPosti, larghezzaVetrina, tipoFiglia)
Affitta  (PK(codInquilino, codImmobile), dataInizio, dataFine, codInquilino(FK), codImmobile(FK))

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

entità figlieentità deboleentrambi5 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, ma una data copia al più una volta; 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 29.

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ù.
  6. Il nome dell’attributo di controllo è libero purché cominci con «tipo» (tipoFiglia, tipo, tipoOpera…): il correttore accetta tutte queste grafie.
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  (codiceLibro(PK), titolo, numPagine)
Rivista  (codiceRivista(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 30 — Generalizzazione parziale e associazione n:nAlta

entità figlien:n5 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, ma ogni dipendente usa un dato mezzo al più una volta; 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 30.

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.
  5. Nel Metodo 2 il nome dell’attributo di controllo è libero purché cominci con «tipo» (tipoFiglia, tipo, tipoMezzo…): il correttore accetta tutte queste grafie.
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 31 — Cinque entità e un n:n con attributoAlta

5 entitàn:n con attributo1:n
TestoUna società organizzatrice registra le gare (codGara, nome, data). Ogni gara si svolge su un solo circuito (codCircuito, nome, città, lunghezza) e su un circuito si svolgono più gare. Ogni gara è aperta a una sola categoria (codCategoria, denominazione, etàMinima) e una categoria ha più gare. I ciclisti (codTessera, nome, cognome, nazionalità) partecipano alle gare: un ciclista partecipa a più gare e una gara ha più ciclisti, e di ogni partecipazione si registrano il piazzamento e il tempo impiegato. Ogni ciclista appartiene a una sola squadra (codSquadra, nome, nazione) e una squadra ha molti ciclisti. Tradurre il modello in modello logico.
Circuito SiSvolge Gara Appartiene Categoria Iscrizione Ciclista Squadra Milita codCircuito nome citta lunghezza codGara nome data codCategoria denominazione etaMinima codSquadra nome nazione codTessera nome cognome nazionalita tempo piazzamento (1,n) (1,1) (1,1) (1,n) (0,n) (0,n) (1,n) (1,1)
Modello E-R dell’esercizio 31.

La tua traduzione

Mostra svolgimento e soluzione
Svolgimento
  1. Cinque entità → cinque tabelle, più una tabella generata dall’associazione n:n.
  2. Attenzione a Gara: ha due FK (una al circuito, una alla categoria) ed entrambe vanno in coda.
  3. L’associazione Iscrizione è n:n con attributi: nuova tabella con PK = coppia delle PK, più piazzamento e tempo. La PK resta la coppia (ciclista, gara): è quella che garantisce una sola riga per partecipazione.
  4. L’associazione Milita è 1:n: la FK alla squadra va in Ciclista, la tabella dal lato con massimo 1 (accanto a Ciclista c’è (1,1)).
Soluzione
Squadra  (codSquadra(PK), nome, nazione)
Categoria  (codCategoria(PK), denominazione, etaMinima)
Circuito  (codCircuito(PK), nome, citta, lunghezza)
Ciclista  (codTessera(PK), nome, cognome, nazionalita, codSquadra(FK))
Gara  (codGara(PK), nome, data, codCircuito(FK), codCategoria(FK))
Iscrizione  (PK(codTessera, codGara), piazzamento, tempo, codTessera(FK), codGara(FK))
Da scrivere così
Squadra  (codSquadra(PK), nome, nazione)
Categoria  (codCategoria(PK), denominazione, etaMinima)
Circuito  (codCircuito(PK), nome, citta, lunghezza)
Ciclista  (codTessera(PK), nome, cognome, nazionalita, codSquadra(FK))
Gara  (codGara(PK), nome, data, codCircuito(FK), codCategoria(FK))
Iscrizione  (PK(codTessera, codGara), piazzamento, tempo, codTessera(FK), codGara(FK))

Esercizio 32 — 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 (codFiscale, 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 32.

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 quattro associazioni 1:n Ripara (officina), Esegue (meccanico), Riguarda (veicolo) e Richiede (cliente) 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 33 — 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 (codFiscale, 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 33.

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 34 — Sei entità: lezioniAlta

6 entitàn:n con attributo1:n
TestoUn istituto scolastico registra le lezioni (idLezione). 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 idLezione 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 (1,n)
Modello E-R dell’esercizio 34.

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): Lezione ha come identificatore idLezione.
  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  (idLezione(PK), codIstituto(FK), codDocente(FK), codAula(FK), codMateria(FK))
Partecipa  (PK(idLezione, matricola), idLezione(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 (idLezione(PK), codIstituto(FK), codDocente(FK), codAula(FK), codMateria(FK))
Partecipa (PK(idLezione, matricola), idLezione(FK), matricola(FK))
Telefono (numero(PK), matricola(FK))

Esercizio 35 — 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 codSpedizione
Modello E-R dell’esercizio 35.

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))