31.05.2013 Views

Progetto Basi Di Dati Gattile

Progetto Basi Di Dati Gattile

Progetto Basi Di Dati Gattile

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

UNIVERSITÁ DEGLI STUDI DEL MOLISE<br />

CORSO DI LAUREA IN INFORMATICA<br />

<strong>Progetto</strong> per il corso di <strong>Basi</strong> di <strong>Dati</strong><br />

PROGETTO DI UNA BASE DI DATI<br />

PER LA GESTIONE DI UN<br />

GATTILE COMUNALE<br />

Studente : Gianandrea Giovanni<br />

Lepore Antonio<br />

Ricciuti Paolo<br />

Valente Lorenzo<br />

Docente : Prof. Remo Pareschi


INDICE<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

1. INTRODUZIONE .................................................................................................................... 2<br />

2. ANALISI DEI REQUISITI ..................................................................................................... 3<br />

2.1 Descrizione del problema ....................................................................................................... 3<br />

2.2 Specifiche sulle operazioni ..................................................................................................... 4<br />

3. PROGETTAZIONE CONCETTUALE ................................................................................. 6<br />

3.1 Schema concettuale secondo il modello Entità-Relazione .................................................. 6<br />

3.1.1 Anagrafe felina ................................................................................................................ 6<br />

3.1.2 <strong>Gattile</strong> ............................................................................................................................... 9<br />

3.1.3 Integrazione di schemi ...................................................................................................... 12<br />

3.2 Vincoli di integrità dei dati .................................................................................................... 16<br />

3.3 Analisi di qualità ..................................................................................................................... 16<br />

4. PROGETTAZIONE LOGICA ............................................................................................... 17<br />

4.1 Analisi delle prestazioni ......................................................................................................... 17<br />

4.2 Ristrutturazione dello schema E-R ....................................................................................... 18<br />

4.2.1 Analisi delle ridondanze ed Eliminazione delle gerarchie ............................................... 18<br />

4.2.2 Partizionamento/accorpamento di concetti ....................................................................... 19<br />

4.2.3 Eliminazione di attributi composti .................................................................................... 19<br />

4.2.4 Scelta degli identificatori principali .................................................................................. 19<br />

4.3 Traduzione verso il modello relazionale ............................................................................... 21<br />

4.3.1 Proprietà ............................................................................................................................ 21<br />

4.3.2 Rilevazione ....................................................................................................................... 22<br />

4.3.3 Sottoposizione ................................................................................................................... 22<br />

4.3.4 Residenza .......................................................................................................................... 23<br />

4.3.5 Registrazione .................................................................................................................... 24<br />

4.3.6 Prelevamento .................................................................................................................... 24<br />

4.3.7 Ritrovamento .................................................................................................................... 25<br />

4.3.8 Destinazione ..................................................................................................................... 26<br />

4.3.9 Appartenenza .................................................................................................................... 26<br />

4.3.10 Conclusioni ..................................................................................................................... 27<br />

4.4 Verifica di normalizzazione ................................................................................................... 28<br />

5. PROGETTAZIONE FISICA .................................................................................................. 29<br />

5.1 Definizione dello schema della base di dati .......................................................................... 29<br />

5.2 Definizione delle tabelle ......................................................................................................... 29<br />

5.3 Formulazione delle interrogazioni ........................................................................................ 32


1. INTRODUZIONE<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

Il gattile sanitario è il luogo in cui sono raccolti e mantenuti dalla Provincia tutti quei gatti che<br />

risultano essere senza padrone, perché randagi, smarriti o abbandonati, oppure quelli che vengono<br />

consegnati dal padrone stesso, perché impossibilitato a prendersene cura.<br />

Le provincie della regione sono organizzate in modo tale che il Servizio Veterinario di ciascuna A.S.L.<br />

si occupa di registrare i dati anagrafici di tutti i gatti di proprietà residenti nei comuni associati. Così,<br />

chiunque possieda un gatto è obbligato a denunciarne l'esistenza al proprio comune entro i primi tre mesi<br />

di vita e la scomparsa o la morte entro 15 giorni dall'avvenimento.<br />

Al momento dell'iscrizione all'anagrafe felina, ciascun gatto viene identificato univocamente<br />

mediante microchip, cosicché sia sempre possibile rintracciarne il padrone.<br />

Tuttavia non tutti i gatti raccolti dal gattile sono stati precedentemente denunciati e, se nessuno ne<br />

reclamerà lo smarrimento, i comuni in cui sono stati raccolti dovranno occuparsi del loro mantenimento<br />

durante i giorni di carico al gattile.<br />

La realtà presa in considerazione per lo sviluppo della seguente base di dati comprende una A.S.L<br />

che si occupa dell'anagrafe felina e nella cui sede si trova anche il gattile sanitario della provincia.<br />

Si tratta quindi di analizzare due realtà diverse ma strettamente correlate fra loro:<br />

A. la gestione dell'anagrafe felina:<br />

- attribuzione del microchip al gatto;<br />

- registrazione dei dati del padrone;<br />

- compilazione della scheda clinica;<br />

- prestazioni veterinarie;<br />

B. la gestione del gattile:<br />

- entrate/uscite dei gatti dal gattile;<br />

- iscrizione all'anagrafe;<br />

- organizzazione delle spese di mantenimento;<br />

- prestazioni degli operatori (accalappiagatti).<br />

L'introduzione di un programma applicativo semplificherebbe notevolmente il lavoro<br />

dell'amministratore del gattile, ora costretto a compilare a mano tutti i documenti da inviare ai Comuni e<br />

alle A.S.L. A questi enti, infatti, devono essere spedite periodicamente schede di riepilogo sulle presenze di<br />

gattile randagi al gattile e sulle prestazioni di Igiene Pubblica Veterinarie e/o di assistenza zooiatrica<br />

effettuate, ai fini di richiederne il rimborso spese previsto.


2. ANALISI DEI REQUISITI<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

2.1 Descrizione del problema<br />

Si vuole automatizzare l'organizzazione interna di un gattile sanitario per ottenere la gestione completa<br />

dei seguenti aspetti:<br />

• la registrazione dei dati anagrafici e clinici dei gatti;<br />

• la registrazione dei dati di entrata/uscita dei gatti raccolti dal gattile;<br />

• le visite veterinarie cui vengono sottoposti;<br />

• le spese di sostentamento del gatto in relazione a coloro che le sosterranno (padrone, Comune,<br />

A.S.L.);<br />

• l'intervento dei quattro operatori (accalappiagatti);<br />

il registro , sul quale viene segnalato ciascun gatto che entra al gattile per mezzo di un numero<br />

progressivo preceduto da una lettera indicante l'anno (si presuppone che un gatto non viva più<br />

di 25 anni, numero pari alle lettere dell'alfabeto, oltre i quali si potrà riattribuire lo stesso codice ad un<br />

altro gatto); qui saranno rilevati i dati principali del gatto: data e modo di entrata (randagio,<br />

consegnato, pericoloso), razza, taglia, sesso, mantello, data e modo di uscita e sullo spazio riservato<br />

alle note, tramite un codice a barre, si farà riferimento al microchip d'identificazione.<br />

la scheda personale del gatto , suddivisa in:<br />

- scheda di identificazione con riferimento a n° di registro, data di entrata, microchip (sempre tramite<br />

codice a barre), medaglia (solo ad uso interno), tatuaggio, età (anche presunta), sesso, razza,<br />

colore del mantello, pelo, segni particolari, luogo del ritrovamento e comune, eventuale persona<br />

che lo ha segnalato e operatore che lo ha prelevato;<br />

- scheda clinica sulla quale si registra la data e l'esito delle visite veterinarie cui viene sottoposto,<br />

specificando diagnosi, terapia, vaccini, risultati dei test ed eventuale sterilizzazione chirurgica;<br />

