Anteprima
Vedrai una selezione di 10 pagine su 162
Informatica medica Pag. 1 Informatica medica Pag. 2
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 6
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 11
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 16
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 21
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 26
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 31
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 36
Anteprima di 10 pagg. su 162.
Scarica il documento per vederlo tutto.
Informatica medica Pag. 41
1 su 162
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

OPERATORI AGGREGATI

Per adesso come operazioni da fare su gruppi di record abbiamo visto count(*); in SQL ci sarebbero

anche altre varianti, ma nel nostro caso si considera solo count(*). Abbiamo visto che se non

facciamo GROUP BY, mi conta tutte le righe della mia tabella come se fossero un unico grande

gruppo; se invece facciamo GROUP BY, conta le righe di ogni gruppo. count(*) calcola il numero dei

record che ottengo come risultato del Join della selezione.

Altri operatori aggregati:

• sum(Attributo): calcola la somma dei valori dell’Attributo in ogni gruppo di record.

• min(Attributo): calcola il minimo valore dell’attributo in ogni gruppo di record.

• max(Attributo): calcola il massimo valore dell’attributo in ogni gruppo di record.

• avg(Attributo): calcola la media dei valori dell’attributo in ogni gruppo di record.

ESEMPI: Partendo dalla solita tabella Impiegati, ora vado a fare la sum(Stipendio). Rispetto a prima,

per ogni dipartimento, anziché dirmi quanti impiegati ci sono, mi restituisce la somma degli stipendi

di quegli impiegati. In Distribuzione c’è solo Neri che guadagna 45 e quindi la somma sarà 45. In

Produzione abbiamo invece Bianchi 36 + Franco 46 = 82. Messe insieme le righe, anziché fare

count(*), ha fatto la somma degli stipendi. In una seconda query vediamo che li usiamo tutti in un

colpo solo (ne possiamo usare più di uno) ed i risultati sono dati da colonne diverse della solita

tabella. Per ogni dipartimento calcolo la somma degli stipendi sum(Stipendio), lo stipendio minimo

min(Stipendio), lo stipendio medio avg(Stipendio) e lo stipendio massimo max(Stipendio). Questo

lo ha fatto per ogni gruppo.

Di operatori ce ne sono tanti altri, questi sono quelli più comuni. In realtà, anche a seconda del DBBS

che usiamo, a volte ci sono delle funzioni in più ed in meno. Funzionano nello stesso modo ma a

seconda del programma potete fare dei calcoli piuttosto che altri. Questi operatori invece essendo

di base si possono utilizzare in tutti i programmi.

ESEMPIO 7: “Estrarre cognome, numero (quanti sono) e stipendio medio degli impiegati che

lavorano nel dipartimento di “Amministrazione” o “Direzione”, raggruppati per Cognome”

Su questo raggruppamento voglio calcolare queste due

operazioni aggregate: il conteggio e lo stipendio medio. Quello

che devo fare è la selezione per Dipart=”Amministrazione” OR

Dipart=”Direzione”, così da escludere tutti gli impiegati che

lavorano altrove. Selezionati in questo modo, li vado a

raggruppare per Cognome ed una volta raggruppati, li conto con count(*) (AS, alias, Numero), faccio

lo stipendio medio con avg(Stipendio) e lo chiamo con AS

StipendioMedio.

Variante: “Supponiamo (calcolati questi numeri e stipendi

medi) di voler visualizzare solo i gruppi il cui stipendio

medio è maggiore di 50”

Abbiamo ad esempio i 3 Rossi che guadagnano 69, Lanzi che guadagna 73 e Neri che guadagna 52.

Borroni e Verdi guadagnano meno di 50 e quindi li vorrei escludere. Devo fare una selezione con

avg(Stipendio)>50. Aggiungo una clausola WHERE, che mi fa la selezione sulle singole righe, sul

tabellone Impiegati (sempre quella da cui parto, allegata nelle pagine precedenti) e sulle singole

righe.

