Informatica CL Fisioterapisti Informatica Medica Sistemi per la...

Post on 19-Jun-2020

3 views 0 download

Transcript of Informatica CL Fisioterapisti Informatica Medica Sistemi per la...

Prof. Mauro Gasparimauro.gaspari@unibo.it

InformaticaCL Fisioterapisti

Informatica MedicaSistemi per la gestione

di basi di Dati

1

2

Informatica Medica

La scienza che si occupa della gestione dell’informazione e dei programmi basati su calcolatore in sanità 

L’informatica medica è la logica della sanità. Studio razionale del modo in cui:

i pazienti vengono pensati i trattamenti sono definiti, selezionati ed ottimizzati la conoscenza medica viene creata, formata, condivisa ed applicata la sanità è organizzata per fornire i suoi servizi

3

Alcuni Obiettivi

Garantire costo­efficacia dei servizi sanitari aumentandone la qualità.

Favorire la collaborazione tra i membri di un team di specialisti coinvolti nella gestione di un paziente.

Usare in modo efficiente ed efficace le soluzioni tecnologiche.

Il fine è l’innovazione e l’ottimizzazione del processo di cura dei pazienti.

4

Alcune applicazioni

Studio dei sistemi biologici (Fisiologia ­ Fisiopatologia) Prevenzione dello stato di malattia (Epidemiologia ­ Statistica) Cura della malattia (Gestione delle terapie – Dispositivi medici 

terapeutici) Valutazione della disabilita (EDSS nella Sclerosi Multipla) Riabilitazione: apparati di supporto alla riabilitazione  (stimolatori, 

sistemi per isocinetica) Riabilitazione cognitiva.

5

Come?

Gestione e comunicazione di dati ed informazione. Reti di personal computer. Sistemi informativi in campo medico. Programmi applicativi specifici:

Sistemi per la classificazione e codifica Sistemi di comunicazioni ed information retrieval  Sistemi per la definizione di linee guida e protocolli Sistemi per l’analisi dei dati Sistemi di supporto alle decisioni

6

Cosa tratteremo

Organizzazione delle informazioni – sistemi informativi. Sistemi per la Gestione di Basi di Dati. Il linguaggio SQL (Structured Query Language). Elaborazione statistica dei dati sanitari.

7

Sistema Informativo

Insieme degli strumenti, risorse e procedure che consentono la gestione delle informazioni aziendali

• è essenziale per il funzionamento dell'azienda

• è fortemente integrato con il sistema organizzativo

• comprende risorse umane

Insieme dei sistemi hardware e software presenti in una azienda 

• permette la generazione, l'elaborazione, la circolazione e la memorizzazione delle informazioni su supporti informatici

8

Esempi di Sistemi Informativi

applicazioni gestionali classiche

• gestione ordini, personale, magazzino

applicazioni finanziarie

• banche, borsa, carte di credito

 sistemi di prenotazione

• treni, aerei, alberghi, autonoleggi

nuove applicazioni

• gestione dei progetti, del territorio

• commercio elettronico

9

Sistemi Informativi nella Sanità

Gestione delle informazioni utili alla misura ed alla valutazione dei processi gestionali e clinici al fine di ottimizzare le risorse impegnate nel conseguimento degli obiettivi istituzionali ed ottimizzare le modalità di comunicazione.

Esempi: Cartella clinica elettronica. Gestione di linee guida cliniche

10

Dati vs Informazione

Dato: unita' elementare (grezza) di informazione

Informazione: elaborazione dei dati per rispondere a esigenze specifiche 

dell'impresa Conoscenza?

11

Dati vs Processi

PROCESSO :

procedura

aziendale che

risponde ad un

particolare compito

applicativo

Database

Processi

Utenti

13

Architettura Sistema Informativo

Database

Processi

Data BaseManagement System

Sistemi per la Gestione di Basi di Dati

Modello concettuale dei Dati (Modello dei dati) Meccanismi per garantire l'integrità Un linguaggio di interrogazione Supporto per programmi applicativi 

Esistono sul mercato alcune centinaia di prodotti diversi

• per uso personale

• per server in una rete

• per mainframe

