Manuale di teoria

Teoria Informatica

Database · Modello E-R · Modello Logico

1 Introduzione Database

Definizione — DBMS Un DBMS (Database Management System) è un software che permette di creare, organizzare, gestire, interrogare e proteggere una base di dati in modo efficiente e sicuro.
Definizione — Dato Un dato è un valore alfanumerico privo di contesto, ovvero per cui non è noto un contesto che permetta di associare un significato al dato stesso.
Definizione — Informazione Un’informazione è un dato contestualizzato, ovvero fornito di un contesto che permette di associargli un significato e che quindi trasforma il dato in una fonte di conoscenza.
DATO + CONTESTO = INFORMA- ZIONE
Il contesto trasforma il dato in informazione.

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

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

2 I Database

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

Le 4 fasi di creazione di un database

La creazione di un database prevede 4 fasi in cui l’output finale di ogni fase è input della fase successiva:

Analisi dei requisiti Progettazione concettuale Schema concettuale Progettazione logica Schema logico Progettazione fisica Schema fisico
Riassunto delle 4 fasi: l’output di ogni fase è l’input della fase successiva.
  1. Analisi dei requisiti: in questa fase il progettista analizza le richieste del committente.
  2. Progettazione concettuale: in questa fase il progettista compie un lavoro di astrazione e generalizzazione dei concetti che formano la realtà in esame (la realtà in esame viene chiamata minimondo) e ha come risultato finale la creazione di uno schema grafico che rappresenta la realtà di cui si vogliono memorizzare i dati. Questo schema grafico si chiama modello concettuale. Generalmente alla fine di questa fase il progettista illustra il modello concettuale al committente. Il modello concettuale è indipendente dal tipo di database utilizzato.
  3. Traduzione dal modello concettuale in modello logico: in questa fase il progettista traduce il modello concettuale in uno schema che adotta le strutture previste dal tipo di database utilizzato. Tale schema prende il nome di modello logico ed è il risultato finale di questa fase. Il modello logico è indipendente dall’implementazione fisica del database, ovvero dalle modalità con cui intendiamo memorizzare fisicamente i dati nei dispositivi di elaborazione.
  4. Creazione del modello fisico: in questa fase il progettista si occupa della memorizzazione nelle memorie di massa dei dati. Si parla di implementazione fisica del database e ha come risultato la creazione dello schema fisico.

3 E-R — Modello Concettuale

Il modello concettuale che noi useremo è il modello E-R (Entity-Relationship). Entity sta per entità, relationship sta per relazione ma in realtà si parla spesso di associazione e di modello entità-associazione. Il modello E-R si basa su 4 costrutti:

  1. Entità: l’entità è un’astrazione che rappresenta una categoria di oggetti della realtà che hanno caratteristiche comuni (attributi). Essa ha un nome (inizia con la lettera maiuscola ed è un nome singolare) e ha un’esistenza autonoma.
  2. Attributo: caratteristica dell’entità. Un attributo è caratterizzato da:
    2a) nome
    2b) tipo (numerico, stringa, data/ora)
    2c) dimensione (numero di caratteri o cifre)
    2d) opzionalità (ovvero se è necessario o meno che l’attributo abbia un valore).
  3. Associazione: il legame logico tra entità. L’associazione ha un nome e può avere attributi.
  4. Identificatore: l’attributo (o l’insieme degli attributi) che identifica univocamente un’istanza dell’entità.

Esempi di entità: studente, classe, docente, auto, libro

Convenzioni grafiche

STUDENTE NOME COGNOME MATRICOLA
Esempio: entità STUDENTE con attributi NOME, COGNOME e identificatore MATRICOLA (pallino pieno).
STUDENTE NOME COGNOME MATRICOLA Iscrizione CLASSE nomeClasse numeroAula NumeroAlunni
Esempio: le entità STUDENTE e CLASSE collegate dall’associazione Iscrizione.
Definizione — Istanza Un’istanza di un’entità è un oggetto concreto della realtà che si ottiene dando dei valori ai suoi attributi. Un’istanza dell’entità studente ad esempio è Marco Rossi M3567. L’identificatore di un’entità è tale che non esistono due istanze diverse che hanno identificatore con lo stesso valore.

Entità deboli

Definizione — Entità debole Un’entità si dice debole se non esiste attributo o insieme di attributi che costituiscono un identificatore dell’entità.
Attenzione — Minimondo diverso Negli esempi seguenti il nome STUDENTE è riusato in un minimondo diverso (università): qui la matricola da sola non basta perché stessa matricola può esistere in università diverse. Non confondere con l’entità STUDENTE con identificatore MATRICOLA vista prima.
STUDENTE FACOLTÀ MATRICOLA ISCRIZIONE UNIVERSITA' NOME CITTA'
Studente è un’entità debole: il pallino pieno collegato all’associazione Iscrizione rappresenta l’identificatore dell’entità debole, composto dalla chiave parziale (Matricola) e dall’identificatore dell’entità forte (Nome di Università).
Posizione NUMERO RIPIANO NUMERO SCAFFALE RIFERIMENTO BIBLIOTECA NOME CITTA'
Posizione è un’entità debole: il pallino pieno collegato all’associazione Riferimento rappresenta l’identificatore dell’entità debole, composto dalla chiave parziale (NumeroRipiano + NumeroScaffale) e dall’identificatore dell’entità forte (Nome di Biblioteca).