- scheda esito su cui vengono rilevati la data e il modo di uscita del gatto che può essere: riscattato,<br />

ceduto, eliminato, pericoloso ritirato o morto (la causa dovrà essere specificata).<br />

la scheda di riepilogo presenze di gatti nel gattile, tramite la quale vengono segnalati ai comuni i<br />

giorni e i microchip in carico per richiederne le spese e la cui compilazione è effettuata<br />

ogni tre mesi interamente a mano dall'amministratore.<br />

Si chiede inoltre la gestione delle spese alle quali va incontro il gattile. Quelle di<br />

cattura, trasporto, vaccinazione, sterilizzazione, smaltimento animali morti, ecc., saranno sostenute<br />

dall'AS.L. di cui fa parte il comune di provenienza del gatto, mentre per quanto riguarda il suo<br />

mantenimento esiste una distinzione basata sui diversi modi di entrata al gattile:


a) può essere raccolto dall'accalappiagatti sotto segnalazione o abbandonato alle porte del gattile.<br />

Se nessuno ne reclamerà lo smarrimento, il gatto sarà considerato randagio e le spese riguardanti il suo<br />

sostentamento e il costo del microchip (€ 15) graveranno sul comune di provenienza (costo<br />

giornaliero € 5). Al costo dei gatti abbandonati nel comune di residenza del gattile stesso<br />

contribuiscono tutti gli altri comuni con una quota aggiuntiva di € 5.<br />

b) può essere consegnato dal padrone stesso perché non più in grado di occuparsene.<br />

In questo caso e in quello in cui un gatto randagio venga riscattato, il costo del microchip (€ 25) e<br />

quello giornaliero, che ammonta a € 10 per i primi 5 giorni e a € 5 per i giorni successivi, sono a<br />

carico del proprietario.<br />

c) può essere segnalato come pericoloso.<br />

Qui vale la stessa distinzione fatta fra gatto randagio o di proprietà.<br />

Riassumendo, è possibile realizzare un glossario (Figura 1.1) che, per ogni concetto di interesse alla<br />

base di dati, contenga: una breve descrizione, i dati inerenti e altri termini con i quali esiste un legame<br />

logico.<br />

2.2 Specifiche sulle operazioni<br />

Le operazioni che si vogliono automatizzare sono le seguenti:<br />

Op. 1 : Inserimento dei dati relativi ad un nuovo gatto.<br />

Op. 2 : Modifica dei dati di un gatto.<br />

Op. 3 : Visualizzazione/Stampa dei dati di un gatto (anagrafici, sanitari, di entrata/uscita).<br />

Op. 4 : Ricerca di un gatto tramite microchip.<br />

Op. 5 : Ricerca di un gatto tramite il nome del padrone (il risultato può essere multiplo).<br />

Op. 6 : Lista complessiva dei gatti entrati al gattile in un certo anno.<br />

Op. 7 : Lista dei gatti attualmente in carico.<br />

Op. 8 : Lista dei gatti randagi attualmente in carico.<br />

Op. 9 : Lista dei gatti entrati in una certa data.<br />

Op. 10 : Lista dei gatti di una certa razza.<br />

Op. 11 : Visualizzazione del numero di gatti di una certa razza.<br />

Op. 12 : Visualizzazione del numero di gatti in carico.<br />

Op. 13 : Visualizzazione del numero di gatti randagi in carico.<br />

Op. 14 : Visualizzazione del numero di microchip assegnati in un periodo a gatti randagi.<br />

Op. 15 : Visualizzazione delle date di Entrata e di Uscita dei gatti randagi presenti al gattile in un<br />

periodo raggruppati per comune.<br />

Op. 16 : Visualizzazione dei dati relativi a ciascun comune.<br />

Op. 17 : Registrazione di una nuova scheda clinica.<br />

Op. 18 : Visualizzazione dei dati di un operatore.<br />

Op. 19 : Statistica periodica (mensile, trimestrale e annuale) sul movimento dei gatti.<br />

Op. 20 : Conteggio e tipo (sanitaria, di trasporto o di smaltimento) delle prestazioni a carico di ciascuna<br />

A.S.L. in un periodo.<br />

Termine Descrizione <strong>Dati</strong> Collegamenti Gatt<br />

Gatto Gatto registrato all'anagrafe.<br />

Può essere randagio o<br />

privato.<br />

Anagrafici,<br />

Clinici<br />

Comune,<br />

Padrone,<br />

Visita<br />

Entrata/Uscita <strong>Dati</strong> dei gatti raccolti dal Numero di registro, Gatto,


gattile. Data e modo di entrata,<br />

Eventuale segnalatore,<br />

Comune Comune di provenienza del<br />

gatto. Il costo giornaliero e<br />

del microchip dei gatti<br />

randagi è a suo carico.<br />

.<br />

Data e modo di uscita<br />

Codice del comune,<br />

Nome,<br />

Sindaco<br />

A.S.L. A.S.L.alla quale appartiene il Numero AS.L.,<br />

comune. Si occupa delle Responsabile,<br />

spese sanitarie, di trasporto e Indirizzo,<br />

di smaltimento di ciascun gatto.<br />

Città<br />

Padrone Proprietario delgatto.<br />

Provvede alle spese di<br />

mantenimento e del<br />

microchip del proprio gatto.<br />

Visita Esito della visita veterinaria<br />

cui viene sottoposto<br />

periodicamente ciascun gatto.<br />

Operatore Accalappiagatti che preleva il<br />

gatto. Attualmente sono<br />

quattro.<br />

Figura 1.1 Glossario dei termini<br />

Codice fiscale,<br />

Cognome,<br />

Nome,<br />

Indirizzo,<br />

Residenza,<br />

Telefono,<br />

Cellulare<br />

Data,<br />

Esami,<br />

<strong>Di</strong>agnosi,<br />

Terapia,<br />

Cognome,<br />

Nome,<br />

Indirizzo,<br />

Città<br />

Operatore,<br />

Comune<br />

Gatto,<br />

A.S.L.<br />

Comune<br />

Gatto<br />

Gatto<br />

Gatto


3. PROGETTAZIONE CONCETTUALE<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

3.1 Schema concettuale secondo il modello Entità-Relazione<br />

Sviluppo secondo le metodologie BOTTOM-UP e TOP-DOWN (strategia mista).<br />

• Dalle specifiche del problema possiamo generare un primo schema scheletro (Figura 3.1) che,<br />

tramite le entità GATTO, PADRONE e COMUNE, rappresenta i concetti principali. Tra queste entità<br />

esistono delle relazioni che descrivono il comune di provenienza dei gatti e la proprietà dello stesso da<br />

parte di un padrone.<br />

COMUNE<br />

provenienza<br />

Figura 3.1 Schema scheletro<br />

GATTO proprietà PADRONE<br />

Prima di procedere con i raffinamenti successivi (strategia top-down), è opportuno suddividere lo<br />

schema iniziale tra i due aspetti che caratterizzano la realtà d'interesse, per poterli prima analizzare<br />

distintamente (strategia bottom-up). Si otterranno quindi due schemi scheletro: uno si riferisce<br />

all'anagrafe felina (Figura 3.2), l'altro alla gestione del gattile (Figura 3.6).<br />

3.1.1 Anagrafe Felina<br />

COMUNE<br />

residenza<br />

Figura 3.2 schema scheletro Anagrafe Felina<br />

GATTO proprietà PADRONE<br />

Lo schema scheletro differisce da quello iniziale solo per una modifica: la relazione che lega GATTO a<br />

COMUNE è diventata residenza e indica il comune in cui vive il gatto dichiarato all'anagrafe.<br />

Primo raffinamento


Poiché ciascun gatto viene periodicamente sottoposto a visite veterinarie, è necessario rappresentare<br />

nello schema la nuova entità VISITA (Trasformazione T1 bottom-up) che appare in Figura 3.3.<br />

