You are on page 1of 57

Aquarium

Elaborato per il corso di Basi di Dati


Corso di Laurea in Ingegneria e scienze informatiche
Anno accademico 2013/2014

Londei Marina, matr 657478


Longobardi Luca, matr 652732

Introduzione

Il progetto Aquarium consiste nel realizzare un database per la gestione


di un acquario. Trattandosi di un progetto didattico, abbiamo deciso di
focalizzarci soltanto su alcuni dei tanti aspetti di un acquario, ovvero
quello di gestione delle attivit primarie. Sono presenti diversi punti di
vista, per garantire il pi possibile la completezza dell'applicazione:
essendo presenti un certo numero di compiti e responsabilit, si sono
volute creare cinque categorie di personale, ognuna di queste con
particolari servizi e diverse modalit di accesso al database. La prima di
queste, quella dell' admin, permette a questa figura di visualizzare e
controllare i dati presenti nel database, accedendo alle informazioni sui
magazzini, sui ritiri dei prodotti e i relativi ordini, sugli spettacoli, sulle
visite mediche e registrando nuovi prodotti in magazzino e nuovi ordini.
La figura della guida invece in grado di registrare ingressi ed eventuali
effettuazioni di visite guidate o partecipazioni ad uno spettacolo; inoltre,
pu anche visualizzare tutte le visite effettuate dalle guide. Il custode
gestisce la parte dedicata direttamente agli animali, potendo infatti
aggiungere un nuovo animale in una vasca; inoltre, esso si occupa sia
dell'alimentazione degli animali che della pulizia delle vasche, dovendo
per ogni operazione registrare quando e dove stata fatta e da quali
guardiani. Egli ha la possibilit di accedere ai magazzini per ritirare i
prodotti, e di ogni ritiro deve registrare la data, i prodotti ritirati, la
quantit di questi ultimi e aggiungere una descrizione del ritiro. Anche la
figura del medico in grado di accedere ai magazzini per ritirare i
prodotti necessari, con annesse funzioni che sono analoghe a quelle del
custode. Inoltre, ha anche il compito di registrare le visite effettuate,
specificando data, esito e animale visitato.
Infine l'istruttore colui che aggiunge un nuovo spettacolo in
programmazione, aggiungendo gli animali che vi parteciperanno, e
registrando una sessione di istruzione effettuata da uno o pi istruttori.
Ovviamente, le situazioni trattate sono state semplificate per permettere
la realizzazione di un progetto a livello didattico.
Sono state lasciate da parte tutte le questioni amministrative ed
economiche, eccezion fatta per la registrazione dei prodotti presenti in
magazzino e i relativi ordini ai fornitori.
Per occuparsi dell'amministrazione interna, sarebbe infatti necessario
utilizzare un database con specifiche differenti che esulano dagli
argomenti del corso, ad esempio la gestione di copie distribuite del
database o la gestione della sicurezza.
Il database stato realizzato utilizzando MySQL, utilizzandolo su un nodo
locale, mentre l'applicazione stata progettata utilizzando il linguaggio
C# in ambiente VisualStudio 2010.

2-Analisi dei requisiti


2.1-Requisiti in linguaggio naturale
L'acquario Acquarium richiede la progettazione di un sistema informatico per la
gestione delle attivit della propria impresa. Il sistema deve poter garantire l'accesso
sicuro all'applicazione di gestione, differenziando l'accesso per i dipendenti, ognuno dei
quali sar in grado di gestire diversi aspetti dell'acquario.
I Dipendenti sono di cinque tipi: l'admin, la guida, l'istruttore, il custode e il medico.
Di essi si vogliono memorizzare i dati essenziali, quali nome, cognome, codice fiscale e
ID univoco. L'admin ha perlopi funzioni di controllo generale delle informazioni
presenti nel database. La guida registra gli ingressi all'acquario, siano essi liberi o
guidati; di entrambi, vanno memorizzati la data, il numero di persone, il prezzo e il
numero che lo identifica. Nel caso in cui l'ingresso sia guidato, allora la guida dovr
registrare da chi stato effettuato.
Ogni ingresso pu anche comprendere la partecipazione ad uno spettacolo, composto
da uno o pi animali; questi, vengono istruiti da uno o pi istruttori, che si dovranno
occupare della registrazione delle sessioni di allenamento.
I singoli animali risiedono in una vasca, identificata da un numero univoco all'interno
della propria categoria. Di essi, vogliono essere anche registrate le visite mediche, che
possiedono come informazioni data ed esito.
Ogni vasca viene alimentata e pulita da uno o pi custodi, registrandone data e
descrizione. A differenza dell'alimentazione, la pulizia pu essere effettuata solo una
volta al giorno per una stessa vasca.
Anche i ritiri di prodotti dal magazzino, effettuati da custodi e medici, vanno
registrati, mantenendone una descrizione e la quantit dei prodotti ritirati; ogni ritiro
identificato da un codice univoco.
I prodotti, dei quali si vuole memorizzare il codice, la descrizione e il produttore,
risiedono in uno dei magazzini in una certa quantit. Per rifornire il magazzino di un
determinato prodotto, possibile effettuare un ordine ad un determinato fornitore, del
quale si vuole mantenere il nome, l'indirizzo e il telefono.

2.2 Estrazione dei concetti fondamentali

L'acquario Acquarium richiede la progettazione di un sistema informatico per la


