• Non ci sono risultati.

Per quanto concerne la Soluzione alternativa invece...

N/A
N/A
Protected

Academic year: 2021

Condividi "Per quanto concerne la Soluzione alternativa invece..."

Copied!
2
0
0

Testo completo

(1)

Di seguito vengono confrontate le Soluzioni proposte(Soluzioni del Corriere della Sera e Soluzione Alternativa) per la traccia del 2007 evidenziando eventuali modifiche che potrebbe essere apportate ma soprattutto le differenti interpretazioni date della traccia d'esame.

Per quanto riguarda la soluzione del Corriere della Sera... a parte che c'è un po' di confusione sui nomi assegnati alle tabelle nel diagramma E/R prenotazione → visita , visita → prestazione.... probabilmente dovuta alla fretta di pubblicare la soluzione il prima possibile,ci sono un paio di osservazioni da fare:

Nella soluzione del Corriere si interpreta la frase orario delle visite come un modo di dire che per ogni visita deve essere registrata anche l'ora(della prenotazione) e il tempo di durata previsto.

Nell'altra soluzione si interpreta la medesima frase come orari di ricevimento dei medici e tempo medio di visita per medico.

Prestazione: nella Soluzione del Corriere si fa l'ipotesi che una prestazione possa corrispondere a più visite. Il problema è che la durata media della prestazione non sembra corrispondere al tempo medio previsto per la visita a cui si fa riferimento nella traccia.

Per quanto riguarda il campo specializzazione va bene metterlo nella tabella Medico senza utilizzare una tabella a parte per uno Studio Medico dove lavorano in genere una decina di medici, la maggior parte dei quali, probabilmente, con specializzazioni diverse(la ridondanza in questo caso non comporterebbe un danno eccessivo)... a patto che ogni Medico abbia una sola specializzazione, ma ciò non è vero in generale(ne è stata avanzata alcuna ipotesi, al riguardo, nel testo della soluzione) per cui è necessario creare una tabella a parte e collegarla N:N con Medico come mostrato nella Soluzione Alternativa(che è la soluzione teoricamente più corretta se si vuole evitare ridondanza e rispettare la Prima Forma Normale(niente attributi composti e multipli) ).

Stesso discorso per Numero di Telefono... converrebbe mettere almeno un altro campo per il cellulare, ma anche così non sono sicuro che siano sufficienti: la possibilità di reperire il medico o il paziente è fondamentale e quindi sembra logico voler memorizzare più recapiti telefonici!

Per quanto riguarda l'indirizzo il discorso è meno pressante, tuttavia saper dove inviare una fattura potrebbe essere altrettanto importante nel caso in cui il paziente vada in vacanza o comunque non sia sempre reperibile ad un unico indirizzo(un discorso analogo vale per documenti da inviare al medico).

Nella tabella Paziente NumTessera andrebbe sostituito(per lo meno in Italia) con codice fiscale .

Vediamo l'implementazione:

1. quando le chiavi primarie non devono essere inserite manualmente(e questo è il caso dell' ID numerico per Medico,Paziente,Prestazione e Visita) dovrebbero essere specificati come auto_increment

2. quando si ha a che fare con le stringhe utilizzare varchar al posto di char per evitare di sprecare spazio a meno che non si tratti di campi di lunghezza fissa(esempio il codice fiscale)

3. data e ora sono registrati incampi separati anche se potrebbero essere riuniti in un unico campo DATETIME ma questo semplifica gli update perchè sarebbe più complicato modificare solo la data o l'ora (al riguardo vedi sul sito Esercizi sulle Date: c'è un esercizio, aggiunto di recente, che mostra proprio come si potrebbe eseguire un'operazione del genere)

4. Non sono specificati vincoli referenziali o per lo meno in MySQL InnoDB si lasciarebbe l'opzione di default ON DELETE RESTRICT ON UPDATE RESTRICT che va anche bene perchè qui le chiavi sono tutte id autoincrementanti, ma si potrebbe anche porre ON UPDATE CASCADE volendo.

5. Non sono specificati indici per accelerare la ricerca ad es. su nome e cognome paziente, a parte ovviamente quelli creati in automatico sulle chiavi esterne

(2)

Per quanto concerne la Soluzione alternativa invece...

1. Non c'è necessità di mettere Giorno(attributo derivabile) nella tabella Visita, il nome del giorno può essere ricavato sia attraverso apposite istruzioni in SQL, sia attraverso un opportuno script PHP lato server

2. L'attributo Tipo, nel modo in cui è utilizzato qui, potrebbe essere inserito nella specifica del titolo piuttosto che in riferimento al Medico e come codice numerico(piuttosto che una stringa) che permetta di classificare i titoli in varie tipologie come mostrato in Soluzione Prof. (es. 0 : titolo di laurea, 1 : specializzazione, 2 : altro, in effetti ci servirà un attributo Tipo anche nella tabella DatiAnagrafici ma inteso in maniera diversa)

3. L'attributo TempoMedio dovrebbe essere inserito in Visite in quanto sembra che la traccia lasci intendere che questo valore debba essere previsto relativamente ad ogni specifica visita. Il suo inserimento nella tabella Orari lascia perplessi, in quanto, tale valore risulterebbe essere fisso per Medico e soprattutto per giorno(es. lunedì solo visite “brevi”). In genere è il numero di visite che dovrebbe variare in base agli impegni del medico e all'orario di ricevimento e non il tempo impiegato nella visita!.

Adesso vediamo le query:

1) Il nodo da sciogliere è rappresentato dalla frase : “per ogni singolo medico”