Principali Caratteristiche

Condivisione dei dati

• assenza di replicazione nei file

• possibilità di accesso concorrente

Qualità dei dati

• vincoli di integrità

Efficienza

• caricamento, query ottimizzate, ordinamenti automatici

Controllo dell'accesso

• Sicurezza

• Possibilità dati privati

Robustezza (si evita la perdita di dati)

16

Il modello dei dati relazionale Una base di dati e' organizzata in relazioni dette anche tabelle. Si tratta del modello attualmente più utilizzato. Buoni meccanismi di ottimizzazione (forme normali). Interrogazioni espresse tramite un algebra relazionale. Linguaggio di interrogazione SQL (Structured Query Language)

Supporto per transazioni: sequenze di operazioni sui dati che devono essere eseguite completamente per avere effetto, se una transazione non viene eseguita completamente l'effetto delle operazioni eseguite viene annullato.

DB-Persone

Persone Maternita

Paternita

Interrogazione semplice

Nome e Reddito delle persone con meno di 30 anni

Elementi dell’interrogazione

Nome e Reddito delle persone con meno di30 anni.

Tabella/e da utilizzare

Elementi dell’interrogazione

Nome e Reddito delle persone con meno di30 anni.

Tabella/e da utilizzare

Condizione

Elementi dell’interrogazione

Nome e Reddito delle persone con meno di30 anni.

Tabella/e da utilizzare

Condizione

Attributi su cui proiettareil risultato

Interrogazione semplice in SQL

SELECT Nome, RedditoFROM PersoneWHERE Eta < 30

Target listClausola FromClausola Where

Semantica di una query SELECT/FROM/WHERE

• Si  esegue  il  prodotto  cartesiano  delle  tabelle  coinvolte  (in  questo caso,  essendoci  una  sola  tabella,  il  prodotto  cartesiano  non  viene effettuato)

• Si selezionano le righe (tuple) sulla base del predicato della clausola Where

• Si proietta sugli attributi della target list

SELECT Nome, RedditoFROM PersoneWHERE Eta < 30

Target listClausola FromClausola Where

SELECT Nome, RedditoFROM PersoneWHERE Eta < 30

(1) Prodotto cartesiano (1 tabella)

(1b) Prodotto cartesiano (2 tabelle)

(2) Selezione

SELECT Nome, RedditoFROM PersoneWHERE Eta < 30

(3) Proiezione

SELECT Nome, RedditoFROM PersoneWHERE Eta < 30

Risultato

SELECT Nome, RedditoFROM PersoneWHERE Eta < 30

DB-Impiegati

Impiegato

Dipartimento

Target list: selezione senza proiezione

SELECT *FROM ImpiegatoWHERE Cognome = ‘Rossi’

Target list: selezione con proiezione

SELECT Nome, Cognome, StipendioFROM ImpiegatoWHERE Cognome = ‘Rossi’

Target list: proiezione senza selezione

SELECT Nome, CognomeFROM Impiegato

Target list: proiezione con/senza duplicati

SELECT CognomeFROM Impiegato

SELECT DISTINCT CognomeFROM Impiegato

Target list: espressioni

SELECT Stipendio/12 As StipendioMensileFROM ImpiegatoWHERE Cognome = ‘Bianchi’

StipendioMensile

3.00

Clausola WHERE: disgiunzione

SELECT Nome, CognomeFROM ImpiegatoWHERE Dipart = ‘Amministrazione’ ORWHERE Dipart = ‘Produzione’

Clausola WHERE: condizione complessa

SELECT NomeFROM ImpiegatoWHERE Cognome = ‘Rossi’ ANDWHERE (Dipart = ‘Amministrazione’ ORWHERE Dipart = ‘Produzione’)

Nome

Mario

Clausola WHERE: operatore IN

SELECT NomeFROM ImpiegatoWHERE Cognome = ‘Rossi’ ANDWHERE Dipart IN (‘Amministrazione’,WHERE ‘Produzione’)

Nome

Mario

Clausola WHERE: operatore LIKE

SELECT *FROM ImpiegatoWHERE Cognome LIKE ‘_o%i’