gestione delle attivit della propria impresa. Il sistema deve poter garantire l'accesso
sicuro all'applicazione di gestione, differenziando l'accesso per i dipendenti, ognuno dei
quali sar in grado di gestire diversi aspetti dell'acquario.
I Dipendenti sono di cinque tipi: l'admin, la guida, l'istruttore, il custode e il medico.
Di essi si vogliono memorizzare i dati essenziali, quali nome, cognome, codice fiscale e
ID univoco. L'admin ha perlopi funzioni di controllo generale delle informazioni
presenti nel database. La guida registra gli ingressi all'acquario, siano essi liberi o
guidati; di entrambi, vanno memorizzati la data, il numero di persone, il prezzo e il
numero che lo identifica. Nel caso in cui l'ingresso sia guidato, allora la guida dovr
registrare da chi stato effettuato.
Ogni ingresso pu anche comprendere la partecipazione ad uno spettacolo, composto
da uno o pi animali; questi, vengono istruiti da uno o pi istruttori, che si dovranno
occupare della registrazione delle sessioni di allenamento.
I singoli animali risiedono in una vasca, identificata da un numero univoco all'interno
della propria categoria. Di essi, vogliono essere anche registrate le visite mediche, che
possiedono come informazioni data ed esito.
Ogni vasca viene alimentata e pulita da uno o pi custodi, registrandone data e
descrizione. A differenza dell'alimentazione, la pulizia pu essere effettuata solo una
volta al giorno per una stessa vasca.
Anche i ritiri di prodotti dal magazzino, effettuati da custodi e medici, vanno
registrati, mantenendone una descrizione e la quantit dei prodotti ritirati; ogni ritiro
identificato da un codice univoco.
I prodotti, dei quali si vuole memorizzare il codice, la descrizione e il produttore,
risiedono in uno dei magazzini in una certa quantit. Per rifornire il magazzino di un
determinato prodotto, possibile effettuare un ordine ad un determinato fornitore, del
quale si vuole mantenere il nome, l'indirizzo e il telefono.

2.3-Schema scheletro

Nello schema scheletro abbiamo individuato le entit e le associazioni


fondamentali. Nel seguito si approfondir l'analisi dello schema,
precisando il ruolo delle entit e aggiungendone altre per specificare
meglio le varie operazioni. Per ora, le
entit principali sono Account, Ingresso, Spettacolo, Animale,
Visita, Vasca, Prodotto, Ordine, Fornitore.
Si pu immediatamente notare come l'entit account debba essere
specializzata costruendo una gerarchia di ruoli che si occupino delle
diverse attivit; le vasche dovrebbero essere organizzate in categorie per
facilitare l'accesso alle informazioni, mentre gli ingressi dovrebbero
fornire ulteriori informazioni sul loro tipo, distinguendo tra liberi e
guidati.
Inoltre, necessario distinguere le operazioni sulle vasche (pulizia e
alimentazione) e creare due entit separate e indipendenti.
Questi sono i principali cambiamenti che dovranno essere apportati allo
schema per garantire una visione chiara e ottimale del database, senza
compromettere l'integrit dei dati.

3-PROGETTO DELLO SCHEMA CONCETTUALE


Nome

Tipo

Descrizione

Account

Generalizzazione di guida, istruttore, medico, custode e


admin

Admin

Rappresenta l'amministratore dell'acquario

Guida

Rappresenta la guida che si occupa delle visite guidate

Istruttore

Rappresenta l'istruttore degli animali

Medico

Rappresenta il medico dell'acquario

Custode

Rappresenta il custode delle vasche

Effettuazione

Relazione tra Guida e Guidato

Ingresso

Rappresenta un ingresso all'acquario, generalizza guidato e


libero

Guidato

Rappresenta un ingresso guidato

Libero

Rappresenta un ingresso libero

Assiste

Relazione tra Ingresso e Spettacolo

Spettacolo

Rappresenta uno spettacolo che si tiene all'acquario

Composizione

Relazione tra Animale e Spettacolo

Animale

Entit che modella un animale che risiede nell'acquario

Istruzione

Relazione tra Animale e Istruttore

Vasca

Entit che rappresenta una vasca

Permanenza

Relazione tra Vasca e Animale

Appartenenza

Relazione tra Vasca e Categoria_Vasca

Categoria_Vasca

Rappresenta una categoria di appartenenza di una vasca

Viene_alimentato R

Relazione tra Vasca e Alimentazione

In_pulizia

Relazione tra Vasca e Pulizia

Alimentazione

Rappresenta un'alimentazione effettuata in una vasca

Pulizia

Rappresenta una pulizia effettuata in una vasca

Alimenta

Relazione tra Alimentazione e Custode

Fa_pulizia

Relazione tra Pulizia e Custode

Visita_medica

Entit che descrive una visita medica

Fa_visita

Relazione tra Medico e Visita_medica

In_visita

Relazione tra Visita_medica e Animale

Ritiro

Rappresenta il ritiro di un prodotto dal magazzino

Ritiro_medico

Relazione tra Medico e Ritiro

Ritiro_custode

Relazione tra Custode e Ritiro

Prelievo

Relazione tra Ritiro e Prodotto

Prodotto

Rappresenta un prodotto in magazzino

Stock

Relazione tra Prodotto e Magazzino

Magazzino

Rappresenta il magazzino

Ordine

Rappresenta un ordine effettuato

Contenuto

Relazione tra Prodotto e Ordine

Fornitore

Rappresenta un fornitore

Fornitura

Relazione tra Fornitore e Ordine

3.2- Sviluppo dell'entit ACCOUNT

L'entit account generalizza i cinque tipi di figure presenti nell'acquario.


A causa delle tante e diverse funzioni presenti, stato necessario inserire
le cinque specializzazioni dell'entit primaria, per gestire al meglio le
modifiche e le richieste al database.

3.2- Sviluppo dell'entit INGRESSO

Come gi detto, un ingresso va specializzato in Guidato e Libero, per


permettere alla guida di instaurare la relazione Effettuazione con
l'entit Guida.

3.3-Sviluppo dell'entit VASCA

Per l'entit Vasca si deciso di creare una relazione con la nuova entit
Categoria_Vasca. In questo modo infatti, le vasche vengono raggruppate
in categorie, possedendo un numero che le identifica solo all'interno della
propria area, e permettendo di accedere ai dati partendo da un livello pi
restrittivo; ci inoltre, segue uno schema organizzativo molto pi vicino a
quello reale.

3.4-Sviluppo della relazione PULISCE E NUTRE

La relazione pulisce e nutre stata tradotta introducendo due nuove


entit specifiche per i due casi. Nel primo, la pulizia viene identificata
dalla data e dall'identificatore esterno della vasca. Questo implica che una
vasca non possa essere pulita pi di una volta dallo (o dagli, come si
evince dalla cardinalit di fa_pulizia) stesso custode pi di una volta al
giorno. Viceversa , l'identificatore dell'alimentazione un codice apposito,
in modo che una vasca possa essere alimentata pi volte nello stesso
giorno da uno o pi custodi.