Non posso dire stipendio medio >50 perché nelle singole righe è solo lo stipendio di un singolo

impiegato. La selezione che devo fare non è una

selezione normale che posso fare con WHERE.

La selezione che ho da fare la devo fare sulla

tabella dopo aver fatto raggruppamento ed aver

calcolato le medie. WHERE mi va a fare la

selezione sulla tabella di partenza, ma la mia

condizione parla di stipendi medi, quindi di

gruppi, non di singoli impiegati.

Per fare questa seconda selezione che vorrei fare

dopo raggruppamento, ho bisogno di qualcosa di nuovo: ho bisogni in questo caso di una causa che

si chiama HAVING, che aggiungo alle altre clausole. HAVING mi consente di specificare una

condizione, per fare una selezione, ma che è una selezione ulteriore, una selezione successiva a

raggruppamento che vado a fare sulla tabella con i risultati dei gruppi. In questa condizione posso

andare anche a utilizzare operatori aggregati. Posso ad esempio andare a fare un calcolo su tutte le

righe del gruppo per vedere se quel gruppo di righe soddisfa la proprietà che mi interessa. Vado

dunque a fare HAVING avg(Stipendio)>50. Di tutte queste righe vado a risparmiare solo quelle che

corrispondono a dei gruppi il cui stipendio medio è maggiore di 50. Ho creato un alias per

avg(Stipendio) e quindi posso scrivere anche AS StipendioMedio. La cosa importante è che HAVING

mi abbia consentito di fare una seconda selezione successiva a raggruppamento in cui la condizione

che vado a scrivere è una condizione che riguarda i gruppi di impiegati, in particolare le condizioni

usano tipicamente le condizioni aggregate, condizioni che di solito riguardano il gruppo.

RIEPILOGO

Quindi questa è la struttura generale di una query SQL e la sua esecuzione.

Struttura:

• SELECT attributo1. Attributo2

• FROM tabella1, tabella2

• WHERE condizione

• GRUOP BY attributo1, attibuto2

• HAVING condizione 2

• ORDER BY attributo X, attributoY

Si può anche usare AS per definire alias di attributi.

ESEMPIO FINALE: “Elencare, in ordine alfabetico, i nomi dei dipartimenti di Milano in cui lavorano

almeno due impiegati calcolando la somma degli stipendi degli impiegati che vi lavorano”

Voglio considerare i dipartimenti in cui lavorano almeno 2

impiegati, e di questi dipartimenti voglio calcolare la somma

degli stipendi degli impiegati e presentare il risultato in ordine

alfabetico. Mi servono tutte e due le tabelle: IMPIEGATI e

DIPARTIMENTI.

Con queste due tabelle innanzitutto devo andare a fare il Join

delle due tabelle (in cui ho messo anche degli alias) ed è bene

che vada a mettere la condizione che fa si che io vada a selezionare

solo le combinazioni di righe che hanno senso: in questo caso lo

faccio collegando la chiave esterna con la chiave primaria quindi

Dipart = D.Nome (voglio fare riferimento al dipartimento di

quell’impiegato). Successivamente mi interessano i dipartimenti di

Milano e quindi metto nella selezione anche un AND D.Città = “Milano”, per escludere il resto dei

dipartimenti. Fatta la selezione a questo punto vado a raggruppare; voglio raggruppare per

dipartimento, perché io voglio calcolare per ogni dipartimento la somma degli stipendi degli

impiegati, quindi nel risultato voglio una riga per ogni dipartimento, raggruppando BY D.Nome. Una

volta che li ho selezionati, nel gruppo posso scrivere sia D.Nome che Dipart. Per ogni dipartimento

di Milano ho la somma degli stipendi dei dipendenti, però in realtà sono interessato ai dipartimenti

che hanno almeno 2 impiegati, ma i dipartimenti di Milano entrambi hanno più di 2 impiegati, quindi

entrambi soddisfano la condizione HAVING count(*)>2. Se considerassi i dipartimenti non solo di

Milano, a questo punto avrei anche Distribuzione e Produzione. Per concludere aggiungo ORDER BY

