UNIVERSITÀ DEGLI STUDI DI UDINE
Facoltà di Medicina e Chirurgia
CORSO DI LAUREA IN TECNICHE DI RADIOLOGIA MEDICA PER IMMAGINI E RADIOTERAPIA
ESAME di
INFORMATICA e ARCHIVIAZIONE
10 settembre 2010
1
Progettazione di basi di dati
Si vuole progettare il sistema informativo per la gestione dei dati di un centro
di radiologia.
Si vuole mantenere traccia delle informazioni relative ai diversi pazienti:
codice fiscale, tessera sanitaria, nome, cognome, data di nascita, indirizzo di
residenza (via, numero, città, cap) e uno o più numeri di telefono.
Ad ogni visita radiologica, della quale si mantiene traccia della data e dell’ora dell’appuntamento, e del paziente a cui si riferiscono, viene associato un
fascicolo (archivio cartaceo). Ogni fascicolo, a cui è associata anche la diagnosi, contiene diverse immagini radiografiche. Per ogni immagine si vuole
mantenere traccia dell’ora di esecuzione e della zona corporea interessata.
Le immagini prodotte dal centro possono essere di due tipi: radiografia
convenzionale (RX), tomografia computerizzata (TC). Nel caso di TC si
mantiene traccia anche del tipo di esame (assiale, spirale o multistrato) e
dell’eventuale mezzo di contrasto (tipo e quantitativo).
Progettazione concettuale Definire uno schema Entità-Relazioni che
descriva il contenuto informativo del sistema, illustrando con chiarezza le
eventuali assunzioni fatte. Lo schema dovrà essere completato con attributi
ragionevoli per ciascuna entità (identificando le possibili chiavi) e relazione.
Vanno specificati accuratamente i vincoli di cardinalità e partecipazione di
ciascuna relazione.
1
Figura 1: Schema ER
Note:
• Si suppone non parlando di ambulatori o medici diversi non possa
essere effettuata più di una visita alla volta e quindi la data e l’ora di
una visita possano identificarle univcamente
• Lo schema riportato vede l’integrazione di quelle che potrebbero essere
modellate come due entità distinte VISITA e FASCICOLO nell’unica entità FASCICOLO. Modellandole infatti come due entità distinte
risulterebbero legate da una relazione di tipo uno a uno (ad ogni visita
corrisponde un fascicolo), in cui VISITA partecipa in modo parziale
(se è stata solo fissata ma non ancora eseguita non avrà un fascicolo
collegato) e FASCICOLO partecipa in modo totale. Inoltre, vista la
corrispondenza fra le due, definito l’identificatore per l’entità VISITA,
l’entità FASCICOLO risulta essere un’entità debole identificata esclusivamente attraverso la VISITA a cui fa riferimento. Lo schema infatti
potrebbe anche essere quello rappresentato in Figura 2. Questo ovviamente in fase di ristrutturazione potrebbe essere trasformato nello
schema precedente.
Progettazione logica Apportare le necessarie modifiche di ristrutturazione
allo schema Entità-Relazioni prodotto e tradurlo nello schema logico relazionale.
Ristrutturazione:
1. attributi composti: attributo indirizzo dell’entità P AZIEN T E e
attributo contrasto dell’entità T AC
2. attributi multivalore: attributo telef ono dell’entità P AZIEN T E e
attributo evidenze dell’entità IM M AGIN E
2
Figura 2: Schema ER 2
3. specializzazioni: supponendo che i reperti vengano considerati indipendentemente dal loro specifico tipo si decide di mantenere solo l’entità
padre, eliminando le entità figlie. La tipologia di specializzazione può
essere individuata dalla presenza o meno degli attributi di tipo della
specializzazione TC
Lo schema ER ristrutturato è rappresentato in Figura 3.
Figura 3: Schema ER ristrutturato
Traduzione:
1. entità:
P AZIEN T E(codiceF iscale, tesseraSanitaria, nome, cognome,
via, numero, citta, cap)
3
tesseraSanitaria, nome, cognome, via, numero, citta, cap NOT NULL
tesseraSanitaria UNIQUE
F ASCICOLO(data, ora, diagnosi)
IM M AGIN E(dataF , oraF , ora, zonaCorporea, tipoT AC, tipoContrasto,
quantitaContrasto)
zonaCorporea NOT NULL
EV IDEN ZA(descrizione)
T ELEF ON O(numero)
2. relazioni UNO-A-MOLTI (estensione delle tabelle precedenti):
relazione fa:
FASCICOLO(data, ora, diagnosi, paziente)
paziente NOT NULL
fk (paziente) references PAZIENTE(codiceFiscale)
relazione contiene:
IM M AGIN E(dataF , oraF , ora, zonaCorporea, tipoT C, tipoContrasto,
quantitaContrasto)
zonaCorporea NOT NULL
fk (dataF, oraF) references FASCICOLO(data, ora)
3. relazioni MOLTI-A-MOLTI (nuove tabelle):
relazione ha:
ha(paziente, telef ono)
fk (paziente) references PAZIENTE(codiceFiscale)
fk (telefono) references TELEFONO(numero)
relazione presenta:
presenta(dataF , oraF , ora, evidenza)
fk (dataF, oraF, ora) references IMMAGINE(dataF, oraF, ora)
fk (evidenza) references EVIDENZA(descrizione)
Lo schema logico risultante è stato schematizzato in Figura 4.
4
Figura 4: Schema logico completo
2
Modello relazionale e linguaggio SQL
Si consideri il seguente schema logico relazionale:
P AZIEN T E(codiceF iscale, nome, cognome, dataN ascita, sesso)
V ISIT A(data, ora, ambulatorio, paziente)
AM BU LAT ORIO(id, denominazione)
Definire preliminarmente le chiavi primarie e le chiavi esterne delle relazioni
date.
P AZIEN T E(codiceF iscale, nome, cognome, dataN ascita, sesso)
V ISIT A(data, ora, ambulatorio, paziente, note)
fk (ambulatorio) references AMBULATORIO(id)
fk (paziente) references PAZIENTE(codiceFiscale)
UNIQUE(data, ora, paziente)
– un paziente non può avere due visite contemporaneamente
AM BU LAT ORIO(id, denominazione)
Successivamente, supponendo di aver già creato le tabelle PAZIENTE ed
AMBULATORIO, formulare l’istruzione SQL per la creazione della tabella
VISITA con tutti i vincoli necessari.
CREATE TABLE VISITA (
data
DATE,
ora
TIME,
a m b u l a t o r i o INTEGER,
paziente
CHAR( 1 6 ) NOT NULL,
note
VARCHAR( 2 5 5 ) ,
5
PRIMARY KEY ( data , ora , a m b u l a t o r i o ) ,
UNIQUE ( data , ora , p a z i e n t e ) ,
FOREIGN KEY ( p a z i e n t e ) REFERENCES PAZIENTE( c o d i c e F i s c a l e ) ,
FOREIGN KEY ( a m b u l a t o r i o ) REFERENCES AMBULATORIO( i d ) ,
)
Infine, formulare opportune interrogazioni nel linguaggio SQL che permettano di determianre:
1. l’ora e il codice fiscale dei pazienti che avevano una visita nell’ambulatorio con id 15 il 15/07/2010, secondo l’ordine temporale delle
visite
SELECT ora , p a z i e n t e
FROM
VISITA
WHERE a m b u l a t o r i o =15
AND data= ’ 15/07/2010 ’
ORDER BY o r a
2. il nome e il cognome dei pazienti che hanno fatto almeno una visita in
un ambulatorio pediatrico (denominazione)
SELECT DISTINCT nome , cognome
FROM PAZIENTE, VISITA , AMBULATORIO
WHERE PAZIENTE . c o d i c e F i s c a l e = VISITA=p a z i e n t e
AND VISITA . a m b u l a t o r i o = AMBULATORIO. i d
AND AMBULATORIO. denominazione = ’ p e d i a t r i c o ’
SELECT DISTINCT nome , cognome
FROM PAZIENTE JOIN VISITA
ON PAZIENTE . c o d i c e F i s c a l e = VISITA=p a z i e n t e
JOIN AMBULATORIO
ON VISITA . a m b u l a t o r i o = AMBULATORIO. i d
WHERE AMBULATORIO. denominazione = ’ p e d i a t r i c o ’
3. il codice fiscale dei pazienti che almeno una volta hanno effettuato due
visite nello stesso giorno (possibilmente senza usare funzioni aggregate)
SELECT DISTINCT V1 . p a z i e n t e
FROM VISITA AS V1
, VISITA AS V2
WHERE V1 . p a z i e n t e = V2 . p a z i e n t e
AND V1 . data = V2 . data
AND V1 . o r a <> V2 . o r a
SELECT p a z i e n t e
FROM VISITA
GROUP BY p a z i e n t e , data
HAVING COUNT( ∗ )>1
4. il nome e il cognome dei pazienti che hanno fatto visite sia il 15/7/2010
che il 20/7/2010
6
SELECT DISTINCT nome , cognome
FROM PAZIENTE JOIN VISITA
ON PAZIENTE . c o d i c e F i s c a l e = VISITA=p a z i e n t e
WHERE VISITA . data = ’ 15/7/2010 ’
INTERSECT
SELECT DISTINCT nome , cognome
FROM PAZIENTE JOIN VISITA
ON PAZIENTE . c o d i c e F i s c a l e = VISITA=p a z i e n t e
WHERE VISITA . data = ’ 20/7/2010 ’
SELECT nome , cognome
FROM
PAZIENTE
WHERE c o d i c e F i s c a l e IN ( SELECT p a z i e n t e
FROM
VISITA
WHERE data = ’ 15/7/2010 ’ )
AND c o d i c e F i s c a l e IN ( SELECT p a z i e n t e
FROM
VISITA
WHERE data = ’ 20/7/2010 ’ )
SELECT nome , cognome
FROM
PAZIENTE
WHERE EXISTS ( SELECT ∗
FROM
VISITA
WHERE data = ’ 15/7/2010 ’
AND p a z i e n t e = c o d i c e F i s c a l e )
AND EXISTS ( SELECT ∗
FROM
VISITA
WHERE data = ’ 20/7/2010 ’
AND p a z i e n t e = c o d i c e F i s c a l e )
7
Scarica

esame del 10/09/2010 - Dipartimento di Matematica e Informatica