3.5-Sviluppo della relazione RITIRA

La relazione ritira stata tradotta introducendo l'entit ritiro insieme


alle relazioni prelievo,ritiro custode e ritiro medico. Un singolo ritiro,
che pu contenere diversi prodotti in diverse quantit (come si evince
dalla cardinalit di prelievo), identificato da un codice univoco.
Informazioni addizionali vengono fornite dalla data e dalla descrizione.
Inoltre l'entit ha cardinalit (1-1) dalla parte di ritiro medico e ritiro
custode per cui per ogni gruppo di prodotti ritirati, a ogni custode o
medico verr assegnato un id-ritiro.

4 - SPECIFICHE FUNZIONALI
4.1 Analisi delle funzionalit richieste
Durante la prima fase di progettazione logica lo schema verr modificato
in base alle operazioni da eseguire e al carico di lavoro che apportano al
database. Sar dunque necessario procedere ad un'analisi accurata di
tutte le operazioni basilari da effettuare in modo da avere tutte le
informazioni per procedere ad una corretta analisi della trasformazione
logica. Qui di seguito sono elencate le operazioni da eseguire raggruppate
per classi.
Operazioni di visualizzazione dei dati
Operazioni di gestione degli ingressi e delle visite
Operazione legate alla gestione dell'acquario
Ognuna di queste operazioni sar analizzata e corredata di tutte le sue
operazioni elementari, fornendone una descrizione generale; nel prossimo
capitolo invece verranno analizzate nel dettaglio le singole operazioni,
corredate di schema di navigazione.

4.2 - Operazioni di visualizzazione dei dati


Varie sono le operazioni di visualizzazione. Per queste, ovviamente, non
sono previste modifiche o aggiornamenti dei dati.
La quasi totalit di queste operazioni viene effettuata dalla figura dell'
admin che, non rientrando tra i dipendenti, si occupa soltanto di
visualizzare e tenere sotto controllo il database dell'acquario. Egli infatti
in grado di accedere alle informazioni riguardanti i magazzini e i prodotti,
ed anche colui che si occupa di effettuare ordini. Oltre a questi aspetti,
necessario tenere sotto controllo la struttura interna dell'acquario,
spaziando quindi tra le vasche e gli animali in esse residenti, e
soprattutto la gestione di esse: per questo motivo possibile accedere alle
informazioni riguardanti le pulizie effettuate e le alimentazioni agli
animali, registrate opportunamente dai singoli custodi.
Tutte le operazioni, che verranno studiate nel dettaglio in seguito,
necessitano della scansione di diverse entit, a volte riportando valori, a
volte elencando le varie istanze di interesse.

4.3-Operazioni di gestione degli ingressi e delle visite

Di questo tipo di operazioni,tutte scritture sul database, si occuperanno


esclusivamente le guide e gli istruttori.
A loro infatti riservato il compito di gestire gli ingressi e l'accesso agli
spettacoli, preoccuppandosi di registrarne tutte le informazioni. Alla guida
lasciata la parte di registrazione degli ingressi, specificando se essi siano
liberi o guidati ed eventualmente aggiungere la relativa partecipazione ad
uno spettacolo; da qui in poi sar invece compito dell'istruttore tenere il
database aggiornato sugli spettacoli che si terranno e sugli animali che vi
parteciperanno.

4.4-Operazioni di gestione dell'acquario

Di questa parte di operazioni si occupano invece principalmente guide e


medici.
La gestione interna all'acquario consta di registrazioni di visite mediche e
di pulizie e alimentazioni in specifiche vasche, operazioni di cui si devono
occupare di registrare per l'appunto i medici e i custodi; di questi ultimi
inoltre la responsabilit di aggiungere nuovi animali nell'acquario o
eventuali nuove vasche (le categorie rimangono invece fisse).
Entrambi i dipendenti devono inoltre registrare gli acessi ai magazzini
con le relative informazioni, ovvero il numero di prodotti ritirati, in quale
data e a quale scopo.
Nella gestione trova spazio inoltre la figura dell' admin per le operazioni
di inserimento di un nuovo prodotto in magazzino (registrandone ID,
nome, descrizione e produttore) e di registrazione di un ordine di vari
prodotti effettuato ad un determinato fornitore.

CARICHI DI LAVORO
NOME

TIPO

VOLUME DI DATI

Dipendente

260

Ingresso

1000000

Spettacolo

600

Animale

6000

Vasca

270

Categoria_Vasca

20

Visita medica

144000

Ritiro

700000

Prodotto

200

Magazzino

Fornitore

10

Ordine

50

Pulizia

24300

Alimentazione

160000

Effettuazione

400000

Assiste

500000

Composizione

1800

Istruzione

1500

Permanenza

6000

Appartenenza

270

In_visita

144000

Fa_visita

144000

Ritiro_custode

450000

Ritiro_medico

250000

Prelievo

700000

Fornitura

400

Stock

200

Contenuto

1000

In_pulizia

24300

Fa_pulizia

48600

Alimenta

320000

Viene_alimentato

160000

5-IL PROGETTO LOGICO


Schemi di navigazione
Le funzionalit richieste al sistema sono, come scritto sopra:
1. Visualizzazione statistiche
2. Gestione degli ingressi
3. Gestione dell'acquario
Si individua ora, per ciascuna delle funzionalit e delle operazioni che lo
compongono, lo schema di navigazione.

5.1.1-Visualizzare il numero di visite guidate effettuate in un anno

L'operazione di visualizzazione delle visite guidate effettuate in un anno


consiste semplicemente nel ricercare, partendo da Ingresso, gli ingressi
guidati; successivamente, noto l'ID della guida, si ricercano tutte le
effettuazioni relative ad esso e all'anno specificato, mostrando nome e
cognome della guida, numero di persone partecipanti e le relative date di
effettuazione.

5.1.2 -Visualizzare gli animali che hanno partecipato ad uno spettacolo