Figura 3.2 schema scheletro Anagrafe Felina<br />

COMUNE<br />

Secondo raffinamento<br />

residenza<br />

GATTO<br />

proprietà<br />

PADRONE<br />

sottoposizione VISITA<br />

Ora si possono aggiungere a ciascuna entità e a ciascuna relazione i rispettivi dati sotto forma di<br />

attributi (Trasformazioni T5 e T6 top-down). Tuttavia dalle specifiche del problema si apprende che i<br />

numerosi dati riferiti all'entità GATTO possono essere raggruppati in due classi relative all'anagrafe felina<br />

secondo lo schema di Figura 3.4.<br />

Classe di dati Attributi Descrizione<br />

Anagrafici Microchip<br />

AnnoN<br />

Sesso<br />

Razza<br />

Taglia<br />

Colore<br />

Pelo<br />

Tatuaggio<br />

SegniP<br />

Sanitari DataVacc<br />

Vacc<br />

AntiPar<br />

TestFil<br />

SterChir<br />

Prof<br />

Figura 3.4 Tabella dei dati riferiti all'entità Gatto<br />

Terzo raffinamento<br />

Numero del microchip attribuito<br />

Anno di nascita (anche presunto)<br />

Sesso<br />

Razza<br />

Taglia<br />

Colore del pelo<br />

Tipo di pelo (lungo/corto, liscio/ruvido, ...)<br />

Eventuale tatuaggio<br />

Eventuali segni particolari (attributo formato testo in<br />

cui vengono elencati i segni particolari)<br />

Data in cui è stato effettuato il vaccino<br />

Tipo di vaccino<br />

Antiparassitario<br />

Esito del test filaria (positivo/negativo)<br />

Effettuazione sterilizzazione chirurgica (SI/NO)<br />

Esito profilassi (positivo/negativo)<br />

Per ottenere una base di dati più efficiente si può quindi suddividere verticalmente l'entità GATTO in<br />

due entità (Trasformazione T1 top-down):<br />

1. la prima, che manterrà il nome di quella di origine, aggrega i dati anagrafici;


2. la seconda registra tutti i dati sanitari e prende il nome di SCHEDA CLINICA ed è identificata<br />

dall'entità di origine con un identificatore esterno.<br />

La maggiore efficienza è data dal fatto che questa divisione introduce:<br />

- maggiore velocità di risposta (in genere viene interrogata una singola classe di dati per volta),<br />

- maggiore chiarezza nello schema E-R (l'entità VISITA è legata solo all'entità SCHEDA<br />

CLINICA).<br />

La nuova entità sarà legata a GATTO dalla relazione 1:1 rilevazione.<br />

• Ora è possibile tracciare la prima parte dello schema E-R (Figura 3.5) completo di attributi,<br />

identificatori e cardinalità.<br />

COMUNE<br />

Sindaco<br />

NomeC<br />

CodCom<br />

3.1.2 <strong>Gattile</strong><br />

residenza<br />

Colore<br />

Pelo<br />

(1,1) (0,N)<br />

Figura 3.5 schema finale Anagrafe Felina<br />

Via<br />

N°<br />

Indirizzo<br />

Città<br />

AnnoN<br />

Sesso<br />

Razza<br />

Taglia<br />

GATTO rilevazione<br />

(1,1)<br />

proprietà<br />

(1,N)<br />

PADRONE<br />

Microchip<br />

Tatuaggio<br />

SegniP<br />

(0,1)<br />

(1,1) (1,1)<br />

DataReg<br />

CodFisc Cognome<br />

Nome<br />

COMUNE ritrovamento Gatto<br />

(0,1)<br />

Tel<br />

Cell<br />

Data<br />

<strong>Di</strong>agnosi<br />

Terapia<br />

DataVacc<br />

AntiPar<br />

Vacc<br />

SCHEDA<br />

CLINICA<br />

(1,N)<br />

sottoposizione<br />

(1,1)<br />

TestFil<br />

SterChir<br />

Prof<br />

VISITA


Figura 3.6 schema scheletro <strong>Gattile</strong><br />

In questo caso lo schema scheletro è costituito dalle sole entità Gatto e COMUNE, legate dalla<br />

relazione ritrovamento che indica il comune in cui il gatto è stato raccolto dall'accalappiagatti e che si<br />

occuperà del suo mantenimento nel caso in cui si tratti di un randagio.<br />

Primo raffinamento<br />

Innanzi tutto sarà introdotta l'entità OPERATORE, che racchiude i dati personali degli<br />

accalappiagatti che hanno provveduto all'eventuale prelevamento dell'animale.<br />

Inoltre, poiché l'A.S.L. di appartenenza del comune da cui proviene il gatto si occupa delle spese<br />

riguardanti le prestazioni di Igiene Pubblica Veterinaria (sanitarie, di trasporto e di smaltimento animali<br />

morti), sarà necessario rappresentare nello schema questa nuova entità.<br />

Ora lo schema ha assunto un aspetto più dettagliato (Trasformazione T1 bottom-up), come si può<br />

vedere in Figura 3.7.<br />

A.S.L.<br />

appartenenza<br />

Gatto prelevamento OPERATORE<br />

ritrovamento<br />

COMUNE<br />

Figura 3.7 risultato del primo raffinamento dello schema <strong>Gattile</strong><br />

Secondo raffinamento<br />

Nell'aggiungere i dati sotto forma di attributi (Trasformazioni T5 e T6) ci accorgiamo nuovamente che<br />

i numerosi dati riferiti all'entità gatto possono essere raggruppati questa volta in tre classi secondo lo<br />

schema seguente:<br />

Classe di dati Attributi Descrizione<br />

Anagrafici Microchip<br />

AnnoN<br />

Sesso<br />

Numero del microchip attribuito<br />

Anno di nascita (anche presunto)<br />

Sesso


Entrata NProg<br />

DataEnt<br />

ModoE<br />

Segnalatore<br />

Uscita DataU<br />

ModoU<br />

Note<br />

Razza Razza<br />

Taglia Taglia<br />

Colore Colore del pelo<br />

Pelo Tipo di pelo (lungo/corto, liscio/ruvido, ...)<br />

Tatuaggio Eventuale tatuaggio<br />

SegniP Eventuali segni particolari (attributo formato testo in<br />

cui vengono elencati i segni particolari)<br />

Numero di registro<br />

Data di entrata al gattile<br />

Modo d'entrata (randagio/consegnato/pericoloso)<br />

Eventuale nome della persona che ha chiamato<br />

l'accalappiagatti<br />

Figura 3.8 Tabella dei dati riferiti all'entità GATTO<br />

Terzo raffinamento<br />

Data di uscita dal gattile<br />

Modo di uscita (decesso/rifugio/affidamento/riscatto)<br />

Note o causa dell'eventuale morte<br />

Sempre ai fini di ottenere una base di dati più efficiente si può ancora suddividere verticalmente<br />

l'entità GATTO in tre entità (Trasformazione T1 top-down):<br />

1. la prima, che manterrà il nome di quella di origine, aggrega i dati anagrafici;<br />

2. ENTRATA registra i dati riguardanti l'entrata al gattile ed ha come identificatore un numero<br />

progressivo e la data di entrata;<br />

3. USCITA raccoglie i dati riguardanti l'uscita ed è identificata dall'entità ENTRATA con un<br />

identificatore esterno.<br />

La maggiore efficienza è data dal fatto che questa divisione:<br />

- minimizza l'introduzione di valori nulli (tutti i gatti attualmente accolti dal gattile hanno nulli i<br />

dati riguardanti l'uscita),<br />

- permette una maggiore velocità di risposta (in genere viene interrogata una singola classe di dati<br />

per volta).<br />

