Come si modella la realtà con lo schema E/R - Esempio prenotazioni esami ASL | Prof. Giagnotti
📚 Progettazione Basi di Dati · Esempio ASL / Sanità
Guida a cura di Prof. Giagnotti · Corso Informatica

Come si modella la realtà con lo schema E/R - esempio prenotazioni esami medici ASL

Dalla prenotazione al laboratorio: modelliamo ospedali, reparti, laboratori, esami e pazienti con identificatori composti, entità deboli e vincoli temporali. Uno dei casi tra i più completi che uso in classe.

⏱ 30 min lettura 🎯 Livello: 5° Superiore / ITS 🧩 Focus: E/R con entità deboli + ternaria 💡 Metodo: 8 passi
🎯 Cosa imparerai
✓Riconoscere entità deboli: laboratorio e reparto con codice univoco solo DENTRO l'ospedale
✓Modellare PRENOTAZIONE come entità associativa ternaria tra PAZIENTE, ESAME e LABORATORIO
✓Gestire vincoli: stesso esame non ripetibile nello stesso giorno per stesso paziente
✓Distinguere LABORATORIO vs REPARTO e PERSONALE con molteplicità (0,n) e identificatori {PK}
✓Evitare errori da verifica: confondere ospedale-laboratorio con N:M, dimenticare identificazione esterna

1. Lo scenario ASL: cosa ci chiede la traccia

📌 Traccia originale

PAZIENTE: codice tessera sanitaria {PK}, cognome, nome, indirizzo, data e luogo nascita
ESAME: codice_esame {PK} numerico, descrizione (es. radiografia)
OSPEDALE: codice numerico {PK}, nome, indirizzo
LABORATORIO: codice univoco all'interno di un ospedale, nome_lab, piano, numero_stanza
PRENOTAZIONE: data esame, ora esame, laboratorio presso cui è eseguito, costo ticket, urgente sì/no
REPARTO: codice numerico univoco dentro ospedale, nome reparto, telefono
PERSONALE: codice_fiscale {PK}, nome, cognome, indirizzo
Vincoli: paziente più prenotazioni stesso esame in date diverse, ma NON stesso esame stesso giorno stesso paziente.

Questa è una delle tracce che uso sempre al compito in classe: sembra facile ma ci sono due entità deboli e una ternaria. Se le sbagli, perdi tutta la parte logica.

💬 Tip del docente

Quando leggi "codice univoco all'interno di..." → sottolinea DUE volte. È il segnale di entità debole. Non è un codice assoluto, ha bisogno del padre. Te lo chiedo sempre: "Di chi è figlio LABORATORIO?" Risposta giusta: di OSPEDALE.

2. Analisi preliminare: le 7 aree da gestire

01 · ANAGRAFICA

PAZIENTE

Tessera sanitaria {PK} stabile, no duplicati

02 · CATALOGO

ESAME

Catalogo prestazioni, non istanza

03 · STRUTTURA

OSPEDALE

Entità forte, padre di lab e reparto

04 · DEBOLE 1

LABORATORIO

Debole: id = {cod_lab + cod_ospedale}. Nome, piano, stanza

05 · DEBOLE 2

REPARTO

Debole: id = {cod_reparto + cod_ospedale}. Nome, telefono

06 · ORGANICO

PERSONALE

CF {PK}, afferisce a un reparto

07 · MOVIMENTO

PRENOTAZIONE

Ternaria + attributi: data, ora, ticket, urgente

08 · METODO

8 passi

Come sempre: entità → ass. → attributi → ass. attrib. → (0,n) → lettura

3. Vincoli e ipotesi aggiuntive

A. Vincoli strutturali

  • PAZIENTE identificato da codice_tessera_sanitaria {PK}
  • ESAME identificato da codice_esame {PK}
  • OSPEDALE identificato da codice_ospedale {PK}
  • LABORATORIO identificato da {codice_lab, codice_ospedale} {PK} → debole
  • REPARTO identificato da {codice_reparto, codice_ospedale} {PK} → debole
  • PERSONALE identificato da codice_fiscale {PK}

B. Vincoli sulle prenotazioni - i più importanti

📌 Vincolo temporale chiave

Ogni paziente può effettuare più prenotazioni dello stesso esame in date diverse, MA lo stesso esame non può essere ripetuto nello stesso giorno dallo stesso paziente. È un vincolo di unicità su (paziente, esame, data). Lo gestiamo in E/R come regola e poi nel logico come UNIQUE.

