diagramma classi

annuncio pubblicitario
Cartella
Medicine
Temperature: SET(data,temp)
Patologie: SET(String)
Paziente
Costo () : NUMERIC
0..* codice
descrizione
fornisce
quantita_scatole
costo_scatola
Reparto
1..1
codice_pad
indirizzo_pad
n_piano
n_letti_u
n_letti_d
tel
0..1
i
1..*
codice
ticket
data inizio
data fine
0..1
Primario_in
Servizio
0..*
0..1
infermiere_in
medico_in
Svolto_in
d
e_
sc
Costo () :
NUMERIC
0..*
1
i
ru
uf
us
CF
nome
cognome
sesso
dataN
n_stanza
n_letto
DIAGRAMMA
CLASSI
Personale
Ricovero
Ambulatorio
Emergenza
disposto_da
cod_pren
cod_emergenza
nome_unita
nome
cognome
tel
specializzazione
stipendio
1..*
1
Medico
1..*
Infermiere
Ausiliario
T_Cartella
T_Paziente
CF
nome
cognome
sesso
dataN
n_stanza
n_letto
Temperature: {{ }}
Patologie: {{String}}
medicine: {{ }}
*
T_Medicina
TIPI
codice
descrizione
quantita_scatole
costo_scatola
assumiamo che tutti i codici
abbiamo un valore semantico
T_Reparto
Costo () : NUMERIC
T_Temperature
data
temp
*
codice_pad
indirizzo_pad
n_piano
n_letti_u
n_letti_d
tel
primario:
T_Servizio
Costo () :
NUMERIC
*
codice
ticket
data inizio
data fine
Reparto
paziente
cartella
*
*
T_Personale
T_Ricovero
T_Ambulatorio
T_Emergenza
disposto_da
cod_pren
cod_emergenza
nome_unita
nome
cognome
tel
specializzazione
stipendio
tipo
reparto :
Tabelle
• Paziente of T_Paziente (PID,CF)
• Servizio of T_Servizio (SID,codice, paziente WITH OPTION SCOPE
Paziente, reparto WITH OPTION SCOPE Reparto)
– Ricovero of T_Ricovero UNDER T_Servizio
– Ambulatorio of T_Ambulatiorio UNDER T_Servizio
– Emergenza of T_Emergenza UNDER T_Servizio
• Medicina of T_Medicina (MID,codice)
• Personale of T_Personale (PID, nome, cogn, tel, reparto WITH
OPTION SCOPE Reparto)
• Reparto of T_Reparto (RID, codice_pad, indirizzo_pad,n_piano,
primario WITH OPTION SCOPE Personale)
• non creiamo una tabella per cartella in quanto non e’ e’ coinvolta in
aggregazioni per riferimento
Tabelle: nota
•
•
•
•
il tipo T_Servizi non e’ riferito da alcuna aggregazione
tuttavia, contiene dei metodi
quindi il tipo deve essere mantenuto
se non avesse avuto metodi, potevamo non creare il tipo e
definire Servizi come tabella non tipata
DDL
• Definizione tipo per modellazione cartelle cliniche
CREATE TYPE t_cartella AS
(temperature t_temperature MULTISET,
patologie VARCHAR(20) MULTISET,
medicine REF T_Medicine MULTISET)
NOT FINAL;
Query
• Dato il reparto X visualizzare il medicinale piu’ utilizzato per pazienti uomini
SELECT M.Nome
FROM Servizi S, UNNEST(S.Cartella.Medicine) M
WHERE S.reparto --> Nome = ‘X’ AND S.paziente --> Sesso = ‘M’
GROUP BY M.Nome
HAVING COUNT(*) > = ALL (SELECT COUNT(*)
FROM Servizi S,
UNNEST(S.Cartella.Medicine) M
WHERE S.reparto --> Nome = ‘X’ AND
S.paziente --> Sesso = ‘M’
GROUP BY M)
Query
• Dato il reparto Z, visualizzare la cartella clinica piu’ costosa per pazienti
ricoverati dall’anno X all’anno Y
• HP: visualizzo solo le temperature, e il CF del paziente, in modo analogo si
possono visualizzare tutte le altre informazioni
SELECT S.paziente--> CF, T.data,T.temp
FROM Servizi S, UNNEST(S.Cartella.Temperature) T
WHERE S.reparto --> Nome = ‘Z’ AND S.data_inizio >= ‘1/1/X’ AND
S.data_fine <= ‘31/12/Y’ AND
S.cartella.costo() > = ALL (SELECT S.cartella.costo()
FROM Servizi S
WHERE S.reparto --> Nome = ‘Z’ AND
S.data_inizio >= ‘1/1/X’ AND
S.data_fine <= ‘31/12/Y’)
Inserimento
• Inserire la cartella clinica per un certo ricovero a vostra scelta,
supponendo di assegnare due medicinali e la temperatura del giorno
corrente
UPDATE Servizio
SET cartella =
t_cartella(MULTISET[t_temperature(CURRENT_DATE,38)],
MULTISET[‘febbre’,’dolori addominali’],
MULTISET[SELECT m.mid
FROM Medicina
WHERE codice =‘xy’ OR codice = ‘zw’])
WHERE paziente.CF =‘XNSHEUE’
Scarica