D.Nome e anche in questo caso non cambia niente perché sono già in ordine alfabeti.

[Il Professore voleva fare un esempio più esemplificativo poiché le condizioni aggiunte non

selezionano ulteriormente i dati e dunque non mettono in risalto il ruolo degli operatori, però

comunque ci ha fatto vedere i vari passaggi e come questi funzionano

LEZIONE 5 31/ 03/ 2021,

SISTEMI INFORMATIVI SANITARI: ASPETTI FI INTEGRAZIONE DI DATI:

Introduzione

La volta scorsa abbiamo completato una prima parte del corso sulle basi di dati e sulle tecniche di

interrogazione delle basi di dati: abbiamo visto il linguaggio SQL di cui abbiamo visto alcuni esempi

(il professore ci ha lasciato delle dispense con degli esercizi che possiamo fare).

Ora spenderemo altre due lezioni per fare un argomento meno tecnico che riguarda molti aspetti

che sono importanti nella realizzazione di un grosso sistema informativo come quelli che sono

utilizzati in ambito sanitario. Dobbiamo affrontare tecniche che consentono di integrare database

di soggetti diversi, di enti e organismi diversi in un unico grande sistema integrato. Nella prossima

lezione tratteremo anche aspetti che riguardano la protezione di dati che andiamo a inserire in

questi sistemi, quindi toccheremo aspetti che sono relativi sia alla privacy ma anche alla sicurezza

informatica.

Oggi nella prima parte portiamo aspetti che riguardano l’integrazione dei dati, quindi quali sono le

tecniche che consentono di mettere insieme tanti dati di sorgenti diverse e quali sono le principali

problematiche da affrontare per realizzare un sistema di questo tipo. In particolare partiremo

descrivendo quali sono le caratteristiche dei sistemi informativi che si usano nell’ambito del

Servizio Sanitario Nazionale per capire quali sono le funzionalità che è bene che i sistemi

informatici possano fornire. Ci concentreremo sia sull’aspetto sanitario, quindi sulla gestione dei

dati sanitari dei cittadini, sia sui processi in ambito più specificamente ospedaliero, quindi sulla

gestione dei dati relativa ad esempio a un singolo ricovero, e vedremo che due strumenti

importanti in questi due ambiti che consentono di ottenere integrazione di dati da diverse fonti

sono il Fascicolo Sanitario Elettronico e la Cartella Clinica Elettronica (questi sono due esempi di

integrazione di sistemi in ambito sanitario e in ambito ospedaliero). Poi faremo un “passettino”

più verso gli aspetti tecnici, senza però andare troppo nel dettaglio ma cercando un po’ di capire

quali sono le problematiche che richiedono un intervento tecnico. Inoltre vedremo un po’ quali

sono le principali metodologie per l’integrazione dei dati (brevemente parleremo del modello

“client-server” che è il modo con cui solitamente si consente in informatica di accentrare dei dati

in un unico database consentendo ad utenti remoti di accedere anche tramite la rete). Vedremo

quali sono le diverse modalità di accesso ai dati che si possono mettere in piedi e parleremo anche

di misure di standardizzazione, quindi di come rendere uniformi i database da integrare in modo

tale che poi l’integrazione possa effettivamente avvenire. Ci concentreremo più sulle

problematiche e i concetti che sui dettagli tecnici.

Integrazione di dati nel SSN: motivazioni

Partiamo con l’analizzare le caratteristiche del SSN per capire come un sistema informatico ci

possa aiutare.

Il servizio Sanitario Nazionale (SSN) è un sistema complesso:

questo vuol dire che in generale ci sono tanti componenti

che hanno un certo livello di autonomia e che devono

interagire per svolgere determinate

funzioni.

Il concetto di sistema complesso è un concetto che non si

<
Dettagli
Publisher
A.A. 2020-2021
162 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher ClaudiaLen di informazioni apprese con la frequenza delle lezioni di Informatica medica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pisa o del prof Milazzo Paolo.