C. Ipotesi aggiuntive che dichiaro (come faccio in classe)

IpotesiPerchéAlternativa
codice_prenotazione {PK} in PRENOTAZIONEData+ora non bastano: stesso paziente potrebbe prenotare due esami diversi stessa data/ora in lab diversiChiave composta (paziente, esame, lab, data, ora) troppo pesante
LABORATORIO entità deboleTesto: codice univoco dentro ospedaleSe fosse forte, codice dovrebbe essere globale
REPARTO entità deboleStessa dicitura di labIdem
PERSONALE afferisce a 1 REPARTOTesto dice "personale del reparto" → 1 reparto per persona, più realistico per ASLAlternativa N:M se persona lavora in più reparti, ma non richiesto
PRENOTAZIONE entità associativaHa attributi propri: data, ora, ticket, urgente + lega 3 entitàNon può essere solo associazione binaria
🎯 Vincoli di integrità da annotare

Univocità: tessera, codice_esame, cod_ospedale, CF unici. Identificazione esterna: lab e reparto senza ospedale non esistono. Esistenza: prenotazione deve avere paziente, esame, laboratorio esistenti. Temporale: data_esame ≥ data_prenotazione (se aggiungi data prenotazione). Unicità giornaliera: (cod_tessera, cod_esame, data_esame) unique. Quantità: ticket ≥0. Coerenza lab: lab deve appartenere ad ospedale della ASL.

4. Le entità e le entità deboli

ENTITÀ FORTE

PAZIENTE

codice_tessera_sanitaria {PK}, cognome, nome, indirizzo, data_nascita, luogo_nascita. Esempio: Mario Rossi TS123

ENTITÀ FORTE

ESAME

codice_esame {PK} numerico, descrizione. Es: 101 radiografia torace

ENTITÀ FORTE

OSPEDALE

codice_ospedale {PK} numerico, nome, indirizzo. Padre di lab e reparto

ENTITÀ DEBOLE

LABORATORIO

{codice_lab, codice_ospedale} {PK}, nome_lab, piano, numero_stanza. Es: LAB02 dell'ospedale 1 al 2° piano stanza 12

ENTITÀ DEBOLE

REPARTO

{codice_reparto, codice_ospedale} {PK}, nome_reparto, telefono. Es: reparto 3 cardiologia ospedale 1

ENTITÀ FORTE

PERSONALE

codice_fiscale {PK}, nome, cognome, indirizzo. Afferisce a reparto

ENTITÀ ASSOCIATIVA

PRENOTAZIONE

codice_prenotazione {PK}, data_esame, ora_esame, costo_ticket, urgente {Sì/No}. Lega PAZIENTE+ESAME+LABORATORIO

💬 Tip del docente - entità deboli

Disegna LABORATORIO e REPARTO con rettangolo doppio! E ricorda: la loro {PK} è composta. Se scrivi solo codice_lab {PK} è ERRORE. In verifica scrivo sempre: "Dove prende l'identità?" La risposta: dall'OSPEDALE tramite associazione di identificazione.

⚠️ Errore comune n.1 - laboratorio forte

Molti fanno LABORATORIO con codice_lab {PK} unico globale. Ma la traccia dice "codice univoco all'interno di un ospedale". Significa che LAB01 può esistere sia in ospedale 1 che in ospedale 2. Se lo rendi forte, violi la traccia. Deve essere debole con identificazione esterna.

5. Le associazioni

E/R · ASSOCIAZIONI - VERBI INFINITO
1. CONTENERE_LAB: OSPEDALE (1,n) --- CONTENERE --- (1,1) LABORATORIO Identificazione esterna, totale. Un ospedale contiene 1,n lab. Ogni lab appartiene a 1 ospedale.2. CONTENERE_REPARTO: OSPEDALE (1,n) --- CONTENERE --- (1,1) REPARTO Identificazione esterna. Un ospedale contiene 1,n reparti. Ogni reparto appartiene a 1 ospedale.3. AFFERIRE: REPARTO (0,n) --- AFFERIRE --- (1,1) PERSONALE Un reparto ha 0,n persone. Ogni persona afferisce a 1 reparto. (Ipotesi 1:1 lato personale)4. EFFETTUARE: PAZIENTE (0,n) --- EFFETTUARE --- (1,1) PRENOTAZIONE Un paziente può effettuare 0,n prenotazioni. Ogni prenotazione è di 1 paziente.5. RIGUARDARE: ESAME (0,n) --- RIGUARDARE --- (1,1) PRENOTAZIONE Un esame può essere prenotato 0,n volte. Ogni prenotazione riguarda 1 esame.6. SVOLGERE: LABORATORIO (0,n) --- SVOLGERE --- (1,1) PRENOTAZIONE Un laboratorio svolge 0,n prenotazioni. Ogni prenotazione si svolge in 1 laboratorio.Nota: PRENOTAZIONE è entità associativa ternaria che lega le tre associazioni 4-5-6. In alternativa diagramma: un rombo ternario con 3 lati verso PAZIENTE, ESAME, LABORATORIO, ma per chiarezza didattica lo rappresentiamo come entità centrale con 3 associazioni binarie.
💬 Tip del docente - perché verbi all'infinito?

