Da 01/07/2008 to 30/08/2008
E-Commerce "Arte del Vetro"
Il sito web "Arte del Vetro" è stato sviluppato per permettere la vendita di prodotti artigianali di alta qualità.
Caratteristiche:
Creazioni di prodotti e sottocategorie di prodotti con dedicate pagine di anteprima
Gestione di ogni prodotto con una pagina dedicata con relativa descrizione e fotograsie
Gestione delle "Offerte Speciali" che se selezionate mettono in risalto il prodotto in una specifica sezione nella homepage
Creazione di una sezione Admin per dare accesso al cliente finale alla manutenzione dei prodotti, la loro creazione e modifica
Sito Web sviluppato in Php e Database MySQL
Da 01/07/2005 to 31/12/2005
Tirocinio svolto presso la Accenture s.p.a.
Creazione di una Applicazione Web che permetta agli utenti del Ministero della Salute di gestire i processi d'autorizzazione al commercio dei medicinali secondo procedura di Mutuo Riconoscimento attraverso la creazione di pratiche di Nuove AIC, Variazioni (tipo I, IA, IB, II) e Rinnovi.
La profilazione degli utenti e la il flusso delle pratiche è stato gestito attraverso Oracle WorkFlow.
L' Applicazione Web è stata costruita seguendo le diretteve del Design Patterns Model-View-Controller (MVC), utilizzando tecnologia Java (Servlet, Bean, JSP) ed un Framework propretario di Accenture (basato su Struts). L'applicazione Web si interfaccia attraverso l'uso di SQL con un database ORACLE.
Per allineare i date della base di dati dell'applicazione con la Banca Dati Unica del Farmaco (BDUF) sono state logiche utilizzando PL/SQL creando Procedure, Trigger e Job.
E' possibile visualizzare l'introduzione della tesi.
E' possibile visualizzare l'introduzione della tesi.
From 01/10/2003 to 01/02/2004
Tirocinio svolto presso la FUB (Fondazione Ugo Bordoni).
Aggiornamento del portale interno della fondazione per renderlo idoneo alla pubblicazione nel Web.
Il portale è stato reingegnerizzato per renderlo più sicuro ed è stato implementato un sistema di autenticazione con standard di sicurezza adeguati ai nuovi requisiti.
L'applicazione è stata sviluppata utilizzando Php-Html-Css- Javascript.
L'applicazione Web si interfaccia attraverso l'uso di SQL con un database MySql.
E' possibile visualizzare l'introduzione della tesi.
Periodo: Aprile-Maggio 2006
Progetto svolto per l'esame: Intelligenza Artificiale II:
Studio ed analisi de "Il Classificatore Naive Bayes"
E' possibile scaricare la tesina
Periodo: Giugno-Luglio 2005
Progetto svolto per l'esame: Informatica Grafica:
Descrizione del Progetto
Definizione e implementazione in C dell'algoritmo Convex Hull e dato un insieme di punti vilsualizzazione del loro Convex Hull attraverso le OpenGl.
La visualizzazione deve essere inserita in un ambiente grafico complesso.
Soluzione:
Di seguito alcuni screenshot di quanto sviluppato in ambiente Linux utilizzando C e OpenGl
Per visualizzare il risultato ottuneuto espandare la sezione in calce
Vista Frontale
Vista Laterale
Vista Laterale
Periodo: Maggio-Giugno 2005
Progetto svolto per l'esame: Controllo Digitale:
Assegnati i filtri analogici caratterizzati dalle seguenti funzioni di trasferimento:
Ricavare i filtri digitali corrispondenti ottenuti con i seguenti metodi di discretizzazione: Differenze all'indietro, Differenze in avanti, Trasformazione bilineare (o di Tustin), Invarianza della risposta all'impulso, Invarianza della risposta al gradino e Corrispondenza poli zeri. Assumendo come pulsazioni di campionamento i valori: ws = 20, 40 e 100 rad/sec.
Per ognuno dei filtri corrispondenti calcolati, rappresentare:
risposta armonica (modulo e fase) sui diagrammi di Bode fino alla pulsazione ws/2;
il diagramma orario della risposta al gradino unitario.
Periodo: Ottobbre-Novebre 2004
Progetto svolto per l'esame: Impianti di elaborazione I:
Realizzazione, usando netkit, di un'architettura web distribuita contenente almeno tre web server distribuiti geograficamente:
La rete è composta da 6 LAN distribuite geograficamente:
LAN 100.0.0.0/24: corrisponde al dominio .COM, e vi sono collegate le seguenti macchine: un host (PC1), un DNS locale (DNS1) ed un router (R1).
LAN 192.100.11.0/24: corrisponde al dominio .NET, e vi sono collegate le seguenti macchine: un host (PC2), un DNS locale (DNS2) ed un router (R2).
LAN 115.12.10.0/24: corrisponde al dominio .IT, e vi sono collegate le seguenti macchine: un webserver (WS1), un DNS (DNS3, che funge da autorità per l'intero dominio .IT) ed un router (R3).
LAN 180.15.1.0/24: corrisponde al dominio .IT, e vi sono collegate le seguenti macchine: un webserver (WS2) ed un router (R4).
LAN 102.10.2.0/24: corrisponde al dominio .IT, e vi sono collegate le seguenti macchine: 3 webserver (WS3, WS4 e WS5) ed un router (R5).
LAN 154.116.80.0/24: su questa LAN è localizzato il DNS di livello superiore (DNSROOT) e vi sono collegate le altre interfacce dei 5 router.
I 5 web-server forniscono lo stesso servizio, e sono tutti raggiungibili attraverso lo stesso URL (ws.it). Il DNS3 conosce gli indirizzi dei vari server (distribuiti geograficamente), e si occupa della distribuzione di carico tramite l'algoritmo di scheduling round-robin (RRDNS).
Ricavare i filtri digitali corrispondenti ottenuti con i seguenti metodi di discretizzazione: Differenze all'indietro, Differenze in avanti, Trasformazione bilineare (o di Tustin), Invarianza della risposta all'impulso, Invarianza della risposta al gradino e Corrispondenza poli zeri. Assumendo come pulsazioni di campionamento i valori: ws = 20, 40 e 100 rad/sec.
Per ognuno dei filtri corrispondenti calcolati, rappresentare:
risposta armonica (modulo e fase) sui diagrammi di Bode fino alla pulsazione ws/2;
il diagramma orario della risposta al gradino unitario.
Per avere il dettaglio dell'architettura di rete espandere la sezione in calce
Esempio di richiesta di una pagina:
L'host PC1 richiede la pagina http://ws.it/index.php e per risolvere tale URL fa una richiesta al DNS del suo dominio (DNS1). Quest'ultimo per soddisfare la richiesta di PC1 effettua la stessa query al DNSROOT, il quale, sapendo che il DNS autorità per il dominio .IT è il DNS3, reindirizza il DNS1 verso il DNS3. A questo punto il DNS1 rivolge la query al DNS3 che risolve l'indirizzo e risponde fornendogli l'ip di uno dei 5 web-server. L'host riceve tale informazione dal suo DNS locale e può richiedere la pagina html al server.
Cosa fa lo script:
Lo script avvia e configura in modo sequenziale le 16 macchine virtuali che compongono l'architettura. Sui server viene avviato Apache (comando apache). Le ultime due macchine avviate sono PC1 e PC2. Entrambi gli host, dopo la configurazione, richiedono la pagina html tramite il comando wget http://ws.it/index.php per 5 volte (a distanza di 7 secondi l'una dall'altra), in modo da verificare che la risposta arrivi effettivamente da server diversi. Sul terminale degli host infatti viene visualizzato l'ip del server che ha soddisfatto la richiesta, ed inoltre è mostrata la risoluzione dell'URL. Il comando wget salva all'interno della directory homework una copia della pagina html richiesta. Esecuzione dello script: Per avviare lo script bisogna portarsi all'interno della cartella homework e digitare dalla shell il comando homework1.sh start. Per terminare le macchine virtuali digitare, sempre all'interno della cartella homework, il comando homework1_crash.sh crash. Un altro modo per eseguire richieste http al server è quello di digitare, all'interno dei terminali degli host (PC1 o PC2), il comando lynx ws.it/index.php. Tale comando restituisce come output il contenuto testuale della pagina richiesta. Ogni pagina index.php viene modificata dallo script in modo da visualizzare al proprio interno l'indirizzo ip del server che ha soddisfatto la richiesta (ciò solo per una verifica immediata della distribuzione del carico effettuata dal DNS).
Organizzazione del lavoro svolto:
Il lavoro è stato svolto per iterazioni successive, partendo da un'architettura essenziale fino ad arrivare alla struttura definitiva. Il primo passo è stata la modellazione di una rete costituita soltanto da tre lan (con due DNS locali e il DNSROOT ): una volta appurata la connettività della rete (ping tra le macchine virtuali attraverso gli ip, es. ping 192.100.11.1), abbiamo verificato il corretto funzionamento dei DNS (ping tramite i nomi delle macchine virtuali, es. ping pc2.net). A questo punto abbiamo aggiunto altre tre lan sulle quali sono localizzati i web server distribuiti geograficamente. Queste tre lan fanno parte dello stesso dominio .IT: il DNS autorità di tale dominio si trova su una di queste tre lan ed è quello che si occupa del load-balancing.
Note:
Il lavoro è stato svolto su un computer con sistema Linux Mandrake 9.2; la versione di Netkit utilizzata è la 1.4.2.
Un possibile sviluppo dell'architettura sarebbe quello di inserire un web-switch sulla LAN 102.10.2.0/24 in modo da eseguire una ulteriore distribuzione del carico sulla batteria dei server della sottorete.
Periodo: Ottobbre-Novebre 2004
Progetto svolto per l'esame: Impianti di elaborazione II:
Realizzazione, usando netkit, di una clique di n AS in cui tutti hanno un peering con tutti, con diversi valori di n. Verifica dei tempi di convergenza di bgp nei router che compongono la clique, anche simulando guasti delle linee e dei router.
Introduzione:
Il lavoro è stato organizzato nelle tre seguenti fasi:
Realizzazione degli script di configurazione delle tre clique (uno per clique). Ogni singolo script avvia e configura le macchine virtuali della clique cui si riferisce. Non sono state adottate politiche particolari (prefix-filtering, settaggio di local-preference, prepending). In tutti e tre i casi si è deciso di far annunciare le lan interne soltanto da AS1, AS2, AS3. Questo solo per uniformità di esecuzione delle simulazioni.
Realizzazione degli script di simulazione dei danni Stabilizzatasi la rete, viene simulato lo stesso danno per tutte le clique: viene interrotto il peering tra R1 e R2, rispettivamente router di bordo dell'AS1 e dell'AS2. Dopo un certo intervallo di tempo in cui la rete raggiunge la nuova configurazione, è ripristinato il peering.
Analisi dei risultati degli esperimenti Per confrontare i tempi di convergenza delle varie clique, abbiamo scelto come metrica il numero di pacchetti di update inviati dai router. L'analisi è stata fatta a partire dal file di log del demone bgp di zebra su ogni router e dalle tabelle di routing BGP.
Simulazione
La simulazione si è svolta nelle seguenti fasi principali:
Lancio dello script per avviare tutte le macchine virtuali coinvolte. Vengono avviate e configurate le macchine virtuali. Memorizzazione nel file di configurazione di zebra dei peer e delle rotte annunciate.
Attesa del raggiungimento della convergenza delle rotte bgp. Diversa a seconda del numero di AS della clique (vedere seguito).
Shutdown del peering tra l'AS1 e l'AS2. Attraverso la chiamata di un nuovo script (test_nX) viene interrotto il peering tra l'AS1 e l'AS2, modificando il file di configurazione del router 1 attraverso il comando neighbor 111.1.1.2 shutdown ed il riavvio di zebra.
Attesa del raggiungimento della nuova configurazione stabile della rete. Diversa a seconda del numero di AS della clique (vedere seguito).
Ripristino del peering tra l'AS1 e l'AS2. Per ripristinare il peering viene modificato il file di configurazione del router 1 utilizzando il comando no neighbor 111.1.1.2 shutdown e riavviando zebra.
Attesa del raggiungimento della nuova configurazione stabile della rete. Diversa a seconda del numero di AS della clique (vedere seguito).
Esecuzione degli script
Gli script che è possibile lanciare sono tre, uno per ogni clique (clique3.sh, clique4.sh, clique5.sh). Per avviare le macchine virtuali, portarsi all'interno della directory homework2, quindi digitare dalla shell il comando cliqueX.sh start (X=3, 4, 5).
Viene chiesto al momento dell'esecuzione se lanciare le macchine in parallelo, digitando no, oppure in sequenza, digitando yes e premendo invio al termine dell'avvio di ogni macchina. Ogni script a sua volta richiama automaticamente il relativo script che simula il guasto ed il ripristino del peering (test_n3.sh, test_n 4.sh, test_n 5.sh).
Per effettuare il crash delle macchine, sempre nella stessa directory, digitare dalla shell il comando cliqueCrashX.sh crash.
Per una corretta simulazione e per consentire alla rete di convergere nelle tre differenti fasi, sono state inserite negli script di test delle istruzioni di sleep: è necessario attendere circa sei minuti per il completamento del test.
Note per la lettura delle tabelle
Tutte le tabelle sono composte da sei campi:
Tempo (ora dell'evento).
Send/Receive (se il messaggio è stato inviato o ricevuto).
Peer (AS adiacente con il quale è stato scambiato il messaggio).
AS-path (il cammino che il pacchetto ha effettuato per arrivare a destinazione).
Best Path (best attualmente memorizzato nella tabella bgp).
Eventi (viene visualizzato se il pacchetto ricevuto o mandato scatena un evento degno di nota).
Il campo Eventi può assumere uno dei seguenti valori:
Update bgp table: viene aggiornato il best con il path appena ricevuto.
ASx unreachable: il router di bordo comunica al peer che l'ASx non è più raggiungibile.
Denied(cycle): l'annuncio appena ricevuto viene scartato per la presenza nel path del proprio AS (ciclo).
ASx withdrawn: il peer ha comunicato di non poter più raggiungere l'ASx.
Duplicate ignored: l'annuncio appena ricevuto viene scartato poiché l'informazione in esso contenuta è già presente nella routing table;
A: per i rimanenti tipi di annunci.
Per risaltarne l'importanza ad alcune righe sono stati assegnati dei colori:
Le righe evidenziate in rosso ed in verde non sono da intendere in riferimento alle colonne ma vanno lette come delle semplici frasi.
Studio della convergenza della clique
CLIQUE con tre AS
Architettura della clique
La clique è composta da tre AS, ciascuno dei quali ha un peering con gli altri due. Ogni AS ha un solo router di frontiera che annuncia la lan interna all'AS al resto della clique.
Per visualizzare il dettaglio della clique espandere la sezione in calce
La Simulazione
Attesa del raggiungimento della convergenza delle rotte bgp.Per ottenere una configurazione bgp stabile ogni router di frontiera invia due pacchetti di UPDATE a ciascun peer (e ovviamente ne riceve altrettanti). Complessivamente quindi nella clique circolano 12 pacchetti di UPDATE. I primi due che vengono mandati (uno per peer) annunciano la lan interna all'AS (path di lunghezza 1); dopo circa trenta secondi sono inviati gli altri due pacchetti che annunciano le nuove lan raggiungibili tramite l'AS (path di lunghezza 2).
Attesa del raggiungimento della nuova configurazione stabile della rete. Una volta riavviato il demone zebra del router 1, avendo "buttato giù" il peering, i router si scambiano degli ulteriori pacchetti di UPDATE per aggiornare le proprie tabelle bgp. R1 comunica ad R3 che l'AS2 non è più raggiungibile passando per l'AS1. La stessa cosa viene comunicata tra R2 e R3. Di conseguenza, vengono modificate le tabelle eliminando i percorsi non più validi e aggiornando i best. Ad esempio, per raggiungere l'AS2, l'AS1 dovrà passare obbligatoriamente per l'AS3. Il restarting del demone di R1 causa anche il riannuncio della propria lan ad R3, che però riconosce il pacchetto come duplicato e lo ignora. Il numero totale di pacchetti inviati è quindi 3.
Attesa del raggiungimento della nuova configurazione stabile della rete. Avendo ripristinato il peering, i router di frontiera di AS1 e AS2 si scambiano tutte le rotte conosciute. Questo comporta il riaggiornamento delle tabelle bgp e la possibilità di ricevere degli UPDATE contenenti cicli (es R2 invia ad R1 il path 2 3 1); questi cammini sono naturalmente scartati. A questo punto dopo circa 30 secondi R1 comunica ad R3 che è possibile raggiungere l'AS2 passando attraverso il suo AS; stessa cosa viene comunicata da R2 ad R3. Il numero totale di pacchetti inviati è quindi 8.
Per visualizzare le tabelle di convergenza dei router espandare la sezione in calce
CLIQUE con quattro AS
Architettura della clique
La clique è composta da quattro AS, ciascuno dei quali ha un peering con gli altri tre. Ogni AS ha un solo router di frontiera; i soli router AS1, AS2, AS3 annunciano le proprie lan interne al resto della clique.
Per visualizzare il dettaglio della clique espandere la sezione in calce
La Simulazione
Attesa del raggiungimento della convergenza delle rotte bgp. Per ottenere una configurazione bgp stabile anche in questo caso il tempo impiegato è di circa 33 secondi. A differenza della clique precedente i pacchetti inviati per la convergenza della rete sono 28, più del doppio. In particolare risulta differente la sequenza dei pacchetti scambiati, ad esempio tra il router1 ed il router2 passano circa 9 secondi prima che vengano annunciate le rispettive lan (path di lunghezza 1): questo comporta l'invio di un pacchetto contenente un path di lunghezza tre: R2 manda ad R4 il path 2 3 1, non avendo ancora ricevuto "notizie" direttamente da R1; quindi il suo attuale best per raggiungere AS1 è proprio 3 1.
Attesa del raggiungimento della nuova configurazione stabile della rete. Una volta riavviato il demone del router di bordo R1 questo reinvia ai peer la propria lan interna, pacchetti che però vengono scartati da R3 e R4 poiché duplicati. Ed inoltre R1 manda a R3 un messaggio con R2 unreachable e subito dopo, essendosi ricalcolato il best, comunica ad R4 il nuovo path 1 3 2. In modo simmetrico R2 esegue quest'ultime operazioni (il path è 2 3 1). In conclusione il tempo impiegato per il raggiungimento della convergenza è di circa 30 secondi ed il numero di updates inviati è 6 ( il doppio della clique precedente).
Attesa del raggiungimento della nuova configurazione stabile della rete. Non appena viene ripristinato il peering, il router di frontiera di AS2 invia tutte le rotte conosciute all'AS1 che modifica la tabella di routing bgp aggiornando i best, e scarta (ciclo) il pacchetto ricevuto riguardante la propria lan. R1 invia due pacchetti per ogni interfaccia (tra questi ci sono anche dei duplicati), di conseguenza gli altri router aggiornano le loro tabelle di instradamento. Il numero totale di pacchetti inviati è quindi 11.
Per visualizzare le tabelle di convergenza dei router espandare la sezione in calce
CLIQUE con cinque AS
Architettura della clique
La clique è composta da cinque AS, ciascuno dei quali ha un peering con gli altri quattro. Ogni AS ha un solo router di frontiera; i soli router AS1, AS2, AS3 annunciano le proprie lan interne al resto della clique.
Per visualizzare il dettaglio della clique espandere la sezione in calce
La Simulazione
Attesa del raggiungimento della convergenza delle rotte bgp. Per ottenere una configurazione bgp stabile anche in questo caso il tempo impegato è di circa 33 secondi. A differenza della clique precedente i pacchetti inviati per la convergenza della rete sono 49, poco meno del doppio della clique con quattro AS. Osservando le tabelle riportate si possono facilmente riscontrare analogie con i medesimi punti delle clique precedenti anche se naturalmente la rete converge più lentamente.
Attesa del raggiungimento della nuova configurazione stabile della rete. UUna volta riavviato il demone del router di bordo R1 questo reinvia ai peer la propria lan interna, pacchetti che però vengono scartati da R3, R4 ed R5 poiché duplicati; R1 riannuncia al resto della clique il nuovo best verso R2, che si comporta in maniera analoga. Il tempo impiegato per il raggiungimento della convergenza è di circa 30 secondi ed il numero di updates inviati è 9.
Attesa del raggiungimento della nuova configurazione stabile della rete. Il comportamento è esattamente lo stesso della clique precedente, naturalmente vengono inviati anche i pacchetti all'AS5 che prima non esisteva. Il numero totale di pacchetti inviati è quindi 14.
Per visualizzare le tabelle di convergenza dei router espandare la sezione in calce
Periodo: Giugno 2004 - Ottobbre 2004
Progetto svolto per l'esame: Progetto di sistemi informativi I e II:
Realizzazione di un interfaccia web per BgpServer che consenta la visione dei risultati prodotti da quest'ultimo su web.
Adattamento del motore grafico utilizzato da BGPlay per i dati ottenuti da Bgp Server.
I progetti sono stati svolti utilizzando Java-Jsp-XHtml-Css ed entrambi disponibili in linea e quindi visualizzabili attraverso questo link: Bgp server web interface
Periodo: Giugno 2004 - Ottobbre 2004
Progetto svolto per l'esame: Elementi di crittografia:
Studio dell'algoritmo di crittografia DES ed esposizione dei risultati in una lezione del medesimo corso.
Periodo: Maggio 2003
Progetto svolto per l'esame: Sistemi Distribuiti:
Realizzazione di un'applicazione web che gestisce l'inserimento dei tirocini degli studenti universitari. Tale applicazione prevede la gestione di tre classi di utenti gli studenti, i professori ed il personale della segreteria. una volta effettuato il login ogni classe attraverso un apposito menu' puo' effettuare operazioni personalizzate.
Il progetto e' stato svolto utilizzando Java-Jsp-Html-Css, SQL (il sistema si interfaccia ad un database Postgres).
Periodo: Gennaio 2003
Progetto svolto per l'esame: Base di dati:
Realizzazione del progetto della base di dati di un'agenzia di vigilanza:
Il progetto e' stato svolto utilizzando un database Access.
E' possibile visualizzare il risultato da questo link: DB Agenzia Vigilanza
Per visualizzare il dettaglio del progetto espandere la sezione in calce
Descrizione e specifiche
Si vuole realizzare il progetto della base di dati di un’agenzia di vigilanza, partendo da un insieme di requisiti. Le fasi da svolgere vanno dall’analisi dei requisiti, (ovvero si chiariscono e si organizzano le specifiche dei requisiti), alle varie fasi dell’analisi (analisi delle prestazioni: si valuta il costo di un’operazione e l‘occupazione di memoria; e analisi delle ridondanze ovvero dei dati che possono essere ricavati da altri) fino all’implementazione delle operazioni previste. Durante il progetto è necessario produrre un insieme di documenti, che costituiscono appunto la documentazione del progetto.
Specifiche sui dati
Si vuole progettare il sistema informativo di un’agenzia di vigilanza.
Diversi tipi di persone sono coinvolti nell’agenzia: dipendenti, impiegati, agenti, capiufficio, capigruppo. Di questi vogliamo rappresentare alcuni dati anagrafici: nome, cognome, età, indirizzo, stipendio, codice fiscale (che li identifica).
L’agenzia ha più sedi, distinguibili in caserme e uffici, entrambe caratterizzate da un indirizzo, un telefono, codice e un nome. Ogni impiegato lavora in un ufficio diretto da un capoufficio; gli agenti diretti dai capigruppo, hanno sede, insieme a questi ultimi, nelle caserme.
Gli agenti prima di essere assegnati insieme ai capigruppo ad alcuni servizi, identificati da un codice servizio, un nome, un indirizzo e un ricavo, devono essere addestrati almeno una volta nelle caserme tramite esercitazioni. Ogni esercitazione ha un numero esercitazione, una data e un’ora.
Ogni servizio ha un capogruppo e può essere ‘coperto’ oltre che dagli agenti anche da collaboratori esterni, indipendenti dall’agenzia, identificati da un tipo e un numero.
Gli agenti sono forniti di equipaggiamento composto da armi e veicoli aventi entrambi un codice: possono guidare i veicoli necessari al servizio solo se muniti di abilitazione e ognuno possiede un’arma.
La ditta che fornisce l’equipaggiamento, caratterizzato da un costo, un tipo e un codice, ha un indirizzo, un nome e un numero di telefono. I veicoli hanno bisogno di manutenzione.
Specifiche sulle operazioni
Per l’agenzia di vigilanza sono previste alcune operazioni, di cui riportiamo una breve descrizione ed il carico previsto.
Assunzione di un nuovo dipendente (frequenza: 5 al mese).
Aggiunta di un nuovo servizio (frequenza: 1 a settimana).
Licenziamento di agente (frequenza: 5 al mese).
Spostamento esercitazioni (frequenza: 5 al giorno).
Trova gli agenti che lavorano in un determinato turno (frequenza: 1 al giorno).
Trova i costi delle vetture usate per un servizio (frequenza: 2 a settimana).
Cancella servizio (frequenza: 1 a settimana).
Trova gli agenti che possono guidare un mezzo in un servizio (frequenza: 10 al giorno).
Scrivi l’elenco degli agenti che fanno un’ esercitazione fuori dalla propria caserma (frequenza: 1 a settimana).
Trova i dipendenti che hanno più di un numero di telefono (frequenza:3 al giorno).
Trova gli agenti che hanno usato un’arma in un servizio (frequenza: 3 al giorno).
Calcolo entrate (frequenza:1 all’anno).
Analisi dei requisiti
In questo paragrafo ci occupiamo della fase di analisi e ristrutturazione dei requisiti raccolti, producendo un insieme omogeneo e non ambiguo di specifiche da utilizzare nelle fasi successive della progettazione.
Viene omessa una descrizione più dettagliata di questa attività.
Nella fase di analisi vogliamo individuare i termini più rilevanti,i termini sinonimi e/o omonimi, le correlazioni tra i vari termini e la presenza di eventuali ambiguità. Per fare questo è utile la costruzione di un glossario dei termini nel quale, ad ogni termine rilevante individuato nelle specifiche, associamo una breve descrizione, eventuali omonimi e/o sinonimi ed i termini ad esso collegati logicamente. Una porzione del glossario dei termini per l’applicazione in esame è riportata in figura 1.
A questo punto è utile riorganizzare le specifiche, partizionandole in gruppi di frasi che fanno riferimento ad informazioni omogenee. In questa fase cerchiamo di filtrare le ambiguità presenti ed utilizzare una terminologia più accurata facendo uso del glossario.
Otteniamo al termine di questa fase le specifiche che seguono.
Dati di carattere generale
Si vuole progettare il sistema informativo di un’agenzia di vigilanza rappresentando esclusivamente i dati relativi a:
Dipendenti dell’ agenzia: impiegati, agenti, capiufficio, capigruppo.
Sedi del dipartimento:caserme, uffici.
Turni di servizio.
Equipaggiamento degli agenti.
Dati sui dipendenti
Per i dipendenti (circa 5200), rappresentiamo alcuni dati anagrafici, quali il nome, il cognome, l’ indirizzo, il numero di telefono, il codice fiscale e lo stipendio (dipendente dalla sua posizione nell’azienda). I dipendenti sono classificati rispetto a diverse tipologie, essendo composti da impiegati, agenti, capiufficio e capigruppo.
Dati sugli impiegati
Per ogni impiegato (circa 200) vogliamo rappresentare esclusivamente i suoi dati anagrafici, lo stipendio, l’ufficio in cui lavora e il suo superiore.
Dati sui capiufficio
Per il capoufficio (circa 2) vogliamo rappresentare oltre ai dati anagrafici anche il suo stipendio, l’ufficio diretto ed i suoi inferiori.
Dati sugli agenti
Per gli agenti (circa 5000) vogliamo rappresentare i turni di servizio, il suo equipaggiamento, ovvero l’arma e i veicoli di cui possiede l’abilitazione, e il tipo di addestramento seguito nella rispettiva caserma.
Dati sui Marescialli
Per i Marescialli (circa 1000) si vuole rappresentare il servizio di cui è unico responsabile e gli agenti comandati.
Dati sui servizi
Per i servizi (circa 1000) si vuole rappresentare il nome, il codice servizio che lo identifica, il costo, l’indirizzo, il ricavo, i veicoli necessari al servizio, i collaboratori esterni.
Dati sui veicoli
Per i veicoli (circa 300) si vuole rappresentare il costo per il suo utilizzo, il codice veicolo, il fornitore. Ogni veicolo può aver bisogno di riparazioni presso un’officina di cui si conosce l’indirizzo; è necessario conoscere anche il costo delle riparazioni.
Progettazione concettuale
Riflettendo sull’analisi delle specifiche abbiamo deciso di utilizzare la tecnica mista per la stesura del modello E-R. Analizzati i punti di maggior interesse abbiamo realizzato tre piccoli schemi iniziali che rappresentassero le tre parti principali: i dipendenti della nostra agenzia, i servizi di vigilanza e gli equipaggiamenti necessari.
In questo primo schema viene mostrata la relazione che lega ogni dipendente alla sua sede.Si è deciso di suddividere i dipendenti in impiegati e agenti e le sedi in caserme e uffici. Per l’entità impiegati stata creata un’altra entità: capoufficio, sottoinsieme degli impiegati, allo scopo di mostrare la relazione tra capiufficio ed il proprio ufficio.
In questo secondo schema vengono messe in evidenza le assegnazioni degli agenti ai rispettivi servizi. Abbiamo deciso di utilizzare relazioni sia per le assegnazioni agenti-servizi che per quelle collaborati-servizi. Per l’entità agenti si è deciso di suddividerla in un'altra entità: maresciallo, sottoinsiemi degli agenti, per mostrare la relazione tra i marescialli e i servizi.
Infine nell’ultimo schema abbiamo rappresentato le necessità dei servizi riguardo agli equipaggiamenti; è nata così la decisione di usare una gerarchia per utilizzare in modo più efficiente le relazioni sulle manutenzioni e sui fornitori, poiché per i servizi sono necessari esclusivamente i veicoli. Ogni agente è infine legato agli equipaggiamenti tramite una relazione abilitazione per i veicoli e tramite un possesso per le armi.
Riportiamo quindi lo schema intermedio che viene creato dall’unione dei precedenti tre. A quest’unione vengono inoltre aggiunte alcune realtà d’interesse tralasciate nei precedenti tre schemi quali le esercitazioni degli agenti e le manutenzioni dei veicoli da parte di officine
Vengono rappresentati alcuni vincoli richiesti dalle specifiche mentre per quelli non visualizzabili viene dato un elenco qui sotto.
Vincoli non espressi dallo schema
Esercitazioni: un agente non può effettuare un esercitazione se sta effettuando un servizio ne eseguire più esercitazioni nello stesso giorno.
Capogruppo: se un servizio richiede un solo agente esso deve essere necessariamente un maresciallo.
Stipendi: gli stipendi dei dipendenti di grado più alto (capoufficio e marescialli) devono essere superiori a quello dei dipendenti di grado più basso (impiegati ed agenti).
Per la stesura dello schema finale non vengono apportati cambiamenti allo schema intermedio ma vengono aggiunti gli attributi e denominate le relazioni.
Analisi delle funzioni
Per la progettazioni delle funzioni e necessario valutare il carico della applicazione sia per quanto riguarda il volume dei dati che ci aspettiamo sia la frequenza con cui essi vengono usati. Il primo concetto viene mostrato nella tabella dei volumi che esplicita per ciascun oggetto dello schema E-R (entità, relazioni) il numero atteso di istanze che quel concetto avrà in un funzionamento di regime dell’applicazione. La tavola delle frequenze mostra invece la frequenza con cui le operazioni vengano eseguite.
Avendo a disposizione queste informazioni, è possibile fare un stima del costo di un’operazione sulla base di dati contando il numero di accessi alle occorrenze di entità e relazioni necessario per eseguire le operazioni; decidiamo di fare la stima del costo solo di alcune delle operazioni previste: ad esempio delle operazioni 5 e 11.
Facendo riferimento allo schema della operazione 5 dobbiamo innanzitutto accedere ad 1 occorrenza dell’entità agenti, per poi accedere ad 0.76 occorrenze dell’associazione turno (gli agenti sono infatti 5000 e i turni circa 4000).
Per l’operazione 11 invece dobbiamo accedere ad 1 occorrenza dell’entità agenti per poi accedere a 1 occorrenza dell’entità possesso e da qui ad 1 dell’ entità arma. Successivamente per conoscere in quali turni lavora dobbiamo accedere a 0.76 occorrenze dell’associazione turni e attraverso queste a 0.76 occorrenze dell’entità turni.
Progettazione Logica indipendente dal modello
Effettuiamo ora la progettazione logica della base di dati. In questo paragrafo ci occupiamo della fase alta della progettazione logica, ovvero quella indipendente dal modello dei dati scelto, suddivisa in analisi delle ridondanze, eliminazione delle gerarchie, partizionamento-riaccorpamento di entità-relazioni e scelta degli identificatori principali. Questa fase conduce alla stesura di un progetto E-R ristrutturato dalle realtà di interesse. Nel prossimo paragrafo ci occuperemo della traduzione di questo schema E-R in uno schema relazionale.
Analisi delle ridondanze
In questa fase vanno individuate eventuali ridondanze nello schema concettuale. Le ridondanze possono essere costituite da relazioni (in presenza di cicli di relazioni) oppure da attributi (chiamati anche dati derivati). Utilizzando le informazioni sul carico, dobbiamo poi decidere se mantenere (introdurre in alcuni casi) oppure eliminare queste ridondanze.
Dopo un’attenta analisi abbiamo appurato che nel nostro schema non sono presenti ridondanze anche perché nella progettazione concettuale avevamo da subito eliminato, ogni possibile forma di ridondanza, passiamo dunque direttamente alla eliminazione delle gerarchie.
Eliminazione delle Gerarchie
Nello schema sono presenti cinque gerarchie, in particolare tre di esse fanno riferimento all’entità dipendenti, una all’entità sedi e l’ultima all’entità equipaggiamento.
Per quanto riguarda i dipendenti le operazioni non fanno grosse distinzioni tre agenti e impiegati, questa generalizzazione può essere eliminata incorporando l’entità figlie agenti ed impiegati nell’entità padre dipendenti, alla quale va aggiunto l’attributo tipo, che assumerà il valore A nel caso in cui si tratta di un agente, ed il valore I se viceversa è un impiegato. Per i due sottoinsiemi di agenti ed impiegati: capo ufficio e maresciallo, possiamo fare lo stesso discorso, e l’attributo tipo oltre ad assumere i valori precedentemente descritti può assumere anche M per i marescialli e C per i capi ufficio;
Per quanto riguarda la gerarchia tra l’entità padre sede e le entità figlie caserma e uffici, si può fare un discorso simile a quello fatto per dipendenti ed impiegati e agenti, si possono quindi anche qui fondere le entità figlie nell’entità padre creando anche in questo caso un attributo tipo che assumendo il valore C se si tratta di una caserma e U se si tratta di un ufficio.
Anche nell’ultima gerarchia non fanno molte distinzioni le operazioni tra le occorrenze e gli attributi di equipaggiamento, Arma e Veicoli; quindi anche in quest’ultimo caso abbiamo ritenuto opportuno eliminare le entità figlie e aggiungere a quella padre un attributo tipo con il valore A se si tratta di un Arma e V di un Veicolo. Anche in quest’ultimi due casi bisogna fare attenzione alla cardinalità minima del nuovo attributo.
lo schema viene cosi trasformato:
Partizionamento/riaccorpamento di entità/relazioni
Per quanto riguarda l’attributo multivalore “telefono”nell’entità dipendenti, sedi, collaboratori, fornitori e manutenzione, abbiamo deciso di creare una nuova entità telefono ed eliminare l’attributo da tutte le entità, creando le associazioni Recapito dipendenti,Recapito sede, Recapito collaboratori, Recapito fornitori, Recapito manutenzione, che unisce le varie entità.
La stessa osservazione può essere fatta per l’attributo”indirizzo”delle stesse entità, abbiamo così deciso di creare una nuova entità indirizzo ed eliminare l’attributo dalle varie entità, creando le associazioni Ubicazione dipendenti, Ubicazione sede, Ubicazione collaboratori, Ubicazione fornitori, Ubicazione che unisce le varie entità.
Abbiamo infine ritenuto opportuno unire le due entità telefono e indirizzo cosi da ottenere una nuova entità domicilio con gli attributi telefono, indirizzo.
Scelta degli identificatori principali
Non ci sono entità presenti nello schema E-R che abbiano o identificatori composti o identificatori esterni, le chiavi scelte sono quindi già delle chiavi primarie.
Con la modifica fatta nel paragrafo precedente si viene a creare un problema per la chiave dell’entità domicilio, abbiamo cosi deciso di aggiungere un nuovo attributo a tale entità: codice domicilio, che sarà poi la chiave primaria della relazione.
Progettazione logica nel modello concettuale
Traduzione delle Entità
La prima fase di questa attività individua un insieme di nomi di R-relazioni (le R-relazioni sono le relazioni nel modello relazionale,non da confondere con quelle del modello entità-relazione) ottenuti dalla traduzione delle entità presenti nello schema E-R ristrutturato.Questo passo individua un insieme di attributi che costituiscono lo schema iniziale di tali R-relazioni.
SEDI (Codice, nome, tipo)
DIPENDENTI (Cod fiscale, nome, cognome, stipendio)
DOMICILIO (Cod Domicilio, telefono, indirizzo)
ESERCITAZIONE (Num esercitazione, data, ora)
FORNITORI (Ditta)
EQUIPAGGIAMENTO (Codice, tipo, costo)
SERVIZI (Cod servizio, nome, ricavo)
COLLABORATORI (Tipo collaboratore)
MANUTENZIONE (Nome)
Nel nostro caso non ci sono entità identificate esternamente, nella parte successiva dobbiamo quindi occuparci della traduzione di tutte le relazioni.
Traduzione delle relazioni
Consideriamo innanzi tutto le relazioni di tipo uno a uno, poi quelle di tipo uno a molti ed infine quelle di tipo molti a molti. Si può subito notare che nello schema ristrutturato sono presenti solo due relazioni di tipo uno ad uno. Possiamo quindi tradurre la prima relazione, dirigenza, che collega le entità dipendenti con le entità sedi introducendo un attributo dirigente (con vincolo di integrità con il codice fiscale). Lo stesso discorso può essere fatto con la relazione responsabilità, che collega dipendenti con servizi, introduciamo quindi anche in quest’ultima entità un attributo maresciallo mantenendo sempre un vincolo di integrità. Anche per la relazione possesso, che collega dipendenti con equipaggiamento applichiamo la stessa regola e aggiungiamo l’attributo arma all’entita dipendenti.Possiamo quindi passare ad esaminare direttamente le relazioni di tipo uno a molti. Possiamo quindi tradurre la relazione agenda5, che collega sedi a domicilio, introducendo un attributo sedi in domicilio.Ugualmente possiamo fare per tutte le altre relazioni che collegano l’entità domicilio: collaboratori, manutenzione, fornitori e dipendenti, aggiungendo a questa i quattro rispettivi attributi. Per quanto riguarda la relazione esigenza veicolo che collega l’entità servizi con quella equipaggiamento possiamo anche qui eliminarla e aggiungere ad equipaggiamento l’attributo servizio. Per la relazione ubicazione,che collega le due entità sedi e esercitazione, vale la stessa cosa, sostituiamo quindi la relazione con l’aggiunta dell’attributo sedi ad esercitazione. Applichiamo lo stesso tipo di ragionamento anche per le relazioni appartenenza e forniture , che collegano rispettivamente sedi con dipendenti e fornitori con equipaggiamento; aggiungiamo quindi gli attributi sede in dipendenti e fornitore in equipaggiamento. Dobbiamo tradurre le restanti relazioni: riparazioni, abilitazioni, turno e collaborazione che sono di tipo molti a molti, con R-relazioni. Otteniamo quindi i seguenti schemi di R-Relazioni.
RIPARAZIONI (equipaggiamento, manutenzione, costo, data)
ABILITAZIONI (equipaggiamento, dipendenti)
TURNO (dipendenti, servizi, ora,data)
COLLABORAZIONE (servizi, collaboratori, num collaboratori)
Schema logico
SEDI (Codice, nome, tipo, dirigente)
DIPENDENTI (Cod fiscale, nome, cognome, stipendio, sedi,arma)
DOMICILIO (Cod Domicilio, telefono, indirizzo, sedi, fornitori, manutenzione, dipendenti)
ESERCITAZIONE (Num esercitazione, data, ora, sedi)
FORNITORI (Ditta)
EQUIPAGGIAMENTO (Codice, tipo, costo, servizio, fornitore)
SERVIZI (Cod servizio, nome, ricavo, maresciallo)
COLLABORATORI (Tipo collaboratore)
MANUTENZIONE (Nome)
RIPARAZIONI (equipaggiamento, manutenzione, costo, data)
ABILITAZIONI (equipaggiamento, dipendenti)
TURNO (dipendenti, servizi, ora,data)
ADDESTRAMENTO(dipendenti,esercitazione)
COLLABORAZIONE (servizi, collaboratori, num collaboratori)
Implementazioni di alcune operazioni
In questo paragrafo viene proposta l’implementazione di alcune delle operazioni che sono definite per l’agenzia di vigilanza.
Dopo aver creato la base di dati contente tutte le tabelle viste nello schema logico, effettuiamo le operazioni previste, riportando poi i risultati ottenuti.
Operazione 1:
INSERT INTO DIPENDENTI ( CodFiscale , nome , cognome , stipendio , sedi , arma ) VALUES ( 'Cod fiscale' ,' nome' ,' cognome' , 'stipendio' , 'sedi' , 'arma' ) ;
Operazione 2:
INSERT INTO SERVIZI (CodServizio, nome, ricavo, maresciallo) VALUES ( 'Cod servizio', 'nome',' stipendio' , 'maresciallo' )
Operazione 3;
DELETE FROM DIPENDENTI WHERE codFiscale= 'A14' ;
Operazione 4:
UPDATE Esercitazione SET Data ='18/11/2001' WHERE numesercitazione ='04';
Operazione 5:
SELECT Dip.nome, Dip.cognome, Dip.CodFiscale FROM Dipendenti as Dip INNER JOIN Turno ON Dip.CodFiscale = Turno.agente WHERE turno.data="16/11/2001";
Operazione 6:
SELECT Eq.costo, Eq.codice, Eq .tipo FROM Servizi as sr INNER JOIN Equipaggiamento as Eq ON sr .codServizio = Eq .servizio WHERE (sr.codservizio="S4");
Operazione 7:
DELETE FROM SERVIZI WHERE codServizio= 'S14' ;
Operazione 8:
SELECT Dip.CodFiscale, Dip.nome, Dip .cognome FROM Servizi as sr INNER JOIN (Equipaggiamento as Eq INNER JOIN (Dipendenti as Dip INNER JOIN Abilitazioni as ab ON Dip.CodFiscale = ab.dipendenti) ON Eq.codice = ab.equipaggiamento) ON sr.codServizio = Eq.servizio WHERE (((sr.codServizio)="S4"));
Operazione 9:
SELECT dip.CodFiscale, dip.nome, dip.cognome FROM ((Dipendenti as dip INNER JOIN Addestramento as add ON dip.CodFiscale=add.agenti) INNER JOIN Esercitazione as es ON add.esercitazione=es.numEsercitazione) INNER JOIN Sedi ON dip.sedi=Sedi.Codice WHERE sedi.codice<>esercitazione.sedi;
Operazione 10:
SELECT dip.codfiscale, dip.nome,dip.cognome FROM Dipendenti as dip INNER JOIN Domicilio ON dip.CodFiscale = Domicilio.dipendenti group by dip.codfiscale,dip.nome,dip.cognome having count(dip.codfiscale)>1;
Operazione 11:
SELECT Eq.codice, Eq.tipo FROM (Servizi as ser INNER JOIN (Dipendenti as dip INNER JOIN Turno ON dip.CodFiscale = Turno.agente) ON ser.codServizio = Turno.servizio) INNER JOIN Equipaggiamento as Eq ON dip.arma = Eq.codice WHERE ser.codservizio="S1";
Operazione 12:
SELECT Sum(Servizi.ricavo) AS SommaDiricavo
Dati di test
In questa sezione devono essere mostrate le schermate delle tabelle popolate con dati a testare la correttezza delle operazioni implementat
Mostriamo infine anche i risultati di alcune delle operazioni