L'operazione consiste nel selezionare lo spettacolo di interesse, per poi


ricercare nella relazione composizione tutti gli animali che ne hanno preso
parte. In seguito necessario effettuare una navigazione da composizione
ad animale per estrarre tutti i dati di interesse dei partecipanti.

5.1.3-Visualizzare tutti gli animali che vivono in una vasca

L'operazione di visualizzazione degli animali che vivono in una vasca


consiste anzitutto nel ricercare la vasca di interesse. Per fare ci,
necessario conoscere la categoria di appartenenza. La navigazione parte
perci da Categoria_vasca, per poi procedere sulla relazione
appartenenza e sull'entit vasca. In seguito basta estrarre tutte le
relazioni permanenza della suddetta vasca e, per ognuna di queste,
reperire dal database tutti i dati dell'animale dall'entit corrispondente.

5.1.4-Visualizzare tutte le pulizie effettuate su una vasca in una certa


data

Come nell'operazione precedente, per reperire una vasca necessario


conoscerne la categoria di appartenenza. Reperita la vasca di interesse si
naviga dalla vasca all'entit pulizia attraverso la relazione in pulizia. Ora
attraverso l'entit pulizia si naviga verso la relazione fa pulizia, e poi da
quest'ultima verso l'entit Custode, in modo da avere tutti i dati dei
custodi che hanno pulito la vasca in questione in una determinata data,
visualizzando inoltre i dati della pulizia.

5.1.5 Visualizzare tutte le alimentazioni effettuate su una vasca in una


certa data

Lo schema di navigazione per la visualizzazione delle alimentazioni del


tutto analogo all'operazione precedente. Si parte infatti dalla categoria
della vasca per identificare la vasca di interesse. Si naviga poi attraverso
lo schema per recuperare tutte le alimentazioni della vasca in una
determinata data. Dall'entit alimentazione si naviga verso l'entit
custode per recuperarne tutti i dati di interesse.

5.1.6 Ritiri effettuati da un custode(o da un medico) in un mese

Lo schema di navigazione parte dall'entit custode(o medico), e attraverso


la relazione ritirocustode(o ritiromedico) accede a tutti i ritiri effettuati.
In seguito necessario filtrare i ritiri sul mese presente all'interno della
data. Eseguito questo passo basta navigare da ritiro a prodotto mediante
l'entit prelievo, per visualizzare tutti i prodotti prelevati in quel
particolare ritiro e in quale quantit.

5.1.7 Visualizzare le visite effettuate da un medico

L'operazione inizia dall'entit medico, da cui si devono reperire i primi


dati di interesse. Fatto ci la navigazione continua verso l'entit visita
medica attraverso la relazione fa visita. Questo serve a cercare nel
database tutte le visite mediche appartenenti ad uno specifico medico.
Reperite le visite mediche si procede all'identificazione degli animali
visitati attraversando la relazione in visita per poi scandire le istanze
dell'entit animale.

5.1.8 Determinare la quantit di un prodotto in magazzino.

Determinare la quantit di un prodotto in magazzino molto semplice.


Basta partire dall'entit prodotto per poi navigare verso la relazione
stock; a questo punto basta reperire la quantit. Se si interessati
anche ai dati del magazzino che contiene il prodotto, basta continuare la
navigazione verso l'omonima entit.

5.1.9 Visualizzare i dettagli di una fornitura

Per analizzare il contenuto e i dati di una fornitura, bisogna partire


dall'entit ordine e procedere in due direzioni. La prima permette di
visualizzare i dati del fornitore al quale si richiesto l'ordine: basta
effettuare una navigazione da ordine a fornitore passando per la
relazione fornitura. La seconda direzione riguarda il contenuto: si
scandiscono tutte le istanze della relazione contenuto specifiche all'ordine
di interesse per reperire sia la quantit che i dati dei prodotti ordinati.

5.2.1 - Aggiunta di un nuovo ingresso

La registrazione dell'ingresso consta di due parti fondamentali: in primo


luogo bisogna effettuare una scrittura sull'entit Ingresso, il quale poi
andr distinto tra guidato o libero. In secondo luogo bisogna reperire dal
database la guida che effettuer l'ingresso guidato, ed effettuare dunque
una scrittura sull'entit effettuazione con i dati raccolti.

5.2.2 Aggiunta di un nuovo spettacolo

Questa operazione molto semplice e consta di una sola scrittura


all'interno dell'entit spettacolo.

5.2.3 - Aggiunta di una partecipazione ad uno spettacolo

L'operazione consta di una scrittura nella relazione assiste. Sar dunque


necessario solamente reperire i dati dello spettacolo e dell'ingresso per poi
effettuare l'inserimento.

5.3.1 - Aggiunta di un animale al database

Anche in questo caso l'operazione costa di due operazioni. La prima tratta


la scrittura di una nuova istanza dell'entit animale. In secondo luogo
necessario navigare all'interno dello schema partendo dall'entit categoria
vasca per reperire la vasca di interesse in cui inserire il nuovo animale. In
seguito dunque si termina l'operato aggiungendo una nuova istanza della
relazione permanenza con i dati della vasca e del nuovo animale.

5.3.2 - Registrazione di una visita ad un animale

L'operazione in questo caso consiste nella registrazione di una nuova


istanza dell'entit Visita medica utilizzando i dati reperiti dalle entit
Animale e Medico, come si evince dallo schema di navigazione.

5.3.3 Alimentazione di una vasca

Per registrare l'avvenuta alimentazione di una vasca, si raccolgono


innanzitutto i dati relativi alla vasca d'interesse e ai custodi che hanno
partecipato, dopodich si procede con l'inserire la data e la descrizione
dell'alimentazione, registrando tutto attraverso la relazione alimenta.

5.3.4-Pulizia di una vasca

Analoga all'alimentazione l'operazione di pulizia. L'unica differenza sta


nel fatto che quest'ultima viene identificata dalla data in cui stata
effettuata e la vasca interessata, questo per garantire il vincolo che una
pulizia ad una vasca sia portata a termine soltanto una volta al giorno.

5.3.5 Registrazione di un ritiro di un prodotto