Perché il diagramma si legge come frase: "OSPEDALE CONTENERE LABORATORIO". Se metti "contiene" o "ha" poi nella relazione inversa non torna. All'infinito è neutro e professionale.

⚠️ Errore comune n.2 - prenotazione come associazione binaria

Se fai solo PAZIENTE - ESAME con attributi data/ora/lab, perdi il laboratorio come entità autonoma e non puoi controllare che il lab appartenga a un ospedale. PRENOTAZIONE deve essere entità che lega 3 entità, non attributo di una binaria.

6. Attributi e identificatori {PK}

PAZIENTE

codice_tessera_sanitaria {PK}, cognome, nome, indirizzo, data_nascita, luogo_nascita. Tessera è stabile, mai duplicata.

ESAME

codice_esame {PK} numerico, descrizione. Es: 001 emocromo, 002 radiografia.

OSPEDALE

codice_ospedale {PK} numerico, nome, indirizzo. Es: 10 Ospedale di Varese.

LABORATORIO (debole)

{codice_lab, codice_ospedale} {PK}, nome_lab, piano, numero_stanza. Piano può essere 0,1,2. Stanza numerica. Attenzione: codice_lab da solo NON è {PK}.

REPARTO (debole)

{codice_reparto, codice_ospedale} {PK}, nome_reparto, telefono. Telefono del reparto, non del personale.

PERSONALE

codice_fiscale {PK}, nome, cognome, indirizzo. CF univoco per persona.

PRENOTAZIONE

codice_prenotazione {PK} (ipotesi mia), data_esame, ora_esame, costo_ticket, urgente {Sì/No} boolean. Data+ora separate per facilitare query. Urgente influenza priorità.

🎯 Perché codice_prenotazione {PK}?

Senza codice, dovresti usare chiave composta (tessera, codice_esame, codice_lab, data, ora) enorme e fragile. Inoltre stesso paziente potrebbe prenotare due esami diversi stessa data/ora in lab diversi → chiave composta ambigua. Codice singolo è pulito e lo chiedo sempre in verifica per entità associative.

⚠️ Errore comune n.3 - dimenticare {PK} composta

Se scrivi LABORATORIO: codice_lab {PK} è sbagliato. Devi scrivere {codice_lab, codice_ospedale} {PK} e collegarlo con associazione identificante a OSPEDALE.

7. Molteplicità (0,n) e regole di lettura

Notazione: minuscola (0,n), (1,n), (1,1), (0,1).

AssociazioneMolteplicitàCardinalitàLettura e perché min=0 o 1
CONTENERE_LAB
OSPEDALE-LAB
OSPEDALE (1,n) — (1,1) LAB1:n deboleUn ospedale deve contenere almeno 1 lab (1,n) altrimenti che ospedale è? Ogni lab (1,1) deve avere ospedale, altrimenti non esiste.
CONTENERE_REPARTO
OSPEDALE-REPARTO
OSPEDALE (1,n) — (1,1) REPARTO1:n deboleStesso ragionamento di lab. Ospedale senza reparti non ha senso gestionale.
AFFERIRE
REPARTO-PERSONALE
REPARTO (0,n) — (1,1) PERSONALE1:nReparto può essere appena creato con 0 persone (0,n). Persona deve afferire a 1 reparto (1,1), altrimenti è fuori organico.
EFFETTUARE
PAZIENTE-PRENOTAZIONE
PAZIENTE (0,n) — (1,1) PRENOTAZIONE1:nPaziente può esistere senza prenotazioni (0,n). Prenotazione senza paziente non esiste (1,1).
RIGUARDARE
ESAME-PRENOTAZIONE
ESAME (0,n) — (1,1) PRENOTAZIONE1:nEsame in catalogo può non essere mai prenotato (0,n). Prenotazione riguarda 1 esame (1,1).
SVOLGERE
LAB-PRENOTAZIONE
LAB (0,n) — (1,1) PRENOTAZIONE1:nLab può avere 0 prenotazioni (appena aperto). Prenotazione si svolge in 1 lab (1,1).