L'entità ENTRATA sarà collegata all'entità GATTO dalla relazione 1:N registrazione (uno stesso gatto<br />

può smarrirsi ed essere raccolto dal gattile più di una volta) e l'entità USCITA sarà legata ad ENTRATA<br />

dalla relazione 1:1 destinazione, dove la partecipazione della prima è opzionale.<br />

• Anche la seconda parte dello schema è stata raffinata (Figura 3.9) ed è completa di attributi,<br />

identificatori e cardinalità.


USCITA<br />

(1,1)<br />

destinazione<br />

Note (0,1)<br />

(0,1) (0,1)<br />

(0,1)<br />

ModoU<br />

DataU<br />

Via<br />

N°<br />

Indirizzo Città<br />

Nome CodFisc<br />

Cognome<br />

A.S.L.<br />

NA.S.L.<br />

Resp<br />

(N,M)<br />

Città<br />

Indirizzo<br />

Via<br />

N°<br />

NProg<br />

DataEnt<br />

ModoE<br />

Segnalatore<br />

appartenenza<br />

(0,1)<br />

(1,1)<br />

Figura 3.9 schema finale <strong>Gattile</strong><br />

3.1.3 Integrazione di schemi<br />

(1,1)<br />

prelevamento<br />

(1,1)<br />

Medaglia<br />

(1,N)<br />

Tel<br />

Cell<br />

(0,N)<br />

OPERATORE<br />

ENTRATA registrazione GATTO<br />

Pelo<br />

ritrovamento<br />

(0,N)<br />

COMUNE<br />

Sindaco<br />

NomeC<br />

CodCom<br />

Colore<br />

Taglia<br />

Razza<br />

(0,1)<br />

SegniP<br />

Sesso<br />

Tatuaggio<br />

AnnoN Microchip<br />

Ora è possibile fondere i due schemi ottenuti sovrapponendo le entità rispettivamente omonime<br />

GATTO e COMUNE ed eventualmente modificando le cardinalità dove opportuno (Figura 3.10).


OPERATORE prelevamento<br />

USCITA<br />

A.S.L.<br />

destinazione<br />

appartenenza<br />

ENTRATA registrazione GATTO<br />

ritrovamento<br />

COMUNE<br />

residenza<br />

Figura 3.10 fusione dei due schemi (priva di attributi)<br />

Ultimo raffinamento<br />

rilevazione<br />

SCHEDA<br />

CLINICA<br />

sottoposizione<br />

VISITA<br />

proprietà<br />

PADRONE<br />

Fondamentale per la gestione delle spese di sostentamento è la distinzione fra gatti randagi e gatti di<br />

proprietà. Questo scopo può essere facilmente raggiunto con l'introduzione di una generalizzazione<br />

(Trasformazione T2 top-down) totale ed esclusiva in cui GATTO è l'entità padre e le due entità figlie<br />

RANDAGIO e PRIVATO specificano rispettivamente se si tratta di un gatto randagio o di proprietà. Ora<br />

le relazioni proprietà e residenza coinvolgono solo l'entità figlia interessata, cioè PRIVATO.<br />

• In questo modo è stato completato lo schema concettuale finale secondo il modello E-R, completo di<br />

attributi, identificatori e cardinalità, come si può vedere a pagina 14. I dizionari dei dati sono in Figura<br />

3.11 e 3.12.


Entità Descrizione Attributi Identificatore<br />

GATTO Gatto che viene registrato Microchip, AnnoN, Sesso, Microchip<br />

all'anagrafe felina. Entità Razza, Taglia, Colore, Pelo,<br />

padre.<br />

Tatuaggio, SegniP (0,1)<br />

RANDAGIO Gatto senza padrone. Entità<br />

figlia.<br />

v. entità padre<br />

PRIVATO Gatto di proprietà. Entità<br />

figlia.<br />

v. entità padre<br />

PADRONE Proprietario di un gatto CodFisc, Cognome, Nome, CodFisc<br />

privato.<br />

Indirizzo (Via, N°), Città,<br />

Tel, Cell (0,1)<br />

COMUNE Comune di residenza o di<br />

ritrovamento di un gatti.<br />

CodCom, NomeC, Sindaco CodCom<br />

A.S.L. A.S.L.cui appartiene il NASL, Resp, Indirizzo (Via, NASL<br />

comune.<br />

N°), Città<br />

ENTRATA Raccolta dei dati del gatti NProg, DataEnt, ModoE, NProg,<br />

relativi all'entrata al gattile. Segnalatore (0,1)<br />

DataEnt<br />

OPERATORE Accalappiagatti. CodFisc, Cognome, Nome,<br />

Indirizzo (Via, N°), Città,<br />

Tel, Cell (0,1)<br />

CodFisc<br />

SCHEDA CLINICA Raccolta dei dati sanitari del Vacc, DataVacc, AntiPar,<br />

gatto.<br />

TestFil, SterChir, Prof Gatto<br />

USCITA Raccolta dei dati riguardanti<br />

la destinazione raggiunta dal<br />

gatto.<br />

DataU, ModoU, Note (0,1) Entrata<br />

VISITA Visita veterinaria a cui il Data, Esami, <strong>Di</strong>agnosi, Data, Scheda<br />

gatto viene sottoposto. Terapia<br />

Clinica<br />

Figura 3.11 <strong>Di</strong>zionario dei dati delle entità


Relazione Descrizione Entità coinvolte Attributi<br />

Proprietà Associa un gatto privato al PRIVATO (1,1)<br />

DataReg<br />

suo padrone.<br />

PADRONE (1,N)<br />

Residenza Associa un gatto privato al PRIVATO (1,1)<br />

comune in cui risiede. COMUNE (0,N)<br />

Ritrovamento Associa un gatto entrato al ENTRATA (1,1)<br />

gattile al comune in cui è<br />

stato ritrovato.<br />

COMUNE (0,N)<br />

Appartenenza Associa un comune all'A.S.L. COMUNE (1,1)<br />

di cui fa parte.<br />

A.S.L. (N,M)<br />

Registrazione Associa un gatto alla voce di GATTO (0,N)<br />

Medaglia<br />

registro che ne dichiara<br />

l'entrata al gattile.<br />

ENTRATA (1,1)<br />

Prelevamento Associa la voce di registro di OPERATORE (N,M)<br />

un gatto all'operatore che lo<br />

ha prelevato.<br />

ENTRATA (0,1)<br />

Rilevazione Associa un gatto alla propria GATTO (1,1)<br />

scheda clinica.<br />

SCHEDA CLINICA (1,1)<br />

Sottoposizione Associa la scheda clinica di SCHEDA CLINICA (1,N)<br />

un gatto ad una visita<br />

veterinaria.<br />

VISITA (1,1)<br />

Destinazione Associa un gatto alla sua GATTO (0,1)<br />

scheda esito.<br />

USCITA (1,1)<br />

Figura 3.12 <strong>Di</strong>zionario dei dati delle associazioni


3.2 Vincoli di integrità dei dati<br />

Regole di vincolo:<br />

(RV1) Non sono ammesse duplicazioni di tuple per alcuna tabella.<br />

(RV2) Gli identificatori di tutte le entità non possono assumere valori nulli.<br />

(RV3) Non può essere registrato più di un gatto con lo stesso microchip.<br />

(RV4) Non può essere registrato più di un gatto con lo stesso numero progressivo nello stesso anno.<br />

(RV5) Non è possibile inserire i dati sanitari di un gatto non registrato all'anagrafe felina.<br />

(RV6) Non è possibile compilare la scheda di uscita di un gatto che non risulta essere mai entrato al felina<br />

(RV7) Tutti i gatti che entrano al gattile devono essere sottoposti alla visita veterinaria.<br />

(RV8) Una volta registrato tramite Microchip, nessun gatto può essere cancellato.<br />

3.3 Analisi di qualità<br />

CORRETTEZZA Lo schema è corretto in quanto sono stati utilizzati correttamente i costrutti<br />