Generalizzazione e specializzazione

Quando un’entità presenta uno o più attributi che sono valorizzabili solo in un sottoinsieme proprio delle istanze dell’entità, è preferibile considerare una sottoentità che contenga solo le istanze valorizzabili. In questo caso si parla di generalizzazione (o entità padre) e specializzazione (o entità figlia).

Esempio Consideriamo un’entità Socio di un circolo sportivo che può partecipare al circolo come tennista (con attributi specifici numero tornei vinti e colpo) e/o come calciatore (con attributi specifici numero gol e ruolo). In un modello concettuale di questo tipo vi sono istanze (soci del circolo) che hanno attributi non valorizzabili (il tennista non ha né ruolonumero gol valorizzabili). In questo caso è preferibile dividere l’entità in due sottoentità: la sottoentità tennista e la sottoentità calciatore. Socio verrà chiamata generalizzazione o entità padre; le sottoentità tennista e calciatore verranno chiamate specializzazioni o entità figlie.
SOCIO NOME COGNOME NUMERO TESSERA NUMERO GOL RUOLO COLPO NUMERO TORNEI VINTI
L’entità SOCIO contiene attributi valorizzabili solo per alcuni soci: la croce indica la divisione in due sottoentità.

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

SOCIO NOME COGNOME NUMERO TESSERA (t,s) Copertura CALCIATORE NUMERO GOL RUOLO TENNISTA NUMERO TORNEI VINTI COLPO
Generalizzazione Socio con specializzazioni Calciatore e Tennista; la coppia (t,s) indica la copertura.
Definizione — Copertura La copertura di una generalizzazione è una coppia (t/p, e/s), ove il primo elemento della coppia fa riferimento all’unione delle istanze delle entità figlie ed è totale o parziale (totale se l’unione di tutte le istanze delle entità figlie è l’insieme di tutte le istanze dell’entità padre: nell’esempio è totale se si fa l’ipotesi che un socio debba essere tennista e/o calciatore, parziale se si fa l’ipotesi che esistano soci che non sono né calciatori né tennisti); il secondo elemento fa riferimento all’intersezione ed è esclusiva o sovrapposta (nell’esempio è sovrapposta se si fa l’ipotesi che esistano calciatori che sono anche tennisti, ed è esclusiva se si fa l’ipotesi che non esistano calciatori che sono tennisti).

Altro esempio di generalizzazione:

STUDENTE NOME COGNOME MATRICOLA (p,s) DSA MISURE COMPENSATIVE MISURE DISPENSATIVE PERMESSO INGRESSO USCITA TRINITY LIVELLO LINGUA
Generalizzazione Studente con tre sottoentità: DSA, Permesso e Trinity; copertura (p,s).
Nota — Sottoinsieme Quando c’è una sola sottoentità figlia, si parla di sottoinsieme (quindi il sottoinsieme è l’unica sottoentità figlia di una generalizzazione).
DIPENDENTE MATRICOLA TELEFONO NOME COGNOME TEMPO DETERMINATO DURATA CONTRATTO
Esempio di sottoinsieme: Tempo determinato è l’unica sottoentità figlia di Dipendente.

Associazione ricorsiva

L’associazione ricorsiva è un’associazione tra istanze della stessa entità e si usa generalmente quando c’è una gerarchia.

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

Associazioni binarie, ternarie e n-arie

Un’associazione si dice binaria se collega logicamente due entità. Un’associazione si dice ternaria se lega logicamente tre entità. In generale un’associazione si dice n-aria se collega n entità. Per semplicità didattica, nei diagrammi ternari di questo manuale omettiamo le cardinalità: la traduzione nel modello logico avviene comunque con una nuova tabella come per le n:n.

Esempio — Associazione ternaria In un’associazione ternaria un’istanza di un’entità è legata a una coppia formata da istanze delle altre due entità: esempio, il venditore V1 è legato alla coppia (Amministratore, Samsung S1009) nel senso che il venditore V1 fornisce la stampante Samsung S1009 al dipartimento Amministrazione.
Dipartimento Nome NumDipendenti Fornitura Prodotto IdProdotto Prezzo Venditore PIVA Nome
Associazione ternaria Fornitura tra Dipartimento, Prodotto e Venditore.

Esempio di associazione binaria:

Prezzo Libro ISBN Titolo Scrittura Autore IdAutore Nome
Associazione binaria Scrittura tra Libro e Autore.

Cardinalità delle associazioni binarie