Regole di lettura complete (come le voglio in verifica)

REGOLE DI LETTURA - VERIFICA
CONTENERE_LAB: Un ospedale contiene 1,n laboratori. Ogni laboratorio è contenuto in 1 e 1 solo ospedale. Identificazione esterna. CONTENERE_REPARTO: Un ospedale contiene 1,n reparti. Ogni reparto è contenuto in 1 ospedale. Identificazione esterna. AFFERIRE: Un reparto può avere 0,n membri del personale. Ogni membro del personale afferisce a 1 reparto. EFFETTUARE: Un paziente può effettuare 0,n prenotazioni. Ogni prenotazione è effettuata da 1 paziente. RIGUARDARE: Un esame può essere oggetto di 0,n prenotazioni. Ogni prenotazione riguarda 1 esame. SVOLGERE: Un laboratorio può svolgere 0,n prenotazioni. Ogni prenotazione si svolge in 1 laboratorio.Vincolo extra: Per stesso paziente, stesso esame non può essere prenotato due volte nella stessa data. Va implementato come UNIQUE (codice_tessera, codice_esame, data_esame) nel logico. Non è esprimibile solo con (0,n). Vincolo extra: Data e ora esame devono essere future rispetto a creazione prenotazione (se aggiungi data_prenotazione).

8. Schema E/R finale

SCHEMA E/R
schema E/R ASL
🎯 Cosa deve mostrare lo schema

TUTTE LE ENTITA'FORTI rettangoli con nome all'interno, {PK} con terminale pieno + attributi con terminale vuoto collegati al rettangolo e nominati
TUTTE LE ASSOCIAZIONI molteplicità indicate sul collegamento ENTITA'- ASSOCIAZIONE lato entità
TUTTE LE ENTITA' DEBOLI con doppio rettangolo e stesse regole di rappresentazione attributi, PK, molteplicità

9. Errori comuni e checklist finale

⚠️ I 5 errori che vedo ogni anno su questa traccia ASL

1. LABORATORIO e REPARTO come entità forti con {PK} singolo → perdi identificazione esterna, codice non più univoco solo dentro ospedale
2. PRENOTAZIONE come associazione N:M tra PAZIENTE ed ESAME → perdi laboratorio e attributi costo/urgente
3. OSPEDALE-LABORATORIO N:M → un lab non può appartenere a due ospedali diversi, è 1:n debole
4. PERSONALE senza collegamento a REPARTO → il testo dice "personale del reparto", deve afferire
5. Dimenticare vincolo "stesso esame stesso giorno stesso paziente" → manca UNIQUE, schema incompleto

CheckDomandaSe NO, cosa fare
DeboliLAB e REPARTO hanno {PK} composta + doppio rettangolo?Aggiungi codice_ospedale in PK e associazione identificante
TernariaPRENOTAZIONE lega 3 entità?Se lega solo 2, rifai
Vincolo giornoAnnotato UNIQUE su (paziente, esame, data)?Scrivi nei vincoli
LetturaRiesco a leggere ad alta voce?Se inciampi, rifai associazioni
💬 Tip del docente - come prendo il voto su questa traccia

Questa traccia vale 10 se: 1) individui le due deboli, 2) fai PRENOTAZIONE come entità con {PK}, 3) scrivi regole di lettura complete, 4) annoti vincolo UNIQUE giornaliero. Se manca anche solo uno, non è da 10. Allenatevi a consegnare tutto, non solo il disegnino.

✓LABORATORIO e REPARTO sono entità deboli: {PK} composta con codice_ospedale + associazione identificante CONTENERE
✓PRENOTAZIONE è entità associativa ternaria: lega PAZIENTE (0,n)-(1,1), ESAME (0,n)-(1,1), LABORATORIO (0,n)-(1,1) + attributi propri
✓{PK} esplicito per ogni entità, anche deboli con {cod_lab, cod_osp} {PK}
✓Vincolo UNIQUE giornaliero: (cod_tessera, cod_esame, data_esame) non esprimibile solo con molteplicità, va annotato
✓PERSONALE afferisce a REPARTO: REPARTO (0,n) AFFERIRE (1,1) PERSONALE - ipotesi 1 reparto per persona, più realistica