Ogni medico (e, analogamente, ogni custode) tenuto a registrare un


ritiro di prodotti dal magazzino. Ogni ritiro identificato da un codice
progressivo ed univoco all'interno dell'acquario, e di esso vanno registrati
anche la descrizione e la data. Raccolte le informazioni sul ritiro e sul
prodotto (o sui prodotti) che si vogliono prendere, vanno registrate sia la
quantit (che si trova nella relazione Prelievo e di essa si intende per
ogni singolo prodotto presente all'interno del ritiro) che le informazioni sul
ritiromedico (in egual modo per ritirocustode), ovvero le informazioni
necessarie per identificare il dipendente che ha effettuato l'accesso al
magazzino.

5.3.6- Inserimento di un nuovo prodotto

L'inserimento di un nuovo prodotto in magazzino un'operazione


esclusivamente lasciata all'admin.
Essa non presenta particolari difficolt: inseriti i dati del prodotto,
sufficiente scegliere in quale magazzino inserirlo ( e da questo momento,
ogni ordine di quello specifico prodotto inserir la nuova fornitura in quel
magazzino), reperire i dati di quest'ultimo e successivamente inserire
l'eventuale quantit presente; se non specificata, la quantit presente
verr posta a zero.

5.3.7 Registrazione di una fornitura

Anche questa operazione pu essere effettuata soltanto dall'admin e


riguarda l'evasione di un nuovo ordine per rifornire il magazzino di
determinati prodotti.
Innanzitutto, si ottengono i dati inseriti dall'admin e riguardanti l'ordine
da effettuare, ovvero la data e la descrizione (anche in questo caso, l'ID
calcolato in modo incrementale). Dopodich, si passa ad indicare le
informazioni sui prodotti da inserire nell'ordine e successivamente va
specificata la quantit di ciascuno di essi per inserirla nel contenuto
dell'ordine.
L'ultimo passo consiste nel registrare la fornitura, salvando tutti i dati
descritti sopra e aggiungendo quelli relativi al fornitore presso cui si
effettuato l'ordine.

5.3.8 Registrazione di un assegnamento di istruttore

Questa operazione, che si tratta di un semplice inserimento, consiste nel


reperire i dati dell'istruttore o istruttori di interesse e successivamente
quelli degli animali (o anche un singolo animale) che sono stati assegnati
all'allenatore per seguirli e istruirli.

Tabella degli accessi


Operazione

E/R

Lett./Scritt.

Numero
accessi

Totale accesi

20

Effettuazione

20'000

400'000

Guidata

20'000

400'000

Visualizzare
Spettacolo
gli animali
Composizione
che hanno
Animale
partecipato ad
uno
spettacolo(2/gi
orno)

Visualizzare
Vasca
gli animali
Appartenenza
che vivono in
una
Categoria_Vas
vasca(6/giorno
ca
)
Permanenza

22

132

Animale

22

132

Vasca

270

In_pulizia

270

Pulizia

270

Fa_pulizia

540

Custode

540

Visualizzare
Vasca
le
VieneAliment
alimentazioni
ata
effettuate ad
una vasca in Alimentazione
un
Alimenta
determinato
Custode
giorno
(270/settiman
a)

270

540

540

1620

1620

Visualizzare i
Medico
ritiri
Ritiro_medico
effettuati da
Ritiro
un medico in
un
Prelievo
mese(12/anno)
Prodotto

12

72

72

72

72

Numero di
visite
effettuate in
un anno da
una guida
(20/anno)

Visualizzare
le pulizie
effettuate ad
una vasca in
un
determinato
giorno
(270/settiman
a)

Concetto
Guida

Visualizzare i
Custode
ritiri
Ritiro_custode
effettuati da
Ritiro
un custode in
un mese
Prelievo
(12/anno)
Prodotto

12

10

120

10

120

10

120

10

12

Visualizzare
le visite fatte
da un medico
(2/settimana)

Medico

Fa_visita

16

Visita_Medica

16

In_visita

16

Animale

16

Prodotto

Stock

Magazzino

Ordine

Contenuto

16

Prodotto

16

Fornitura

Fornitore

Aggiunta di
un nuovo
ingresso(2740/
giorno)

Ingresso

2740

Aggiunta di
un nuovo
spettacolo
(2/giorno)

Spettacolo

Composizione

Animale

Registrazione
di una
partecipazione
ad uno
spettacolo(900
/giorno)

Spettacolo

900

Ingresso

900

Assiste

900

Aggiunta di
un nuovo
animale(3/ann
o)

Animale

Permanenza

Vasca

13

39

Appartenenza

13

39

Categoria_Vasc
a

20

60

Medico

160

Fa_visita

160

Visualizzare
la quantit di
un prodotto in
magazzino
(1/mese)
Visualizzare i
dettagli di
una
fornitura(4/me
se)

Registrazione
di una visita

ad un
animale(160/g
iorno)

Visita_Medica

160

In_visita

160

Animale

160

Registrazione
Vasca
di
VieneAlimentat
un'alimentazi
o
one presso
Alimentazione
una
vasca(2/giorno
Alimenta
)
Custode

Registrazione
di una pulizia
presso una
vasca(1/settim
ana)

Vasca

InPulizia

Pulizia

FaPulizia

Custode

250

250

250

Prelievo

500

Prodotto

500

Stock

500

Magazzino

500

Istruttore

Istruzione

Animale

Registrazione Custode/Medico
di un ritiro di RitiroCustode/
prodotti(250/g RitiroMedico
iorno)
Ritiro

Registrazione di
un
assegnamento di
istruttore(2/mes
e)

5.4 Trasformazioni dello schema concettuale


Prima di effettuare la traduzione in tabelle del database, abbiamo
effettuato alcune trasformazioni dello schema concettuale; in particolare,
ci siamo occupati di scegliere le chiavi primarie e di eliminare tutte quelle
caratteristiche che non sono supportate dallo schema logico.
5.4.1-Scelta delle chiavi primarie
La scelta delle chiavi primarie banale in quanto quasi ogni entit viene
identificata dal proprio codice identificativo. Fanno eccezione l'entit
Pulizia identificata dalla propria data e dalla vasca a cui si riferisce,
poich ogni vasca non viene pulita pi di una volta nello stesso giorno;
l'entit Visita_Medica che viene identificata esternamente dal medico,
dall'animale e dalla data perch si suppone che un medico non visiti lo
stesso due volte in uno stesso giorno; l'ingresso che viene identificato dal
numero e dalla data, poich si suppone che ogni giorno i numeri di
ingresso vengano azzerati; il fornitore che identificato dal proprio nome
e la vasca che identificata dal proprio numero e dalla categoria di
appartenenza, poich ogni numero di vasca univoco soltanto all'interno
della propria categoria.
5.4.2-Eliminazione delle gerarchie
Nel nostro schema sono presenti due gerarchie:
Quella riguardante l'entit Account
Quella riguardante l'entit Ingresso
Per quanto riguarda la prima, si scelto di effettuare un collasso verso il
basso poich, sebbene nessuna delle specificazioni aggiunga alcun
attributo, ci rende pi semplice la gestione delle operazioni, in
particolare per quelle entit che hanno diverse relazioni.
Per la seconda invece si preferito optare per un collasso verso l'alto,
inserendo un attributo Stringa di due caratteri con nome Tipo per
individuare di quale specializzazione si sta parlando.

5.5-Progetto logico per il modello relazionale


5.5.1-Traduzione delle entit
Guida (ID,Password,Nome,Cognome,CF)
Unique CF
Medico (ID,Password,Nome,Cognome,CF)
Unique CF
Admin (ID,Password,Nome,Cognome,CF)
Unique CF
Custode (ID,Password,Nome,Cognome,CF)
Unique CF
Istruttore (ID,Password,Nome,Cognome,CF)
Unique CF
Ingresso (NumeroIngresso,Data,Prezzo,NumeroPersone,Tipo)
Spettacolo(IDSpettacolo,Data,Orario,Nome)
Animale(IDAnimale,Nome,Provenienza)
Categoria_Vasca (Nome,Descrizione)
Vasca (NumeroVasca,NomeCategoriaVasca,Descrizione)
FK NomeCategoriaVasca references Categoria_Vasca
In questa relazione stata inglobata l'associazione "Appartenenza".
Alimentazione
(CodiceAlimentazione,Data,Descrizione,NumeroVasca,NomeCategor
iaVasca)
FK (NumeroVasca,NomeCategoriaVasca) references Vasca
In questa relazione stata inglobata l'associazione
"VieneAlimentata".

Pulizia (Data,NumeroVasca,NomeCategoriaVasca,Descrizione)
FK NumeroVasca,NomeCategoriaVasca references Vasca
In questa relazione stata inglobata l'associazione "In_Pulizia".

Visita_Medica (IDMedico,IDAnimale,Data,Esito)
FK IDMedico references Medico
FK IDAnimale references Animale
In questa relazione sono state inglobate le associazioni "In_visita" e
"FaVisita"

Ritiro (CodiceRitiro,DescrizioneRitiro,DataRitiro)
Prodotto
(CodiceProdotto,NomeProdotto,Produttore,Descrizione,Magazzino,
Quantit)
FK Magazzino references Magazzino
In questa relazione stata inglobata l'associazione "Stock".
Magazzino (IDMagazzino,Indirizzo,Telefono)
Ordine (IDOrdine,Fornitore,Data,DescrizioneOrdine)
FK Fornitore references Fornitore
In questa relazione stata inglobata l'associazione "Fornitura".

Fornitore(Nome,Indirizzo,Telefono)
5.5.2-Traduzione delle associazioni

La traduzione delle relazioni che proponiamo qui di seguito non modifica


in alcun modo le relazioni gi introdotte per la traduzione delle entit.
Infatti nel capitolo precedente eventuali inglobamenti di relazioni sono gi
stati presi in considerazione e inseriti. Procediamo dunque a mostrare
un'analisi per la traduzione delle associazioni.

Effettuazione(NumeroIngresso,Data,IDGuida)
FK (NumeroIngresso,Data) references Ingresso
FK IDGuida references Guida

Assiste(NumeroIngresso,Data,IDSpettacolo)
FK (NumeroIngresso,Data) references Ingresso
FK IDSpettacolo references Spettacolo

Composizione(IDAnimale, Idspettacolo)
FK IDAnimale references Animale
FK IDSpettacolo references Spettacolo

Permanenza (IDAnimale,NumeroVasca,NomeCategoriaVasca)
FK IDAnimale references Animale
FK (NumeroVasca,NomeCateogoriaVasca) references Vasca

Istruzione(IDIstruttore,IDAnimale)
FK IDAnimale references Animale
FK IDIstruttore references Istruttore

Fa_Pulizia(IDCustode,Data,NumeroVasca,NomeCateogoriaVasca)
FK IDCustode references Custode
FK (Data, NumeroVasca,NomeCategoriaVasca) references Pulizia

Alimenta(IDCustode,CodiceAlimentazione)
FK IDCustode references Custode
FK CodiceAlimentazione references Alimentazione

RitiroCustode(CodiceRitiro,IDCustode)
FK CodiceRitiro references Ritiro
FK IDCustode references Custode
Le associazioni Ritiro Custode e Ritiro Medico non sono state
inglobate all'interno dell'entit ritiro poich ci avrebbe causato
due difficolt : la prima lo spreco di spazio, poich ogni tupla
avrebbe avuto obbligatoriamente un valore nullo: infatti, un ritiro
associato in modo esclusivo o a un medico, o a un custode. La
seconda un uno spreco di risorse al momento della ricerca dei
ritiri di un medico o di un custode: per selezionare i ritiri
effettuati dai medici bisognerebbe controllare anche le tuple che
si riferiscono ai custodi.
Per queste ragioni abbiamo deciso di mantenere le associazioni.

RitiroMedico(CodiceRitiro,IDMedico)
FK CodiceRitiro references Ritiro
FK IDMedico references Medico

Prelievo(CodiceProdotto,CodiceRitiro,Quantit)
FK CodiceProdotto references Prodotto
FK CodiceRitiro references Ritiro

Contenuto(IDOrdine,Prodotto,Quantit)
FK IDOrdine references Ordine
FK Prodotto references Prodotto

5.5.3 Normalizzazione delle tabelle


Durante la traduzione in tabelle del nostro schema, abbiamo affrontato
anche la normalizzazione in BC-NF.
In realt, la correzione stata effettuata soltanto per una tabella in
quanto le restanti erano gi nella normal-form desiderata.
Questa la tabella "Ingresso", dove presente la seguente dipendenza
transitiva:
NumeroIngresso, Data ---> NumeroPersone,Tipo,Prezzo
NumeroPersone, Tipo---> Prezzo
stato quindi necessario spezzare la dipendenza creando due tabelle:
Ingresso(NumeroIngresso,Data,NumeroPersone,Tipo)
FK (NumeroPersone,Tipo) references Prezzi
Prezzi(NumeroPersone,Tipo,Prezzo)
In questo modo stata eliminata la dipendenza e ci si ricondotti alla BCNF.
La scomposizione loss-less poich il join tra le due tabelle viene
effettuato su una chiave primaria.
5.5.4-Creazione delle view
Per la creazione del nostro database, stato necessario l'inserimento di
tre view per una maggiore facilit nella scrittura e nell'esecuzione delle
query. Nel dettaglio, le tre viste create sono:

CREATE VIEW `listaritirocustode` AS


select
rc.IDCustode AS IDCustode,
r.CodiceRitiro AS CodiceRitiro,
r.DescrizioneRitiro AS DescrizioneRitiro,
r.DataRitiro AS `DataRitiro
from
(ritirocustode rc
join ritiro r ON ((rc.CodiceRitiro = r.CodiceRitiro)))

CREATE VIEW listaritiromedico AS


select
rm.IDMedico AS IDMedico,
r.CodiceRitiro AS CodiceRitiro,
r.DescrizioneRitiro AS DescrizioneRitiro,
r.DataRitiro`AS DataRitiro
from
(ritiromedico rm
join ritiro r ON ((rm.CodiceRitiro = r.CodiceRitiro)))

CREATE VIEW ritiroprodotti AS


select
p.NomeProdotto AS NomeProdotto,
pr.CodiceRitiro AS CodiceRitiro,
pr.Quantita AS Quantita
from
(prodotto p
join prelievo pr ON ((p.CodiceProdotto = pr.CodiceProdotto)))

Tutte e tre le view vengono utilizzate nella query di visualizzazione dei


prodotti ritirati da un medico (e analogamente, da un custode), come si
potr vedere nel prossimo capitolo. La query si presenta piuttosto
complessa in quanto coinvolge cinque tabelle; con l'introduzione delle viste
stato possibile eliminare join aggiuntivi che avrebbero complicato la
scrittura e la comprensione della query.

5.6- Traduzione delle operazioni in query SQL


5.6.2 Query di visualizzazione

Numero di visite effettuate da una guida in un anno


select i.Numeropersone, T.Nome, T.Cognome, T.NumeroIngresso,
T.Data_ing from ingresso i,
(select g.Nome, g.Cognome,e.NumeroIngresso,e.Data_ing
from effettuazione e join guida g on (g.ID = e.ID_guida)
where g.ID = idInserted) as T
where i.NumeroIngresso = T.NumeroIngresso
and i.Data_ing = T.Data_ing
and i.Data_ing like 'insertedYear-%-%'
and i.tipo = 'GU'

Animali che hanno partecipato ad uno spettacolo


select a.IDAnimale,Nome,Provenienza
from animale a,composizione c
where a.IDAnimale = c.IDAnimale and c.IDSpettacolo = idInserted

Animali che vivono in una vasca


select a.IDAnimale, Nome, Provenienza
from animale a, permanenza p
where p.NomeCategoriaVasca = ChosenCategory
and p.NumeroVasca = ChosenNumber

Pulizie effettuate in una vasca


select
Nome,Cognome,Data_pulizia,NumeroVasca,NomeCategoriaVasca,D
escrizione
from custode c,
(select IDCustode, p.Data_pulizia, p.NumeroVasca,
p.NomeCategoriaVasca,Descrizione
from pulizia p join fa_pulizia f on
(p.NumeroVasca = f.NumeroVasca
and p.NomeCategoriaVasca = f.NomeCategoriaVasca
and p.Data_pulizia = f.Data_pulizia

and p.Data_pulizia = InstertedData)


where p.NumeroVasca = chosenNumber and
p.NomeCategoriaVasca = chosenCategory) as pul
where c.IDCustode = pul.IDCustode

Alimentazioni effettuate in una vasca


select
Nome,Cognome,Data_alimentazione,NumeroVasca,NomeCategoriaV
asca,Descrizione
from custode c,
(select IDCustode, p.Data_alimentazione,
p.NumeroVasca, p.NomeCategoriaVasca,Descrizione
from alimentazione a join alimenta al on
(a.NumeroVasca = al.NumeroVasca
and a.NomeCategoriaVasca = al.NomeCategoriaVasca
and a.Data_pulizia = al.Data_pulizia
and a.Data_pulizia = InstertedData)
where a.NumeroVasca = chosenNumber and
a.NomeCategoriaVasca = chosenCategory) as cust_al
where c.IDCustode = cust_al.IDCustode

Visualizzare i ritiri effettuati da un custode/medico in un mese


select cu.Nome, cu.Cognome, C.NomeProdotto, C.quantita,
C.DataRitiro, C.DescrizioneRitiro
from custode cu,
(select l.IDCustode, r.NomeProdotto, r.Quantita, l.DataRitiro,
l.DescrizioneRitiro
from listaritirocustode l join
ritiroprodotti r on
(r.CodiceRitiro = l.CodiceRitiro)
where l.DataRitiro like '%-selectedMonth-%' ) as C
where cu.IDCustode = C.IDCustode
and cu.IDCustode = insertedID;

N.B: la query per la visualizzazione dei ritiri effettuati da un medico del


tutto analoga a questa, perci stata omessa.

Visualizzare le visite fatte da un medico


select m.Nome, m.Cognome,NomeAnimale as Animale,
Data_visita as Data,Esito
from medico m,
(select IDMedico,Nome as NomeAnimale,Data_visita,Esito
from visita_medica vm join animale a
on (vm.IDAnimale = a.IDAnimale)) as V
where m.IDMedico = V.IDMedico
and m.IDMedico = idInserted

Visualizzare la quantit presente di un prodotto in magazzino


select NomeProdotto as Nome,
Descrizione,Produttore,Magazzino,Quantit
from prodotto
where CodiceProdotto = insertedID

Visualizzare i dettagli di una fornitura


select NomeProdotto,o.Descrizione,Data_ordine,Quantit
from ordine o,
(select NomeProdotto,p.Descrizione,IDOrdine,
c.Quantita as Quantit
from prodotto p join contenuto c
on (p.CodiceProdotto = c.Prodotto
and c.IDOrdine = insertedID) ) as pp
where o.IDOrdine = pp.IDOrdine

5.6.3-Query di gestione degli ingressi e degli spettacoli

Aggiunta di un nuovo ingresso


insert into ingresso
values (EntranceNum, insertedDate ,PeopleNumber, TypeInserted)
Nel caso in cui "TypeInserted" fosse "Guidato" si procede con la
registrazione di una effettuazione:
insert into effettuazione
values (EntranceNum, insertedDate, GuideID)

Aggiunta di uno spettacolo


insert into spettacolo
values(ShowID, insertedDate, insertedHour,insertedName)
Poi, per aggiungere gli animali:
insert into composizione
values(AnimalID,ShowID)

Aggiunta di una partecipazione ad uno spettacolo


insert into assiste
values ( EntranceNum , InsertedDate, ShowID)

5.6.4 Query di gestione dell'acquario

Aggiunta di un nuovo animale


insert into animale
values(AnimalID,InsertedName,InsertedOrigin)
insert into permanenza
values(AnimalID,PoolNumber,PoolCategory)

Aggiunta di una visita ad un animale


insert into visita_medica
values (MedicalID , AnimalID , InsertedDate , InsertedResult )

Registrazione di un'alimentazione presso una vasca


insert into alimentazione
values(AlimentationID,DateInsterted,PoolNum,
PoolCategory,Description)
insert into alimenta
values (GuardianID,AlimentationID)

Registrazione di una pulizia ad una vasca


insert into pulizia
values(InsertedDate,PoolNum,PoolCategory,Description)
insert into fa_pulizia
values(GuardianID,InsertedDate,PoolNum, PoolCategory)

Registrazione di un ritiro di un prodotto


insert into ritiro
values (registrationID, Description ,InsertedDate )
insert into ritirocustode
values (+ registrationID,GuardianID)
insert into prelievo
values (ProductID , registrationID, Quantity)
update prodotto
set Quantit = OldQuantity - Quantity
where CodiceProdotto = ProductID

Inserimento di un nuovo prodotto


insert into prodotto
values (ProductID, ProductName, Description,
Producer,WarehouseNum,0)

Registrazione di una fornitura


insert into ordine
values (OrderID, SupplierID,InsertedDate, Description)
insert into contenuto
values (OrderID, ProductID , Quantity)
update prodotto
set Quantit = OldQuantity + Quantity
where CodiceProdotto = ProductID

Registrazione di un'assegnazione
insert into istruzione
values (TrainerID,AnimalID)

6 - L'interfaccia utente
Di seguito si presenta l'interfaccia utente, analizzando brevemente la
vista di ogni account.
6.1- Login

La schermata di login consiste semplicemente nell'inserire il proprio ID e


la propria password per poi selezionare il ruolo. Se i dati inseriti sono
corretti, verr richiamata ed aperta la schermata corrispondente alla
propria mansione.

6.2- Admin

La view dell'admin si presenta composta di nove tab, corrispondenti a


nove diverse query.
Show Tab permette di visualizzare gli animali presenti ad un
determinato spettacolo e il numero di persone partecipanti.
Pool Tab permette di visualizzare gli animali che risiedono in una
specifica vasca
Clean&Feed la tab che consente di visualizzare i dettagli di una
pulizia/alimentazione presso una vasca, ovvero da chi stata
effettuata e la descrizione dell'operazione
Medical Visits permette di visualizzare i dettagli delle visite
effettuate da un medico
La tab Product Stock mostra le informazioni e la quantit di un
prodotto in magazzino
Furnitures Details permette di visualizzare i dettagli di una
fornitura
Check Collected Product permette di visualizzare i dettagli dei ritiri
effettuati in un mese da un custode o medico
Furnitures la tab che permette di richiedere una fornitura
Register New Product permette di inserire un nuovo prodotto in
magazzino

6.3-Guida

In questa view, la guida in grado di :


Registrare un ingresso, registrare l'eventuale visita guidata
inserendo l'id di chi l'ha effettuata e aggiungere eventualmente
la partecipazione ad uno show tramite la tab "Add an
entrance"
Controllare tutte le visite guidate effettuate da una specifica
guida in un anno tramite la tab "Check guided entrances"

6.4-Custode

La view dedicata al custode si presenta come segue:


Animal tab, utilizzata per aggiungere un nuovo animale all'acquario
specificandone le informazioni necessarie (l'ID da inserire calcolato
progressivamente a partire da quelli gi presenti)
Pool Alimentation, per registrare l'avvenuta alimentazione presso
una vasca
Add Pool, utilizzata per aggiungere una nuova vasca all'acquario
Cleaning Tab, per registrare l'avvenuta pulizia presso una vasca
Collect product, per registrare il ritiro di un prodotto(o pi prodotti)
dai magazzini

6.5 Medico

Le operazioni che un account di tipo "Medico" pu fare sono due:


Registrare la visita medica effettuata, tramite la tab "Register your
medical visit"
Registrare il ritiro di un prodotto(o pi prodotti) presso un
magazzino tramite la tab "Register your collection"

6.6 Istruttore

La view dedicata all'istruttore consta di due moduli:


Il primo permette creare un nuovo spettacolo e inserirlo all'interno
del database
Il secondo permette di registrare l'assegnamento di un animale a
uno o pi istruttori per l'allenamento