Prof. Mauro [email protected]
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 costoefficacia 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’