del modello Entità - Relazione.<br />

COMPLETEZZA Lo schema concettuale rappresenta tutti i dati di interesse e tutte le<br />

operazioni possono essere eseguite a partire dai concetti descritti. Per questo lo schema può essere<br />

definito completo.<br />

LEGGIBILITA' Lo schema concettuale è leggibile, autoesplicativo e rappresenta i requisiti<br />

in maniera naturale e facilmente comprensibile.<br />

MINIMALITA' Tutte le specifiche sui dati sono rappresentate una sola volta nello schema,<br />

con una eccezione. Infatti la generalizzazione che specifica se un gatto è randagio o privato può essere una<br />

fonte di ridondanza: i gatti privati possono essere rilevati dalle occorrenze della relazione proprietà o da<br />

quelle della relazione residenza. Per questo motivo lo schema proposto non può essere definito minimale.<br />

Tuttavia il raggiungimento della minimalità sarà uno degli scopi della progettazione logica.


4. PROGETTAZIONE LOGICA<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

4.1 Analisi delle prestazioni<br />

Tavola dei volumi<br />

Concetto Tipo Volume<br />

GATTO E 22000<br />

RANDAGIO E 50<br />

PRIVATO E 21950<br />

PADRONE E 21950<br />

ENTRATA E 750/anno<br />

COMUNE E 95<br />

A.S.L. E 3<br />

SCHEDA CLINICA E 22000<br />

VISITA E 4000/anno<br />

OPERATORE E 4<br />

USCITA E 750/anno<br />

Registrazione R 750/anno<br />

Proprietà R 3000/anno<br />

Ritrovamento R 750<br />

Appartenenza R 95<br />

Rilevazione R 3000/anno<br />

Residenza R 3000/anno<br />

Prelevamento R 600/anno<br />

Sottoposizione R 4000/anno<br />

Destinazione R 750/anno<br />

Figura 4.1 Tavole dei volumi e delle operazioni<br />

Tavola delle operazioni<br />

Operazione Tipo Frequenza<br />

Op. 1 I 3000/anno<br />

Op. 2 I 400/anno<br />

Op. 3 I 1000/anno<br />

Op. 4 I 1000/anno<br />

Op. 5 I 1000/anno<br />

Op. 6 B 1/anno<br />

Op. 7 B 4/anno<br />

Op. 8 B 4/anno<br />

Op. 9 I 600/anno<br />

Op. 10 I 5/anno<br />

Op. 11 I 5/anno<br />

Op. 12 B 4/anno<br />

Op. 13 B 4/anno<br />

Op. 14 I 4/anno<br />

Op.15 B 4/anno<br />

Op. 16 B 4/anno<br />

Op. 17 I 3000/anno<br />

Op. 18 I 1/mese<br />

Op. 19 B 1/mese<br />

Op. 20 B 4/anno<br />

La tavola dei volumi e quella delle operazioni raffigurate qui sopra permettono di conoscere<br />

rispettivamente:<br />

• Volume dei dati:<br />

- Numero di occorrenze di ogni entità e associazione dello schema.<br />

• Caratteristiche delle operazioni:<br />

- Tipo dell'operazione (interattiva o batch);<br />

- Frequenza (numero medio di esecuzioni in un certo intervallo di tempo).<br />

Tali informazioni potranno essere utili in seguito per studiare gli indici di prestazione del sistema e<br />

poter prendere decisioni appropriate sul tipo di ristrutturazione dello schema E-R da effettuare.


4.2 Ristrutturazione dello schema E-R<br />

Per semplificare la traduzione verso il modello logico sarà necessario riorganizzare e ottimizzare lo<br />

schema concettuale.<br />

4.2.1 Analisi delle ridondanze ed Eliminazione delle gerarchie<br />

C'è un solo dato ridondante nello schema: la distinzione tra gatto RANDAGIO e PRIVATO introdotta<br />

dalla generalizzazione può essere effettuata semplicemente verificando le occorrenze della relazione<br />

proprietà o della relazione residenza. I gatti che non partecipano a queste associazioni, infatti, sono stati<br />

iscritti all'anagrafe felina in seguito ad un ritrovamento e non per volontà del proprio padrone, e per di<br />

più tale padrone, se esistente, non è stato rintracciato. Ciò porta a concludere che si tratta di gatti randagi.<br />

Così il raggiungimento della minimalità è possibile solo eliminando la gerarchia che vede come<br />

padre l'entità GATTO e come figlie le entità RANDAGIO e PRIVATO. Tuttavia questa modifica risulta<br />

essere d'obbligo per permettere la traduzione verso il modello logico relazionale, poiché tale modello non<br />

permette di rappresentare direttamente una gerarchia.<br />

Il modo migliore per tradurre questa generalizzazione totale ed esclusiva è quello di accorpare le<br />

figlie al padre: in questo modo le proprietà di RANDAGIO e PRIVATO vengono aggiunte a GATTO,<br />

insieme con un nuovo attributo che distinguerà il tipo (randagio o privato) di ogni occorrenza di gatto.<br />

Nel nostro caso nessuna delle due entità figlie possiede attributi che non siano quelli comuni, così<br />

non ci sarà alcuno spreco di memoria dovuto all'introduzione di valori nulli. Inoltre le due associazioni di<br />

PRIVATO, ora collegate direttamente a GATTO, muteranno la loro cardinalità: infatti la partecipazione<br />

dell'entità padre a proprietà e residenza sarà opzionale, a seconda che si tratti di una occorrenza di tipo<br />

randagio o privato.<br />

E' facile accorgersi che l'eliminazione della gerarchia non ha permesso il raggiungimento della<br />

minimalità, poiché ha causato l'introduzione di una nuova forma di ridondanza: l'attributo che indica il<br />

"tipo" di GATTO è un attributo derivabile da operazioni di conteggio di occorrenze.<br />

Dando uno sguardo alle tavole dei volumi e delle operazioni in Figura 4.1 (operazioni 1, 8, 13 e 15),<br />

vediamo che la frequenza con cui vengono effettuate nuove iscrizioni all'anagrafe felina (circa 1000<br />

volte l'anno) è nettamente superiore a quella con cui vengono richieste distinzioni tra gatti randagi e<br />