_ Un carattere qualsiasi

% Un stringa qualsiasi

Clausola WHERE: operatore BETWEEN

SELECT *FROM ImpiegatoWHERE Stipendio BETWEEN 40 AND 45

Clausola WHERE: valori nulli“Impiegati che hanno o potrebbero avere uno stipendio minore

di 50”

•N.B.: Vogliamo anche gli stipendi “nulli”

Clausola WHERE: valori nulli

SELECT *FROM Impiegati_con_nulliWHERE Stipendio < 50 or Stipendio IS NULL

Ordinamento del risultato

• A  differenza  del  modello  relazionale,  in  cui  le  tuple  non  sono ordinate,  le  righe di  una  tabella possono esserlo  ­  anche  se  solo  al momento della presentazione all’utente.

• Talvolta  la possibilità di ordinare  il  risultato di un’interrogazione  è importante.  Ad  esempio,  se  si  voglio  gli  stipendi  in  ordine  dal minore al maggiore.

• SQL mette a disposizione la clausola ORDER BY

Ordinamento del risultato: esempio

SELECT Cognome, Nome, StipendioFROM ImpiegatoWHERE Dipartimento LIKE ‘Amm%’ORDER BY Stipendio DESC, Cognome ASC

discendente ascendente (default)

JOIN Implicito

• Il  JOIN  è  un  operatore  fondamentale,  in  quanto  permette  di utilizzare congiuntamente le informazioni contenute in più tabelle

• Un  JOIN  corrisponde  a  un  prodotto  cartesiano  seguito  da  una selezione

• E’  quindi  possibile  realizzare  un  JOIN  tramite  gli  statement  SQL visti  finora,  cioè  FROM  e  WHERE,  che  permettono  di  compiere prodotti cartesiani e selezioni

• Esistono anche operatori specifici, ma non li vedremo

Prodotto cartesiano

• Il  prodotto  cartesiano  di  due  o  più  tabelle  si  ottiene  riportando  le tabelle nella clausola From, senza clausola Where

DB-Persone

Persone Maternita

Paternita

JOIN Implicito

• Query: “Padre e madre di ogni persona”

SELECT Padre, Paternita.Figlio, MadreFROM Paternita, MaternitaWHERE Paternita.Figlio = Maternita.Figlio

Esempio: Selezione, Proiezione e JOIN

• Query: “I padri di persone che guadagnano più di venti milioni”

SELECT distinct Paternita.PadreFROM Paternita, PersoneWHERE Paternita.Figlio = Persone.Nome AND Reddito > 20

Self-JOIN

• Nel  JOIN  tra  una  tabella  e  se  stessa  occorre  necessariamente utilizzare dei  sinonimi  (alias) per distinguere  le diverse occorrenze della tabella

• Query:  “Le  persone  che  guadagnano  più  dei  rispettivi  padri. Mostrare nome, reddito e reddito del padre”

SELECT F.Nome, F.Reddito, P.RedditoFROM Paternita, Persone F, Persone PWHERE Figlio = F.Nome AND P.Nome = Padre AND F.Reddito > P.Reddito

Stessa cosa, con ridenominazione del risultato

• Query:  “Le  persone  che  guadagnano  più  dei  rispettivi  padri. Mostrare nome, reddito e reddito del padre”

SELECT Figlio, F.Reddito AS Reddito, P.Reddito AS RedditoPadre,FROM Paternita, Persone P, Persone FWHERE Figlio = F.Nome AND P.Nome = Padre AND F.Reddito > P.Reddito

DB-Impiegati

Impiegato

Dipartimento

Necessità di operatori su tuple

• Nelle interrogazioni viste finora le condizioni di selezione (clausola Where)  venivano  valutate  su  ciascuna  riga  indipendentemente  da tutte le altre

• Si può ad esempio verificare quali dipartimenti hanno sede a Milano

• Ma non si può contarne il numero, perchè occorrerebbe valutare un insieme di righe

Esempio di operatore aggregato: count

SELECT count(*) AS DipMilanesi FROM DipartimentoWHERE Citta = ‘Milano’

DipMilanesi

3

Valutazione di un operatore aggregato