Le cardinalità di un’associazione binaria sono due coppie, ognuna delle quali legata a un’entità (la prima coppia indica il numero minimo ed il numero massimo di istanze della seconda entità legate a un’istanza della prima entità ed è posta accanto alla prima entità; la seconda coppia indica il numero minimo ed il numero massimo di istanze della prima entità legate a un’istanza della seconda entità ed è posta accanto alla seconda entità).

In riferimento alle cardinalità le associazioni possono essere:

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

In questo tipo di associazione ogni istanza della prima entità è legata al più a un’istanza della seconda entità.

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

Altro esempio:

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

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

In questo tipo di associazione ogni istanza della prima entità è collegata al più a un’istanza della seconda entità ed esiste almeno un’istanza della seconda entità che è collegata a più istanze della prima entità.

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

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

Un’associazione molti a molti è un’associazione in cui esiste almeno un’istanza della prima entità collegata a più istanze della seconda entità e viceversa.

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

Attributi composti e multivalore

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

In generale la cardinalità di un attributo è la coppia di numeri che indicano il numero minimo e massimo di valori che l’attributo può avere. Nel caso di un attributo non multivalore (un attributo che non è multivalore si chiama attributo singolo) la cardinalità è sottintesa e può essere non indicata.

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

Il dominio

Definizione — Dominio Il dominio di un attributo è l’insieme di tutti i possibili valori di un attributo.

4 Il Modello Logico

Il modello logico è uno schema, non grafico, che rappresenta un database utilizzando le strutture previste dal tipo di database utilizzato. Noi utilizziamo il database relazionale, ideato dal signore E. F. Codd (ricercatore IBM) nel 1970 (54 anni fa) e basato sul concetto matematico di relazione. Parliamo in questo caso di modello logico relazionale.

Definizione — Relazione Si definisce relazione tra i domini D1, D2, … DN un qualunque sottoinsieme del prodotto cartesiano D1 × D2 × … × DN = {(X1, X2, … XN): X1∈D1, X2∈D2 … XN∈DN}.
Esempio

D1 = (FIAT, FORD, OPEL)    D2 = (TIPO, PUMA, CORSA)

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

R = {(x1,x2): x2 è un modello di x1} = {(FIAT,TIPO),(FORD,PUMA),(OPEL,CORSA)}

Le relazioni spesso vengono scritte in forma tabellare.

Esempio: relazione in forma tabellare
Marca (D1)Modello (D2)
FiatTipo
FordPuma
OpelCorsa
Definizione — Istanza di una relazione Si definisce istanza di una relazione un elemento della relazione, ovvero se rappresentiamo la relazione nella sua forma tabellare, una riga della tabella.
Studente Nome Cognome Telefono Email Data di Nascita Mario Rossi 333000111 mariorossiX @gmail.com 2007-11-15 Giovanni Bini 32211099 Gibi@iy. im 2006-12-26 …… Istanza dell’entità studente
Una riga della tabella è un’istanza della relazione.
Definizione — Cardinalità di una relazione Si definisce cardinalità di una relazione il numero di righe della tabella che rappresenta la relazione.
Definizione — Grado di una relazione Si definisce grado di una relazione il numero delle colonne della tabella che rappresenta la relazione.
grado = 2 Marca (D1) Modello (D2) Fiat Tipo Ford Puma Opel Corsa cardinalità = 3
Esempio 1 — grado = 2 (due colonne) e cardinalità = 3 (tre righe).
grado = 3 Matricola Nome Cognome M103 Mario Rossi M104 Giulia Bianchi M105 Lino Lini M106 Anna Rosi M107 Mino Mei cardinalità = 5
Esempio 2 — grado = 3 (tre colonne) e cardinalità = 5 (cinque righe).
Definizione — Superchiave Si definisce superchiave di una relazione un insieme di attributi che identificano univocamente un’istanza della relazione; l’insieme di tutti gli attributi è certamente una SUPERCHIAVE.
Definizione — Chiave candidata Si definisce chiave candidata una superchiave minimale, ovvero una superchiave che non ha un sottoinsieme proprio di attributi che è ancora superchiave. Un’entità può avere più chiavi candidate: ad esempio codice fiscale e telefono sono due chiavi candidate dell’entità Dipendente.
Definizione — Chiave primaria La chiave primaria di un’entità è la chiave candidata scelta dal progettista per identificare ogni istanza dell’entità considerata.

Un attributo di una relazione scritta in forma tabellare è l’intestazione di una colonna. In una tabella che rappresenta una relazione l’ordine delle colonne e delle righe non ha importanza; i valori all’interno di una colonna sono tutti dello stesso tipo e non ci sono due righe della tabella uguali.

Chiave esterna

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

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

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

Osserviamo che i valori della chiave primaria non possono ripetersi all’interno di una tabella. I valori della chiave esterna possono ripetersi ma, a differenza dell’esempio (la classe 3T non è presente nella tabella Classe), non dovrebbero esserci valori della chiave esterna che non sono presenti tra i valori della chiave primaria della tabella collegata.

Per evitare questo problema si pone un vincolo per cui non è possibile inserire una riga che presenta un valore della chiave esterna che non è presente tra i valori della chiave primaria della tabella collegata. Questo vincolo si chiama vincolo di integrità referenziale.