privati (circa 4 volte l'anno).<br />

Quindi gli svantaggi di mantenere il dato derivato, quali una maggiore occupazione di memoria e la<br />

necessità di effettuare operazioni aggiuntive per mantenere il dato aggiornato, sono molto maggiori<br />

dell'unico vantaggio dato dalla riduzione degli accessi necessari per calcolarlo.<br />

La decisione per la quale si opterà sarà quindi quella di eliminare la ridondanza e raggiungere così lo<br />

stato di minimalità.<br />

4.2.2 Partizionamento/accorpamento di concetti<br />

Non si ritengono necessarie delle trasformazioni di questo genere, poiché già in sede di progettazione<br />

concettuale sono state effettuate delle decomposizioni verticali di entità (vedi GATO e ENTRATA) per<br />

motivi di efficienza che tuttora si ritengono validi.<br />

Inoltre non sono presenti attributi multivalore da eliminare, ma solo attributi opzionali per i quali si<br />

accetta l'introduzione di valori nulli.


4.2.3 Eliminazione di attributi composti<br />

L'attributo "Indirizzo" composto da "Via" e "N°" deve essere sostituito o da un singolo attributo, con<br />

conseguente perdita della nozione di componente, o considerando ciascuna componente come un singolo<br />

distinto attributo, provocando la perdita della nozione di interrelazione tra le componenti.<br />

Poiché per i nostri scopi non è necessario accedere in maniera indipendente alla via o al numero<br />

civico della persona o dell'ente considerato, la soluzione migliore risulta essere quella di sostituire<br />

l'attributo composto con un singolo attributo "Indirizzo".<br />

4.2.4 Scelta degli identificatori principali<br />

L'identificatore di ENTRATA è costituito da due attributi; le entità deboli USCITA, SCHEDA<br />

CLINICA e VISITA hanno un identificatore esterno e per quanto riguarda quest'ultima tale identificatore<br />

è affiancato da un attributo interno. Queste situazioni verranno risolte, quando possibile, in sede di<br />

mapping, quando si cercherà di scegliere chiavi primarie semplici, formate dal minimo numero di attributi<br />

e utilizzate da molte operazioni. Tutte le altre entità presentano un unico identificatore.<br />

• Abbiamo con questo terminato la fase di ristrutturazione dello schema E-R originale. Lo schema<br />

risultante è quello in Figura 4.2.


4.3 Traduzione verso il modello relazionale<br />

Completata la ristrutturazione dello schema concettuale, è ora possibile effettuarne la traduzione<br />

verso lo schema logico relazionale.<br />

In ciascun paragrafo sarà affrontato singolarmente il mapping di ogni associazione binaria, seguito<br />

dalla discussione della scelta delle chiavi primarie delle tabelle ottenute e dalla schematizzazione dei<br />

vincoli di integrità referenziale introdotti.<br />

4.3.1 Proprietà<br />

Associazione 1:N tra GATTO e PADRONE con un attributo (DataReg) che indica la data in cui la<br />

persona è stata registrata come padrone del gatto in questione. La partecipazione di GATTO è opzionale.<br />

Per evitare l'introduzione di ulteriori valori nulli, optiamo per il seguente schema (l'apice asterisco<br />

indica che l'attributo può assumere il valore nullo):<br />

GATTO (Microchip, AnnoN, Sesso, Razza, Taglia, Colore, Pelo, Tatuaggio, SegniP * )<br />

PADRONE (CodFisc, Cognome, Nome, Indirizzo, Città, Tel, Cell * )<br />

PROPRIETA' (Microchip, CodFisc, DataReg)<br />

La chiave di PROPRIETA' è costituita solo dall'identificatore di GATTO perché le cardinalità<br />

dell'associazione ci dicono che ogni gatto può avere al più un solo padrone. Per una migliore leggibilità<br />

dello schema è più opportuno modificare i nomi degli attributi referenti nel modo seguente:<br />

PROPRIETA' (GATTO Padrone, DataReg)<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.3.<br />

PADRONE<br />

CodFisc Cognome Nome<br />

PROPRIETA’<br />

Gatto Padrone<br />

GATTO<br />

Microchip AnnoN Sesso Razza<br />

Indirizzo Città Tel Cell<br />

DataReg<br />

Taglia Colore Pelo Tatuaggio SegniP<br />

Figura 4.3 Rappresentazione grafica dei vincoli d'integrità referenziali di PROPRIETA'<br />

4.3.2 Rilevazione


Associazione 1:1 tra GATTO e SCHEDA CLINICA. Quest'ultima è un'entità debole ed ha<br />

GATTO come unico identificatore esterno.<br />

Poiché entrambi gli schemi delle entità avranno come chiave l'identificatore dell'entità forte, una<br />

soluzione potrebbe essere quella di rappresentarli in un unico schema. Tuttavia, per motivi di efficienza<br />

citati precedentemente, si preferisce mantenere i due schemi distinti:<br />

GATTO (Microchip, AnnoN, Sesso, Razza, Taglia, Colore, Pelo, Tatuaggio, SegniP * )<br />

SCHEDA CLINICA (Microchip, DataVacc, Vacc, TestFil, AntiPar, SterChir, Prof)<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.4.<br />

GATTO<br />

SCHEDA CLINICA<br />

Microchip DataVacc Vacc TestFil AntiPar SterChir Prof<br />

Microchip AnnoN Sesso Razza Taglia Colore Pelo Tatuaggio SegniP<br />

Figura 4.4 Rappresentazione grafica dei vincoli d'integrità referenziali di SCHEDA CLINICA<br />

4.3.3 Sottoposizione<br />

Associazione 1:N tra VISITA e SCHEDA CLINICA. VISITA è un'entità debole ed ha come<br />

identificatore l'attributo Data e l'entità SCHEDA CLINICA.<br />

L'unico modo per tradurre questa associazione è il seguente:<br />

VISITA (Microchip, Data, <strong>Di</strong>agnosi, Terapia)<br />

SCHEDA CLINICA (Microchip, DataVacc, Vacc, TestFil, AntiPar, SterChir, Prof)<br />

La chiave di VISITA è costituita dall'attributo Data e dall'identificatore di SCHEDA CLINICA. E' da<br />

notare che Microchip è anche chiave di GATTO, cosicché esiste una referenza anche con questo schema di<br />

relazione. Tuttavia ciò è introdotto dal fatto che SCHEDA CLINICA e GATTO sono legati da una<br />

associazione 1:1.<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.5.


VISITA<br />

Microchip<br />

SCHEDA CLINICA<br />

Microchip DataVacc<br />

Data <strong>Di</strong>agnosi Terapia<br />

Vacc TestFil AntiPar SterChir Prof<br />

Figura 4.5 Rappresentazione grafica dei vincoli d'integrità referenziali di VISITA<br />

4.3.4 Residenza<br />

Associazione 1:N tra GATTO e COMUNE. Entrambe le partecipazioni sono opzionali.<br />

Per evitare lo spreco di memoria causato dalla generazione di una terza relazione, accettiamo questa<br />

volta l'introduzione di eventuali valori nulli, ottenendo il seguente schema:<br />

GATTO (Microchip, AnnoN, Sesso, Razza, Taglia, Colore, Pelo, Tatuaggio, SegniP * , CodCom * )<br />

COMUNE (CodCom, NomeC, Sindaco)<br />

Per una migliore leggibilità dello schema è più opportuno modificare il nome dell'attributo referente<br />

in GATTO:<br />

GATTO (Microchip, AnnoN, Sesso, Razza, Taglia, Colore, Pelo, Tatuaggio, SegniP * , Residenza * )<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.6.<br />

GTTO<br />

Microchip AnnoN Sesso Razza Taglia Colore Pelo Tatuaggio SegniP Residenza<br />

COMUNE<br />

CodCom NomeC Sindaco<br />

Figura 4.6 Rappresentazione grafica dei vincoli d'integrità referenziali di GATTO<br />

4.3.5 Registrazione


Associazione 1:N tra ENTRATA e GATTO con un attributo (Medaglia) che indica il numero della<br />

medaglia che permette il riconoscimento del gatto all'interno del gattile. La partecipazione di GATTO è<br />

opzionale.<br />

In questo caso lo schema di GATTO rimane invariato, mentre per ENTRATA otteniamo:<br />

ENTRATA (NProg, DataE, ModoE, Segnalatore * , Microchip, Medaglia)<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.7.<br />

ENTRATA<br />

NProg DataE ModoE Segnalatore Microchip Medaglia<br />

GATTO<br />

Microchip AnnoN Sesso Razza Taglia Colore Pelo Tatuaggio SegniP Residenza<br />

Figura 4.7 Rappresentazione grafica dei vincoli d'integrità referenziali di ENTRATA<br />

4.3.6 Prelevamento<br />

Associazione 1:N tra ENTRATA e OPERATORE. La partecipazione di ENTRATA è opzionale.<br />

Per evitare l'introduzione di ulteriori valori nulli, optiamo per il seguente schema:<br />

ENTRATA (NProg, DataE, ModoE, Segnalatore * , Microchip, Medaglia)<br />

OPERATORE (CodFisc, Cognome, Nome, Indirizzo, Città, Tel, Cell * )<br />

PRELEVAMENTO (NProg, DataE, CodFisc)<br />

La chiave di PRELEVAMENTO è costituita solo dall'identificatore di ENTRATA perché le<br />

cardinalità dell'associazione ci dicono che ogni gatto può prelevato al più da un solo padrone. Per una<br />

migliore leggibilità dello schema è più opportuno modificare i nomi degli attributi referenti nel modo<br />

seguente:<br />

PRELEVAMENTO (NReg, Data, Operatore)<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.8.


OPERATORE<br />

ENTRATA<br />

CodFisc Cognome Nome Indirizzo<br />

PRELEVAMENTO<br />

NReg Data Operatore<br />

NProg DataE ModoE Segnalatore<br />

Città Tel Cell<br />

Microchip Medaglia<br />

Figura 4.8 Rappresentazione grafica dei vincoli d'integrità referenziali di PRELEVAMENTO<br />

4.3.7 Ritrovamento<br />

Associazione 1:N tra ENTRATA e COMUNE. La partecipazione di COMUNE è opzionale.<br />

In questo caso lo schema di COMUNE rimane invariato, mentre ENTRATA acquista un nuovo<br />

attributo:<br />

ENTRATA (NProg, DataE, ModoE, Comune, Segnalatore * , Microchip, Medaglia)<br />

Sempre per motivi di comprensione e leggibilità, l'attributo referente ha mutato il nome da CodCom a<br />

Comune e indica il comune in cui il gatto è stato ritrovato.<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.9.<br />

ENTRATA<br />

NProg DataE ModoE Comune Segnalatore Microchip Medaglia<br />

COMUNE<br />

CodCom NomeC<br />

Sindaco<br />

Figura 4.9 Rappresentazione grafica dei vincoli d'integrità referenziali di ENTRATA


4.3.8 Destinazione<br />

Associazione 1:1 tra ENTRATA e USCITA. Quest'ultima è un'entità debole ed ha ENTRATA come<br />

unico identificatore esterno. La partecipazione di ENTRATA è opzionale.<br />

Poiché entrambi gli schemi delle entità avranno come chiave l'identificatore dell'entità forte, una<br />

soluzione potrebbe essere quella di rappresentarli in un unico schema. Tuttavia, per motivi di efficienza<br />

citati precedentemente e per evitare l'introduzione di valori nulli, si preferisce mantenere i due schemi<br />

distinti. Lo schema di ENTRATA rimane invariato, mentre USCITA è tradotto nel modo seguente:<br />

USCITA (NReg, DataEntrata, DataU, ModoU, Note * )<br />

Sempre per motivi di comprensione e leggibilità, gli attributi referenti hanno mutato il nome da<br />

NProg e DataE a NReg e DataEntrata.<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.10.<br />

USCITA<br />

NReg DataEntrata DataU ModoU Note<br />

ENTRATA<br />

NProg DataE ModoE Comune Segnalatore Microchip Medaglia<br />

Figura 4.10 Rappresentazione grafica dei vincoli d'integrità referenziali di ENTRATA<br />

4.3.9 Appartenenza<br />

Associazione 1:N tra COMUNE e A.S.L.<br />

Il modo più conveniente per tradurre questa associazione è il seguente:<br />

COMUNE (CodCom, NomeC, Sindaco, A.S.L.)<br />

A.S.L.(NA.S.L., Resp, Indirizzo, Città)<br />

All'interno dello schema COMUNE, per quanto riguarda l'attributo referente, al nome NA.S.L. è stato<br />

preferito semplicemente quello di A.S.L..<br />

I vincoli di integrità referenziale introdotti dalla traduzione sono rappresentati in Figura 4.11.


COMUNE<br />

CodCom NomeC Sindaco A.S.L.<br />

A.S.L.<br />

NA.S.L. Resp Indirizzo Città<br />

Figura 4.11 Rappresentazione grafica dei vincoli d'integrità referenziali di COMUNE<br />

4.3.10 Conclusioni<br />

Abbiamo così terminato il processo di traduzione e lo schema logico relazionale risultante è riportato<br />

di seguito.<br />

GATTO (Microchip, AnnoN, Sesso, Razza, Taglia, Colore, Pelo, Tatuaggio, SegniP * , Residenza * )<br />

PROPRIETA' (Gatto, Padrone, DataReg)<br />

PADRONE (CodFisc, Cognome, Nome, Indirizzo, Città, Tel, Cell * )<br />

SCHEDA CLINICA (Microchip, DataVacc, Vacc, TestFil, AntiPar, SterChir, Prof)<br />

VISITA (Microchip, Data, <strong>Di</strong>agnosi, Terapia)<br />

COMUNE (CodCom, NomeC, Sindaco, A.S.L.)<br />

A.S.L. (NA.S.L., Resp, Indirizzo, Città)<br />

ENTRATA (NProg, DataE, ModoE, Comune, Segnalatore * , Microchip, Medaglia)<br />

PRELEVAMENTO (NReg, Data, Operatore)<br />

OPERATORE (CodFisc, Cognome, Nome, Indirizzo, Città, Tel, Cell * )<br />

USCITA (NReg, DataEntrata, DataU, ModoU, Note * )


4.4 Verifica di normalizzazione<br />

Uno schema di relazione R è in forma normale di Boyce e Codd se per ogni dipendenza funzionale<br />

(non banale) X → Y definita su di essa, X è superchiave per R.<br />

Lo schema di base di dati ottenuto non presenta alcuna dipendenza funzionale che non soddisfi la<br />

forma normale di Boyce e Codd.<br />

Inoltre gli attributi delle relazioni sono definiti su valori atomici e non su valori complessi. Quindi<br />

possiamo concludere che tutti gli schemi soddisfano la condizione di prima forma normale, di BCNF e, di<br />

conseguenza, di seconda e terza forma normale.


5. PROGETTAZIONE FISICA<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

Ora seguirà la formulazione in SQL dello schema della Base di <strong>Dati</strong>, dei vincoli di integrità, e<br />

dì alcune interrogazioni previste nella fase di analisi dei requisiti funzionali. L'omissione della<br />

dichiarazione di alcuni vincoli d'integrità indica che si assumono validi i valori di default.<br />

5.1 Definizione dello schema di base di dati<br />

create schema gattile;<br />

start schema gattile;<br />

5.2 Definizione delle tabelle<br />

• GATTO:<br />

create table GATTO<br />

(<br />

Microchip char (20) primary key,<br />

AnnoN char (10),<br />

Sesso char (1),<br />

Razza char (20),<br />

Taglia char (10),<br />

Colore char (15),<br />

Pelo char (15),<br />

Tatuaggio char (20),<br />

SegniP char (50) default nessuno,<br />

Residenza char (5) default sconosciuta<br />

references Comune (CodCom),<br />

)<br />

• PROPRIETA':<br />

create table Proprietà<br />

(<br />

Gatto char (20) primary key<br />

references Gatto (Microchip),<br />

Padrone char (16) not null<br />

references Padrone (CodFisc),<br />

DataReg date<br />

)


• PADRONE:<br />

create table Padrone<br />

(<br />

CodFisc char (16) primary key,<br />

Cognome char (20) not null,<br />

Nome char (20) not null,<br />

Indirizzo char (50),<br />

Città char (20),<br />

Tel char (20),<br />

Cell char (20)<br />

)<br />

• SCHEDA CLINICA:<br />

create table Scheda Clinica<br />

(<br />

Microchip char (20) primary key<br />

references Gatto (Microchip),<br />

DataVacc date,<br />

Vacc char (20),<br />

TestFil char (10),<br />

AntiPar char (20),<br />

SterChir char (2),<br />

Prof char (10)<br />

)<br />

• VISITA:<br />

create table Visita<br />

(<br />

Microchip char (20)<br />

references Gatto (Microchip),<br />

Data date,<br />

<strong>Di</strong>agnosi char (50),<br />

Terapia char (50),<br />

primary key (Microchip, Data)<br />

)


• COMUNE:<br />

create table Comune<br />

(<br />

CodCom<br />

NomeC<br />

Sindaco<br />

A.S.L.<br />

)<br />

• A.S.L.:<br />

create table A.S.L.<br />

(<br />

N°A.S.L.<br />

Resp<br />

Indirizzo<br />

Città<br />

)<br />

• ENTRATA:<br />

create table Entrata<br />

(<br />

N°Prog<br />

DataE<br />

ModoE<br />

Comune<br />

)<br />

Segnalatore<br />

Microchip<br />

Medaglia<br />

primary key (N°Prog, DataE)<br />

char (5) primary key,<br />

char (20),<br />

char (40),<br />

char (2)<br />

referencesA.S.L. (N°A.S.L.)<br />

char (2) primary key,<br />

char (40),<br />

char (50),<br />

char (20)<br />

char (5),<br />

date,<br />

char (15),<br />

char (5) not null<br />

references Comune (CodCom),<br />

char (40),<br />

char (20),<br />

char (5),


• PRELEVAMENTO:<br />

create table Prelevamento<br />

(<br />

N°Reg char (20),<br />

Data date,<br />

Operatore char (16) not null<br />

references Operatore (CodFisc),<br />

primary key (N°Reg, Data),<br />

foreign key (N°Reg, Data)<br />

references Entrata (N°Prog, DataE)<br />

)<br />

• OPERATORE:<br />

create table Operatore<br />

(<br />

CodFisc<br />

Cognome<br />

Nome<br />

Indirizzo<br />

Città<br />

Tel<br />

Cell<br />

)<br />

• USCITA:<br />

create table Uscita<br />

(<br />

N°Reg<br />

DataEntrata<br />

DataU<br />

ModoU<br />

)<br />

Note<br />

char (16) primary key,<br />

char (20) not null,<br />

char (20) not null,<br />

char (50),<br />

char (20),<br />

char (20),<br />

char (20)<br />

char (5),<br />

date,<br />

date,<br />

char (15),<br />

char (50),<br />

primary key (N°Reg, DataEntrata),<br />

foreign key (N°Reg, DataEntrata)<br />

references Entrata (N°Prog, DataE)


5.3 Formulazione delle interrogazioni<br />

Per quanto riguarda le operazioni di inserimento, modifica e cancellazione, è riportata solo la sintassi,<br />

mentre le interrogazioni sono svolte interamente. Per permettere la formulazione delle operazioni<br />

interattive, sono state introdotte variabili parametriche nelle quali saranno inseriti i dati d'ingresso.<br />

• Operazione n° 1:<br />

insert into Gatt [ Microchip, AnnoN, Sesso, Razza, Taglia, Colore, Pelo, Tatuaggio,<br />

SegniP,<br />

Residenza]<br />

< values ( Lista<strong>Di</strong>Valori ) ><br />

• Operazione n° 2:<br />

update NomeTabella [ ListaAttributi ]<br />

set Attributo = ValoreAttr<br />

[ where Condizione ]<br />

• Operazione n° 3:<br />

select *<br />

from Gatto G inner join (Scheda Clinica) SC on C.Microchip = SC.Microchip<br />

where C.Microchip = [Numero Microchip:];<br />

• Operazione n° 4:<br />

select *<br />

from Gatto<br />

where Microchip = NumMicrochip;<br />

• Operazione n° 5:<br />

select *<br />

from (Gatto G inner join Proprietà Pr on C.Microchip = Pr.Gatto) inner join Padrone P<br />

on Pr.Padrone = P.CodFisc<br />

where P.Nome = [Inserire Nome:] and P.Cognome [Inserire Cognome:];<br />

• Operazione n° 6:<br />

select *<br />

from Entrata<br />

where datepart("yyyy",DataE) = Anno;


• Operazione n° 7:<br />

select *<br />

from Entrata as E left outer join Uscita as U<br />

on (E.NProg = U.NReg and E.DataE = U.DataEntrata)<br />

where not exists (select NReg, DataEntrata<br />

from Uscita as U<br />

where E.NProg = U.NReg and E.DataE = U.DataEntrata);<br />

• Operazione n° 8:<br />

select *<br />

from (Entrata as E left outer join Uscita as U on E.NProg = U.NReg and<br />

E.DataE = U.DataEntrata) left outer join Proprietà as P on E.Microchip = P.Gatto<br />

where not exists (select NReg, DataEntrata<br />

from Uscita as U<br />

where E.NProg = U.NReg and E.DataE = U.DataEntrata)<br />

and E.Microchip not in (select Gatto<br />

from Proprietà);<br />

• Operazione n° 9:<br />

select *<br />

from Entrata<br />

where DataE = [Inserire Data:];<br />

• Operazione n° 10:<br />

select *<br />

from Gatto<br />

where Razza = [Inserire Razza:];<br />

• Operazione n° 11:<br />

select count(*)<br />

from Gatto<br />

where Razza = [Inserire Razza:];<br />

• Operazione n° 12:<br />

select count(*) as NGattiCarico<br />

from Entrata as E left outer join Uscita as U<br />

on (E.NProg = U.NReg and E.DataE = U.DataEntrata)<br />

where not exists (select NReg, DataEntrata<br />

from Uscita as U<br />

where E.NProg = U.NReg and E.DataE = U.DataEntrata);


• Operazione n° 13:<br />

select count(*) as NRandagi<br />

from (Entrata as E left outer join Uscita as U on E.NProg = U.NReg and<br />

E.DataE = U.DataEntrata) left outer join Proprietà as P on E.Microchip = P.Gatto<br />

where not exists (select NReg, DataEntrata<br />

from Uscita as U<br />

where E.NProg = U.NReg and E.DataE = U.DataEntrata)<br />

and E.Microchip not in (select Gatto<br />

from Proprietà);<br />

• Operazione n° 14:<br />

SELECT count(*) as NMicrochip<br />

FROM Entrata E left outer join Proprietà P ON E.Microchip = P.Gatto<br />

where E.DataE >= DataInizio and E.DataE < DataFine<br />

and E.Microchip not in (select Gatto<br />

from Proprietà);<br />

• Operazione n° 15:<br />

select Comune, E.NProg, E.DataE, U.DataU<br />

from (Entrata as E left outer join Uscita as U on (E.DataE = U.DataEntrata)<br />

and (E.NProg = U.NReg)) left outer join Proprietà as Pr on Pr.Gatto = E.Microchip<br />

where (U.DataU > DataInizio<br />

or (not exists (select O.NReg, O.DataEntrata<br />

from Uscita O<br />

where O.NReg = E.Nprog and O.DataEntrata = E.DataE)))<br />

and E.DataE


Operazione n° 18:<br />

select *<br />

from Operatore<br />

where CodFisc = [Codice Fiscale:];<br />

• Operazione n° 20:<br />

Vista la complessità di questa interrogazione, è più opportuno dividerla in più query.<br />

Query20a: restituisce il numero di prestazioni di smaltimento di gatti randagi morti raggruppate per<br />

comune.<br />

select E.Comune, Count(*) as Smaltimenti<br />

from (Uscita as U inner join Entrata as E on (U.DataEntrata = E.DataE)<br />

and (U.NReg = E.NProg)) left join Proprietà on E.Microchip = Proprietà.Gatto<br />

where ([DataInizio] U.DataU)<br />

and (U.ModoU = 'deceduto') and ((E.Microchip) Not In (select Gatto<br />

from Proprietà))<br />

group by E.Comune;<br />

Query20b: restituisce il numero di prestazioni di cattura e trasporto di gatti randagi raggruppate per<br />

comune.<br />

select E.Comune, count(*) as NumTrasporti<br />

from (Entrata as E inner join Prelevamento as Pv on (E.DataE = Pv.Data) and<br />

(E.NProg = Pv.NReg)) left join Proprietà on E.Microchip = Proprietà.Gatto<br />

where ([DataInizio]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!