• Vediamo  come  viene  valutata  la  seguente  interrogazione  con operatore aggregato COUNT, che conta  il numero di  impiegati che lavorano in Produzione

SELECT count(*) AS numeroImpiegati FROM ImpiegatoWHERE Dipart = ‘Produzione’

Valutazione di un operatore aggregato (1)

• Prima si valuta la query senza operatore aggregato

SELECT *FROM ImpiegatoWHERE Dipart = ‘Produzione’

• Poi si considerano le tuple come un insieme

Valutazione di un operatore aggregato (2)

SELECT count(*) AS numeroImpiegati FROM ImpiegatoWHERE Dipart = ‘Produzione’

•N.B.: Count conta il numero di righe

L’operatore COUNT

• COUNT può anche riferirsi a singole colonne

SELECT count(*) AS numeroImpiegati FROM Impiegato

SELECT count(Stipendio) AS numeroStipendi FROM Impiegato

numeroStipendi

8

numeroImpiegati

8

L’operatore COUNT

• La  valutazione  si  effettua  esattamente  allo  stesso  modo:  prima  la query senza COUNT...

SELECT StipendioFROM Impiegato

• ... quindi il conteggio dell’insieme di righe

L’operatore COUNT

SELECT count(Stipendio) AS numeroStipendi FROM Impiegato

numeroStipendi

8

COUNT e valori nulli

• Quando  si  specificano  le  colonne  su  cui  contare,  il  risultato  può variare per via dei valori nulli

• Consideriamo la seguente tabella:

COUNT e valori nulli

SELECT count(*) AS numeroImpiegati FROM ImpiegatoConNulli

numeroImpiegati

6

SELECT count(Stipendio) AS numeroStipendi FROM ImpiegatoConNulli

numeroStipendi

5

Conteggio delle righe diverse tra loro

• Se si vogliono considerare solo righe diverse l’una dall’altra, si può utilizzare l’opzione distinct

SELECT count(Stipendio) AS numeroStipendiFROM Impiegato

numeroStipendi

8

SELECT count(distinct Stipendio) AS stipendiDiversiFROM Impiegato

stipendiDiversi

6

Conteggio delle righe diverse tra loro

• Questo equivale (come al solito) alla valutazione della query senza operatore aggregato...

SELECT distinct StipendioFROM Impiegato

•... e al successivo conteggio delle righe

SELECT count (distinct Stipendio)FROM Impiegato

Altri operatori

• Quanto detto per COUNT vale anche per gli operatori: SUM, MAX, MIN, AVG

• Questi operatori escludono opportunamente i valori nulli

• L’opzione distinct può ancora essere utilizzata

• Esistono  altri  operatori  (varianza,  mediano  ...),  ma  non  sono standard. Controllare il manuale del sistema che si vuole utilizzare

Esempi di altri operatori

SELECT max(Stipendio) AS stipendioMaxFROM Impiegato

stipendioMax

80

SELECT min(Stipendio) AS stipendioMinFROM Impiegato

stipendioMin

36

Altri operatori

SELECT sum(Stipendio) AS sommaStipendiFROM Impiegato

sommaStipendi

405

SELECT avg(Stipendio) AS mediaStipendiFROM Impiegato

mediaStipendi

50.625

Operatori aggregati e JOIN

• Gli operatori aggregati si possono utilizzare anche in concomitanza con i JOIN

SELECT max(Stipendio) AS stipendioMassimoFROM Impiegato, Dipartimento Dwhere Dipart = D.Nome AND Citta = ‘Milano’

stipendioMassimo

80

Operatori aggregati e ridenominazione

• Se non utilizziamo la AS, il risultato non ha nome

SELECT max(Stipendio) FROM Impiegato, Dipartimento Dwhere Dipart = D.Nome AND Citta = ‘Milano’

max(Stipendio)

80

• Non è  lecita  la presenza contemporanea nella  target  list di  nomi di campi e operatori aggregati

• Ad esempio, la seguente interrogazione non è corretta:

Operatori aggregati e target list

SELECT Cognome, Nome, min(Stipendio) FROM Impiegatowhere Dipart = ‘Amministrazione’