La tabella che contiene la chiave esterna viene chiamata tabella referenziante (detta anche tabella referenziale o slave): è quella che «punta» verso l’altra. La tabella la cui chiave primaria è usata dalla FK viene chiamata tabella referenziata (o master).

Vincoli

Esistono due tipi di vincolo:

Esame
IdEsame (PK)DataVotoLodeNumeroEsameMatricola (FK)
E10410/11/202326No3M105
E10610/04/202425No4M105
E10710/11/202430Si2M102
E10810/10/202332No6M104
E10920/09/202228Si5M104
E11023/12/202326No72M103

Osserviamo che la tabella presenta:

Errore 1: riga 6 (NumeroEsame: 72)
Errore 2: riga 4 (Voto: 32)
Errore 3: riga 5 (Voto: 28 and Lode=Si)

Il vincolo di dominio NumeroEsame>0 AND NumeroEsame<31 eviterebbe l’errore sul NumeroEsame (il vincolo di dominio riguarda un attributo: NUMEROESAME).

Il vincolo di dominio Voto>=18 AND Voto<=30 eviterebbe l’Errore 2 (Voto: 32). Il vincolo di tupla Lode="No" OR Voto=30 (cioè: se Lode è “Sì” allora Voto deve essere 30) eviterebbe l’Errore 3 (il vincolo di tupla riguarda gli attributi VOTO e LODE).

Notazione del modello logico relazionale

Nel modello logico relazionale le tabelle vengono scritte nella forma:

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

dove si indica con PK la chiave primaria (anche composta, es. PK(Matricola, IdEsame)) e con FK la chiave esterna. Questa notazione è usata in tutto il manuale, nella teoria e negli esercizi.

Procedimento di traduzione dal modello E-R al modello logico

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

  1. Passo 1 — Ristrutturazione (Regola 1): si eliminano i costrutti che il modello logico non rappresenta: attributo composto, attributo multivalore, generalizzazione. Si ottiene il modello E-R ristrutturato.
  2. Passo 2 — Traduzione delle entità: ogni entità del modello ristrutturato diventa una tabella con i propri attributi e il proprio identificatore come chiave primaria (PK). L’entità debole usa come PK la coppia PK dell’entità forte + chiave parziale (la chiave parziale è l’attributo dell’entità debole che, unito alla chiave primaria dell’entità forte, forma la chiave primaria dell’entità debole).
  3. Passo 3 — Traduzione delle associazioni (Regola 2): nel modello logico non esiste il rombo: ogni associazione va tradotta in tabelle e chiavi.
    • 1:n: nel modello logico l’associazione viene rappresentata con una FK aggiunta nella tabella referenziante, cioè quella dal lato con massimo 1 (es. Studente (1,1) → FK nomeClasse in Studente). Gli eventuali attributi dell’associazione vengono rappresentati nella stessa tabella, accanto alla FK.
    • n:n: nel modello logico l’associazione viene rappresentata con una nuova tabella col nome dell’associazione, con PK formata dalla coppia delle PK delle due entità (che sono anche due FK) più gli eventuali attributi dell’associazione.
    • Ternaria: nel modello logico l’associazione viene rappresentata con una nuova tabella la cui PK è la terna delle PK delle tre entità, più gli attributi dell’associazione.
    • 1:1: nel modello logico l’associazione viene rappresentata con fusione in un’unica tabella (solo se non crea molti valori nulli) oppure con una FK nella tabella con meno valori nulli (spesso con vincolo UNIQUE).
    • Ricorsiva: nel modello logico l’associazione viene rappresentata sdoppiando logicamente l’entità nei due ruoli e applicando il caso 1:n (con FK) o n:n (con nuova tabella) a seconda delle cardinalità.
    • Debole + identificante: nel modello logico l’associazione identificante viene rappresentata con la FK già contenuta nella PK composta della debole; non serve una tabella in più per l’associazione.
Modello E-R originale Passo 1 · Regola 1 Modello E-R ristrutturato senza composto, multivalore, generalizzazione Passo 2 · entità → tabelle (PK) Tabelle delle entità + debole: PK(CAP, nome) Passo 3 · Regola 2 Modello logico (PK, FK) 1:n · n:n · 1:1 · ternaria · ricorsiva
Procedimento in 3 passi: prima la Regola 1 (ristrutturazione), poi la Regola 2 (associazioni). Saltare il Passo 1 porta a FK verso tabelle destinate a sparire.
Esempio di lettura Negli esercizi 8–10 applichi prima la Regola 1 (telefono multivalore → entità Telefono, Indirizzo composto → colonne, generalizzazione → Metodo 1 o 2) e solo dopo la Regola 2 (FK o nuova tabella). Le soluzioni mostrano sempre i due momenti separati.

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

Costrutti da eliminare: attributo composto; attributo multivalore; generalizzazione.

