Basi di dati e linguaggio SQL

Access e database in rete

Php e MySQL

Soluzione tema di esame Mercurio 2007 - seconda prova scritta di Informatica

Studio medico associato

Analisi dei dati

Entità
Le entità che possono essere individuate nel problema sono:
Medico, per rappresentare l’insieme dei medici, di base e specialisti che operano nello studio associato (l’anagrafica è unica e un attributo distingue le due tipologie di medico).
Prestazione, per rappresentare i servizi offerti dallo studio.
Paziente, per l’anagrafica delle persone che richiedono le prestazioni.
Visita, per rappresentare il dettaglio del quadro orario delle singole prestazioni nei giorni della settimana.
Prenotazione, per le visite prenotate dai pazienti in date specifiche.

Attributi

Gli attributi di Medico sono: Matricola (chiave), Cognome, Nome, Data di nascita, Genere (M/F), Specializzazione.
In particolare, poiché viene richiesto di memorizzare i dati professionali dei medici, l’attributo Specializzazione, se valorizzato, contiene la specialità professionale del medico; se nullo,indica un medico di base.
Tutti gli attributi sono di tipo carattere, ad eccezione di Data di Nascita, che è di tipo data.
Gli attributi di Prestazione sono: Codice (chiave), Descrizione, Durata media in minuti, Costo, eventuale Ticket.
Tutti gli attributi sono di tipo numerico, ad eccezione di Descrizione.
Gli attributi di Paziente sono: Codice assistito (chiave), Cognome, Nome, Data di nascita, Genere (M/F), Codice fiscale (per i pagamenti), Telefono per un recapito.
Tutti gli attributi sono di tipo carattere, ad eccezione di Data di Nascita, che è di tipo data.
Gli attributi di Visita sono: ID (chiave), Giorno della settimana, Ora, Numero ambulatorio dove si svolge.
Tutti gli attributi sono di tipo numerico, ad eccezione di Giorno.
Gli attributi di Prenotazione sono: ID (chiave), Data, Effettuata.
L’attributo Effettuata (attributo booleano) assume il valore Vero quando il paziente ha usufruito della visita.
ID è di tipo numerico, la Data della prenotazione è di tipo data.

Associazioni

Tra l’entità Medico e l’entità Visita esiste un’associazione 1:N, perché ogni medico svolge l’attività in diversi giorni della settimana, ma ogni visita (in un certo giorno e ora della settimana) è affidata a un solo medico.
Tra l’entità Prestazione e l’entità Visita esiste un’associazione 1:N, perché per ogni prestazione sono presenti più visite nel quadro orario, ma ogni visita del quadro orario si riferisce a una sola prestazione.
Tra l’entità Visita e l’entità Prenotazione esiste un’associazione 1:N, perché ogni visita può essere oggetto di molte prenotazioni, ma ogni prenotazione viene registrata con riferimento a una sola visita tra quelle previste nel quadro orario.
Tra l’entità Paziente e l’entità Prenotazione esiste un’associazione 1:N, perché ogni paziente può prenotare più visite, ma ogni prenotazione viene registrata con riferimento a un solo paziente.

 

Modello E/R

Modello E/R

 


Regole di lettura
Ogni medico può svolgere una o più visite, ogni visita deve essere svolta da un solo medico.
Ogni prestazione può programmare una o più visite, ogni visita deve essere programmata per una sola prestazione.
Ogni visita può essere richiesta da una o più prenotazioni, ogni prenotazione deve richiedere una sola visita.
Ogni paziente può registrare una o più prenotazioni, ogni prenotazione deve essere registrata per un solo paziente.

Tabelle
Medici (Matricola, Cognome, Nome, DataNascita, Genere, Specializzazione)
Prestazioni (Codice, Descrizione, DurataMedia, Costo, Ticket)
Pazienti (CodiceAssistito, Cognome, Nome, DataNascita, Genere, CF, Telefono)
Visite (ID, Giorno, Ora, NumAmbulatorio, Matricola, Codice)
Prenotazioni (ID, DataPrenot, Effettuata, CodiceAssistito, IDVisita)

Le associazioni 1:N sono state rappresentate aggiungendo nelle tabelle Visite e Prenotazioni le chiavi esterne (indicate in corsivo).


Descrizione dei dati

Tabella

Attributo

Chiave

Formato

Dimensione

Obbligatorio

Indicizzato

Medici

Matricola                       
Cognome
Nome
DataNascita
Genere
Specializzazione

PK

Carattere
Carattere
Carattere
Data
Carattere
Carattere

5
30
20
8
1
20



Prestazioni

Codice       
Descrizione
TempoMedio
Costo
Ticket

PK

Carattere
Carattere
Numerico
Numerico
Numerico

5
30
intero
reale
reale


Pazienti

CodAssistito 
Cognome
Nome
DataNascita
Genere
CF
Telefono

PK

Carattere
Carattere
Carattere
Data
Carattere
Carattere
Carattere

7
30
20
8
1
16
12



Visite

ID                  
Giorno
Ora
NumAmbulatorio
Matricola
Codice

PK



FK
FK

Numerico
Carattere
Numerico
Numerico
Carattere
Carattere

Intero autoincr
3
reale
reale
5
5


Prenotazioni

ID                  
DataPrenot
Effettuata
CodAssistito
IDVisita

PK


FK
FK

Numerico
Data
Booleano
Carattere
Numerico

Intero autoincr
8

7
intero


 

Interrogazioni

1. elenco giornaliero delle visite prenotate per ogni singolo medico;
Select Medici.Cognome, Medici.Nome, Visite.Ora, Visite.NumAbulatorio
From Medici, Visite, Prenotazioni
Where Medici.Matricola = Visite.Matricola AND
     Visite.ID = Prenotazioni.IDVisita AND
     Prenotazioni.DataPrenot = curdate() AND
     Prenotazioni.Effettuata = false
Order By Medici.Cognome, Medici.Nome;

 

2. elenco giornaliero delle visite prenotate e non effettuate;
Select Visite.Ora, Visite.NumAmbulatorio, Medici.Cognome
From Medici, Visite, Prenotazioni
Where Medici.Matricola = Visite.Matricola AND
     Visite.ID = Prenotazioni.IDVisita AND
     Prenotazioni.DataPrenot = curdate() AND
     Prenotazioni.Effettuata = false
Order By Visite.Ora;

 

3. elenco settimanale contenente gli appuntamenti di ciascun medico suddivisi per giorno e per ora;

Select Medici.Cognome, Medici.Nome, Prenotazioni.DataPrenot, Visite.Giorno, Visite.Ora
From Medici, Visite, Prenotazioni
Where Medici.Matricola = Visite.Matricola AND
     Visite.ID = Prenotazioni. IDVisita AND
     Prenotazioni.DataPrenot BETWEEN @data1 AND @data2
Order By Medici.Cognome, Medici.Nome, Prenotazioni.DataPrenot;

 

4. elenco cronologico delle visite usufruite da ciascun paziente.
Select Pazienti.Cognome, Pazienti.Nome, Prenotazioni.DataPrenot, Prenotazioni.IDVisita
From Pazienti, Prenotazioni
Where Pazienti.CodAssistito = Prenotazioni.CodAssistito AND
     Prenotazioni.Effettuata = true
Order By Pazienti.Cognome, Pazienti.Nome, Prenotazioni.DataPrenot;