Nel caso della Soluzione proposta dal Corriere la query è così interpretata: visualizza le visite di tutti i medici in un certa data.

L'ordinamento permette di raggruppare le visite in base al cognome del Medico.

Potrebbero esserci più persone con lo stesso cognome(ad es. per uno studio a conduzione familiare), ottenendo come risultato quello di mischiare le visite dei medici.

Quindi se devo ordinare mi conviene farlo anche in base alla chiave primaria, inoltre mi converrebbe stampare anche l'ora della visita e non solo il nome e cognome del paziente.

L'interpretazione più adeguata è probabilmente quella della Soluzione Alternativa che interpreta “per ogni singolo medico” come “per uno specifico medico”.

Nella Soluzione Alternativa però ci si è dimenticati di fare il join anche con Paziente per visualizzarne nome e cognome invece che la chiave primaria.

2)

Anche qui converrebbe visualizzare l'ora per distinguere gli appuntamenti saltati da quelli da effettuare ancora.

3)

Per la terza query qui la traccia è veramente scritta male... anche qui le frasi “di ciascun medico” e

“suddivisi per giorno e per ora” possono essere interpretate in vari modi.

1.

La soluzione del Corriere interpreta “di ciascun medico” nel senso “di tutti i medici” mentre la soluzione alternativa come: “di uno specifico medico”(il cui codice deve essere inserito per effettuare la ricerca)

2.

L'utilizzo del verbo suddividere è alquanto discutibile: le query non “suddividono i dati” al massimo li filtrano o li ordinano... oppure li raggruppano per calcolare funzioni di aggregazione. Il Corriere della Sera dà l'interpretazione seguente di questa frase: ordinati per medico,data e ora mentre nella Soluzione Alternativa: ordinati in base a giorno e ora per un dato medico.

3.

In quest'ultima soluzione viene usata impropriamente la clausola Group By che si usa solo quando si devono calcolare funzioni di aggregazione(SUM,COUNT,MIN,MAX,AVG,...). In questo caso tuttavia si ottiene lo stesso effetto perchè Group By ordina automaticamente i dati in base agli attributi specificati.

4.

Nella Soluzione Alternativa manca il vincolo sulla settimana(“lunedì” potrebbe essere tra 3 settimane), mentre nella Soluzione del Corriere della Sera questa informazione dovrebbe essere fornita dall'utente. Sarebbe invece preferibile determinare questo vincolo in automatico.

4)

Sempre la solita duplice interpretazione della frase di ciascun (= tutti o = un particolare) tuttavia nella seconda soluzione manca l'ordinamento dei dati in base alla data della visita

Riferimenti

Documenti correlati

Un vincolo è scabro quando è in grado di contrastare, entro certi limiti, una forza tendente a far compiere al punto spostamenti tangenti al vincolo.. In questo caso siamo in

Si basa sul seguente risultato di insiemistica: se A,B sono insiemi finiti, con A=n, B=m, e se n>m , comunque data una funzione f: A → B, esistono sempre almeno 2

• La funzione di EGIG è di mettere insieme i dati relativi alla sicurezza operativa delle reti gas naturale attraverso l’analisi della frequenza statistica degli

La chiave esterna Medico della tabella Visite è in relazione con la tabella Medici mediante la chiave primaria Codice. La chiave esterna Medico della tabella

Am- bedue le istituzioni sono oggi cor- responsabili della tutela della salu- te in carcere; se infatti al Ssn è propria una responsabilità profes- sionale e organizzativa dei

2/5 SL AMBIENTAZIONI/VISTE ALL’INTERNO ED ALL’ESTERNO DEI MAGAZZINI RACCORDATI CHE MOSTRINO COME L’INTERVENTO DI PROGETTO SI VA AD INSERIRE NELL’AREA E CHE TIPO DI SCENARIO

Entità dell'impatto Lieve o trascurabile Legata alla ricrescita della

[r]