Nell’applicare questa regola si ristruttura il modello E-R in modo tale da eliminare i costrutti non presenti nel modello logico (in questa fase generalmente si ottimizza pure il modello E-R per renderlo più efficiente in relazione allo spazio occupato dai dati, alla ridondanza dei dati e al tempo di accesso ai dati).

Eliminazione dell’attributo composto

Si elimina l’attributo composto sostituendolo con gli attributi atomici che lo compongono.

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

Eliminazione dell’attributo multivalore

Si sostituisce l’attributo multivalore con un’entità che è collegata all’entità che lo conteneva con un’associazione 1:n o n:n.

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

Eliminazione delle generalizzazioni

Per eliminare le generalizzazioni durante la creazione del modello E-R si possono seguire tre metodi alternativi. Non si sceglie a caso: prima leggi la copertura (t/p, e/s), poi guarda se le figlie hanno attributi o associazioni proprie, poi decidi cosa sei disposto ad accettare (valori nulli, tabelle in più, associazioni duplicate). In fondo a questa sezione c’è la tavola di scelta.

Metodo 1 — Eliminazione dell’entità padre: è possibile solo quando la copertura è totale (ogni istanza del padre sta in almeno una figlia: altrimenti quelle «solo padre» andrebbero perse). È preferibile quando la copertura è anche esclusiva (nessuna istanza in due figlie: altrimenti la ripeteresti) e quando le figlie hanno molti attributi propri. Le associazioni dell’entità padre vanno ripetute per ogni entità figlia. Svantaggio: schema più complesso; le interrogazioni «su tutti i padri» diventano un’unione delle tabelle figlie.

Prima: generalizzazione Vivente → Animale / Vegetale, copertura (t,e) Vivente Codice Nome (0,n) Presenza (1,n) Territorio IdTer Superficie (t,e) Animale Vegetale NumeroZampe Fioritura Metodo 1: eliminazione dell’entità padre Dopo: padre eliminato — attributi comuni e associazioni ripetuti nelle figlie Animale CodiceA Nome NumeroZampe (0,n) PresenzaA (1,n) Vegetale CodiceV Nome Fioritura (0,n) PresenzaV (1,n) Territorio IdTer Superficie
Metodo 1 — esempio: eliminazione dell’entità padre Vivente; gli attributi comuni (Codice, Nome) vengono ripetuti nelle figlie (rinominati CodiceA/CodiceV), che conservano i loro attributi specifici (NumeroZampe, Fioritura); l’associazione Presenza viene ripetuta per ogni entità figlia (PresenzaA, PresenzaV): modello E-R ristrutturato.
Nota — Le figlie non hanno identificatore Nelle generalizzazione le entità figlie non hanno un identificatore proprio: un’istanza di Animale o di Vegetale è identificata dall’identificatore dell’entità padre Vivente (l’attributo Codice, pallino pieno solo sul padre). Per questo, quando con il Metodo 1 il padre viene eliminato, il suo identificatore deve essere ripetuto nelle figlie (rinominato CodiceA e CodiceV): è l’unico modo per mantenere identificabili le istanze, ovvero per identificare i singoli animali ed i singoli vegetali.
Nota — Rinominare gli attributi comuni Quando, eliminando l’entità padre, gli attributi comuni (in particolare l’identificatore) vengono ripetuti nelle entità figlie, è buona pratica rinominarli in ciascuna figlia (es. CodiceC in Cane e CodiceG in Gatto): in questo modo, nelle tabelle e nelle chiavi esterne che le referenziano, i nomi restano non ambigui. Analogamente, le associazioni che puntavano al padre vanno duplicate con nomi distinti verso ciascuna figlia (es. RiceveC, RiceveG).

Metodo 2 — Eliminazione delle entità figlie: è sempre possibile. Sceglilo quando la copertura è parziale (esistono istanze solo-padre) e/o sovrapposta, oppure quando le figlie sono «povere»: pochi attributi specifici e nessuna associazione propria. Ha lo svantaggio di aumentare i dati nulli (gli attributi di una figlia restano vuoti sulle istanze delle altre) e il vantaggio di uno schema con una sola tabella; la consultazione però spesso si complica, perché le query devono distinguere i tipi e gestire i nulli. Aggiungi un attributo di controllo (es. razza, ruolo) che dica a quale figlia appartiene l’istanza.

Prima: generalizzazione Socio → Tennista / Calciatore, copertura (t,e) Socio Codice Nome Cognome (t,e) Tennista Calciatore NumTorneiVinti Colpo NumeroGol Ruolo Metodo 2: eliminazione delle entità figlie Dopo: attributi delle figlie confluiti nell’entità padre Socio Codice Nome Cognome NumeroGol Colpo Ruolo NumTorneiVinti
Metodo 2 — esempio: eliminazione delle entità figlie Tennista e Calciatore; tutti gli attributi (inclusi quelli specifici NumTorneiVinti, Colpo, NumeroGol, Ruolo) confluiscono nell’entità padre Socio: modello E-R ristrutturato.
Suggerimento Quando, durante la ristrutturazione del modello E-R, si decide di incorporare le entità figlie nell’entità padre, può essere utile aggiungere un attributo che permetta di stabilire l’appartenenza di un’istanza dell’entità a una delle entità figlie. Nell’esempio seguente tale attributo è razza (che può essere cane o gatto).
Prima: generalizzazione Animale → Cane / Gatto, copertura (p,e), associazione Vendita Cane taglia carattere Gatto lunghezzaPelo colorePelo (p,e) Animale IdAnimale costo età (1,1) Vendita (1,n) Negozio Nome Telefono Metodo 2: figlie incorporate + attributo razza Dopo: Cane e Gatto spariscono; Animale ha razza e gli attributi delle figlie Animale IdAnimale costo età razza taglia carattere lunghezzaPelo (1,1) Vendita (1,n) Negozio Nome Telefono
Incorporando Cane e Gatto in Animale si aggiunge l’attributo razza; l’associazione Vendita con Negozio resta sul padre. Copertura (p,e).

Metodo 3 — Sostituire la generalizzazione con un’associazione 1:1 che lega entità padre ed entità figlia, per ogni entità figlia. È sempre possibile. Sceglilo quando le figlie hanno associazioni proprie che non vuoi mescolare sul padre (es. solo i medici seguono i ricoveri), oppure quando vuoi evitare sia i nulli del Metodo 2 sia la duplicazione delle associazioni del padre del Metodo 1. Funziona bene con copertura parziale (chi non è figlia resta solo nel padre) e con copertura sovrapposta (la stessa istanza può avere due 1:1). Svantaggio: più tabelle e più join per ricostruire una figlia completa.

Socio Codice Nome Cognome (0,1) Is_T (1,1) Tennista CodiceT Colpo (0,1) Is_C (1,1) Calciatore CodiceC Ruolo
Metodo 3 — esempio: la generalizzazione è sostituita dalle associazioni 1:1 Is_T e Is_C. Dal padre la partecipazione è (0,1) (non ogni socio è tennista o calciatore); dalla figlia è (1,1) (ogni tennista/calciatore è esattamente un socio).

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

Prima: generalizzazione Socio → Tennista / Calciatore (t,s) e Iscrizione al CircoloSportivo Tennista colpo n.vittorie Calciatore gol ruolo (t,s) Socio CF Nome Cognome (1,1) Iscrizione (1,n) CircoloSportivo Nome Telefono Modello E-R ristrutturato Tennista colpo n.vittorie Calciatore gol ruolo Is_T (1,1) (0,1) Is_C (1,1) (0,1) Socio CF Nome Cognome (1,1) Iscrizione (1,n) CircoloSportivo Nome Telefono
Metodo 3Iscrizione resta su Socio; la generalizzazione diventa le associazioni 1:1 Is_T e Is_C.
Come si sceglie — tre considerazioni, in ordine
  1. Che copertura ha scritto il testo? Se è parziale, il Metodo 1 è vietato (perderesti chi sta solo nel padre). Se è sovrapposta, il Metodo 1 ripete la stessa istanza in due figlie: meglio 2 o 3.
  2. Le figlie hanno vita propria? Tanti attributi specifici e/o associazioni che valgono solo per una figlia → tieni le figlie distinte (Metodo 1 se la copertura è (t,e); Metodo 3 se devi conservare le associazioni proprie). Figlie «povere», senza legami propri → Metodo 2.
  3. Cosa vuoi evitare nello schema logico? Nulli → non il Metodo 2. Associazioni del padre duplicate e query a unione → non il Metodo 1. Troppe tabelle e join → non il Metodo 3.
Tavola di scelta — eliminazione delle generalizzazioni
MetodoSceglilo quando…In cambio accetti…
1 — Elimina il padreCopertura totale (obbligo). Meglio se anche esclusiva. Figlie con molti attributi propri.Associazioni del padre duplicate verso ogni figlia; le query «su tutti» diventano un’unione.
2 — Elimina le figlieSempre possibile. Meglio se copertura parziale e/o sovrapposta, o figlie senza associazioni proprie.Molti NULL e un attributo di controllo (tipo, ruolo, razza).
3 — Associazioni 1:1Sempre possibile. Figlie con associazioni proprie da non mescolare; vuoi evitare sia i nulli sia le duplicazioni.Più tabelle e più join per rileggere una figlia insieme al padre.
In consegna Motiva sempre la scelta in una riga: «copertura (t,e) e attributi specifici distinti → Metodo 1»; «copertura incerta / parziale, figlie povere → Metodo 2»; «solo i medici hanno l’associazione Segue → Metodo 3».

Regola 2 — Rappresentazione delle associazioni nel modello logico

Con questa regola stabiliamo i principi che ci permetteranno di rappresentare le associazioni nel modello logico. Ci sono tre casi:

Caso 1: Associazione 1:n

In un’associazione 1:n tra due entità si creano due tabelle (una per entità). L’associazione è rappresentata da una chiave esterna inserita nella tabella referenziante, cioè nella tabella corrispondente all’entità la cui cardinalità, posta accanto a tale entità, ha il massimo uguale a 1 verso l’altra entità. In pratica: la FK va nella tabella dal lato “molti” (quella con (1,1) o (0,1) accanto a sé).

Esempio (Studente (1,1) — Iscrizione — (1,n) Classe): accanto a Studente c’è (1,1), quindi ogni studente è collegato ad al massimo una classe → la FK nomeClasse va in Studente (tabella referenziante). Accanto a Classe c’è (1,n), quindi una classe può avere molti studenti → Classe è la tabella referenziata (contiene la PK nomeClasse). Se l’associazione ha attributi propri, vanno nella stessa tabella referenziante, accanto alla chiave esterna.

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

Caso 2: Associazioni n:n

In questo caso l’associazione è formata da una nuova tabella che ha per nome il nome dell’associazione, per chiave primaria l’attributo composto dalle 2 chiavi primarie delle 2 entità collegate e per attributi gli eventuali attributi dell’associazione.

Studente Matricola Nome (0,n) Svolgimento (0,n) Esame IdEsame Nome Voto Data
Associazione n:n Svolgimento tra Studente e Esame con attributi sulla relazione (Regola 2, Caso 2).
Studente    (Matricola(PK), Nome, Cognome)
Esame       (IdEsame(PK), Nome)
Svolgimento (PK(Matricola, IdEsame), FK(Matricola), FK(IdEsame), voto, data)

Caso 3: Associazione 1:1

Nella traduzione da modello E-R a modello logico di un’associazione 1:1 si possono seguire diverse strategie:

Prima strategia: consiste nel considerare in luogo delle due entità un’unica entità che contiene gli attributi di entrambe (non è consigliabile quando questa scelta comporterebbe la presenza di attributi non valorizzabili).

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

Lo stesso schema, con identificatori diversi: Telefono per Persona e CF per Tessera Sanitaria.

-- prima strategia, identificatori Telefono e CF:
Persona (Telefono(PK), Nome, Cognome, CF, DataScadenza)

Seconda strategia: consiste nel rappresentare l’associazione con la chiave esterna. Si inserisce la chiave esterna nella tabella che presenta un numero minore di attributi non valorizzabili.

Stato Nome NumAbitanti (0,1) Presidenza (1,1) Presidente Nome Cognome
Associazione 1:1 Presidenza tra Stato e Presidente — seconda strategia (chiave esterna); identificatore composto di Presidente con barra orizzontale e unico pallino pieno.
-- usando la strategia 2:
Stato      (Nome(PK), NumAbitanti)
Presidente (PK(Nome, Cognome), NomeStato(FK))
Nota — Associazione ricorsiva Nel caso di associazione ricorsiva si ottiene il modello logico considerando due entità, le due entità individuabili dall’associazione, e l’associazione tra le 2 entità.

5 Esercizi — Dal modello E-R al modello logico

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

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

Esercizio 1 — Associazione 1:n Facile

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

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

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

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

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione Riferito 1:n viene rappresentata con una FK aggiunta nella tabella referenziante Referto (accanto a Referto c’è (1,1) verso Paziente, massimo 1). Il minimo 1 garantisce FK not null.

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

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

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

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

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

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

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

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

Esercizio 3 — Associazione n:n Medio

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

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

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

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

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

-- Passo 3: n:n → nuova tabella con PK(IdUtente, IdFilm)
Utente (IdUtente(PK), Username)
Film   (IdFilm(PK), Titolo)
Guarda (PK(IdUtente, IdFilm), IdUtente(FK), IdFilm(FK), Data)
Perché la PK è solo la coppia La chiave PK(IdUtente, IdFilm) è lecita proprio grazie all’ipotesi: la stessa coppia non può comparire due volte. Se l’utente potesse rivedere lo stesso film, Guarda andrebbe ridisegnata come entità e nel logico la PK non sarebbe più la sola coppia.

Esercizio 4 — Attributo multivalore (Regola 1) Medio

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

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

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

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

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

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione Possiede 1:n viene rappresentata con una FK aggiunta nella tabella referenziante Telefono. Il vincolo “ogni dipendente ha almeno un telefono” riguarda Dipendente e si controlla con procedura, non con NOT NULL sulla FK.

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

Esercizio 5 — Associazione 1:1 Medio

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

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

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

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

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione Rilascio 1:1 viene rappresentata con la seconda strategia (FK): una FK in Patente, la tabella con meno valori nulli (ogni patente ha sempre una persona, minimo 1; molte persone non hanno patente, minimo 0). La fusione creerebbe troppi nulli su Numero e Scadenza. La FK è anche UNIQUE.

-- Passo 3: 1:1 seconda strategia → FK in Patente (meno nulli)
Persona (CodFiscale(PK), Nome, Cognome)
Patente (Numero(PK), DataScadenza, codFiscale(FK))
-- in 1:1 la FK è anche UNIQUE; in alternativa può essere PK: Patente (codFiscale(PK, FK), Numero, DataScadenza)

Esercizio 6 — Generalizzazione (Regola 1) Medio-alto

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

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

⬇ Modello E-R ristrutturato (Metodo 1: eliminazione dell’entità padre)
Vaccinazione Codice vacc. Nome (1,1) RiceveC Data (0,n) (1,1) RiceveG Data (0,n) Cane CodiceC Nome Razza pesoMedio Gatto CodiceG Nome Razza coloreOcchi
Eliminata la generalizzazione: gli attributi comuni sono ripetuti nelle figlie con nomi diversificati (CodiceC in Cane, CodiceG in Gatto); le associazioni verso Vaccinazione sono distinte (RiceveC, RiceveG).

Passo 2 — Traduzione delle entità: le entità ristrutturate diventano tabelle (ancora senza FK né attributo Data delle associazioni):

-- Passo 2: senza FK di RiceveC/RiceveG
Cane         (CodiceC(PK), Nome, Razza, pesoMedio)
Gatto        (CodiceG(PK), Nome, Razza, coloreOcchi)
Vaccinazione (CodVaccinazione(PK), Nome)

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico ciascuna associazione 1:n (RiceveC, RiceveG, con attributo Data) viene rappresentata con una FK aggiunta in Vaccinazione più l’attributo Data. Servono due FK nullable con vincolo di tupla “esattamente una valorizzata”.

-- Passo 1: Metodo 1 padre eliminato; Passo 3: 2x1:n → 2 FK in Vaccinazione
Cane         (CodiceC(PK), Nome, Razza, pesoMedio)
Gatto        (CodiceG(PK), Nome, Razza, coloreOcchi)
Vaccinazione (CodVaccinazione(PK), Nome, Data, CodiceC(FK), CodiceG(FK))
-- vincolo di tupla: esattamente una delle due FK è valorizzata:
-- (CodiceC IS NOT NULL AND CodiceG IS NULL) OR (CodiceC IS NULL AND CodiceG IS NOT NULL)
Nota Dopo l’eliminazione dell’entità padre non esiste più un’unica tabella Animale: la chiave esterna di Vaccinazione può puntare a Cane oppure a Gatto. Si usano due chiavi esterne nullable con il vincolo che esattamente una delle due sia valorizzata (vincolo di tupla).
Ipotesi e copertura L’ipotesi «il negozio vende solo cani e gatti» rende la copertura totale e quindi lecita l’eliminazione del padre. Senza quell’ipotesi la copertura sarebbe parziale e il Metodo 1 perderebbe gli altri animali.

Esercizio 7 — Entità debole Alto

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Passo 1 — Ristrutturazione (applicando la Regola 1): Indirizzo composto → colonne Via, NumeroCivico, Citta; generalizzazione Personale con copertura incerta → Metodo 2, figlie incorporate nel padre con attributo di controllo Ruolo. Ricovero resta debole.

⬇ Modello E-R ristrutturato (Regola 1: composto → colonne, Metodo 2: figlie nel padre)
Paziente CodSanitario Nome Cognome Via NumCivico Città (1,n) Effettua (1,1) Ricovero NumRicovero DataIngresso DataDimissione (1,1) Segue (0,n) Personale CF Nome Cognome Telefono Ruolo Specializzazione Piano
Indirizzo appiattito in colonne; generalizzazione eliminata con Metodo 2: Medico e Infermiere confluiti in Personale con Ruolo; Ricovero resta debole (barra + pallino pieno su Effettua); Segue ora punta a Personale con vincolo “solo medici”.

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

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

Passo 3 — Traduzione delle associazioni (applicando la Regola 2): nel modello logico l’associazione identificante Effettua viene rappresentata con la FK aggiunta CodPaziente in Ricovero (la PK diventa PK(CodPaziente, NumRicovero): il numero da solo non basta, perché due pazienti possono avere entrambi il ricovero n. 1); l’associazione Segue 1:n viene rappresentata con una FK aggiunta CFMedico in Ricovero (il vincolo “solo medici” usa Ruolo).

-- Passo 1: composto → colonne, Metodo 2 con Ruolo; Passo 3: Effettua in PK, Segue → FK
Paziente  (CodSanitario(PK), Nome, Cognome, Via, NumeroCivico, Citta)
Personale (CF(PK), Nome, Cognome, Telefono, Ruolo, Specializzazione, Piano)
Ricovero  (PK(CodPaziente, NumRicovero), CodPaziente(FK), DataIngresso, DataDimissione, CFMedico(FK))
Nota Con il Metodo 2 specializzazione è valorizzata solo per i medici (ruolo = ‘M’) e piano solo per gli infermieri (ruolo = ‘I’): si accettano questi nulli in cambio di una traduzione più semplice. Con il Metodo 1 (lecito solo se la copertura fosse totale) si sarebbero avute due tabelle (Medico, Infermiere) con gli attributi comuni ripetuti e, in Ricovero, due chiavi esterne nullable (una verso ciascuna), esattamente come nell’esercizio 6.