DIPARTIMENTO DI SCIENZE ECONOMICHE Aprile 2000 Il progetto e la realizzazione di DBVeneto OnLine Luca Sabaini e Riccardo Golia NOTA DI LAVORO 2000.02 Serie DBVeneto con la collaborazione della Fondazione Cassa di Risparmio di Venezia Riassunto In questo lavoro si ripercorrono alcune delle fasi di progettazione e realizzazione del progetto DBVeneto, nato nel 1997 come ricerca caratterizzante del Dipartimento di Scienze Economiche dell'Università Ca' Foscari di Venezia. In particolare si considerano le procedure informatiche seguite per costruire un sistema in grado di gestire ed interrogare un DataBase Management System (DBMS) con un semplice browser Web collegato ad Internet. Una volta spiegato il meccanismo di interfaccia generico che si instaura tra l'utente, la rete Internet e la base di dati che contiene le informazioni, si descrive l'applicazione, ossia la realizzazione ed il funzionamento del sito DBVeneto OnLine. Il disegno concettuale della base di dati ha seguito il modello Entity-Relationship (ER) che viene descritto per quel che concerne la prima base di dati su cui si è lavorato, quella dell''Import– Export' riguardante le importazioni e le esportazioni eseguite dagli operatori economici delle sette province venete. Dopo aver illustrato le soluzioni adottate per risolvere i problemi emersi nella fase di verifica e controllo, vengono rapidamente presentate alcune pagine dell'interfaccia utente. Summary This report describes some of the planning and construction phases of the DBVeneto project, established in 1997 as a special research project of the Economics Department at the University of Venice. In particular, it considers the procedures followed to construct a system able to manage and search a Data Base Management System (DBMS) with a simple browser Web connected to Internet. Explanation is given of a generic interface mechanism established among users, Internet and the data base containing information. There follows a description of the application, i.e. the construction and operation of the DBVeneto OnLine site. The conceptual structure of the data base matches the Entity-Relationship (ER) model, which is described in relation to the first data base worked on: imports and exports carried out by Venetian provinces. The solutions of the problems that emerged in the pilot phase are set out, and some pages of user interface are shown. Gli autori ringraziano la professoressa Maristella Agosti (Università di Padova) ed il professor Giuseppe Tattara (Università Ca' Foscari di Venezia) rispettivamente relatrice e correlatore della tesi di laurea di Luca Sabaini in Ingegneria Informatica dalla quale è stato tratto in parte il presente lavoro. Inoltre gli autori ringraziano per la collaborazione il professor Dino Rizzi, il personale del Centro di Telecomunicazioni di Ateneo e la dottoressa Rita Canu. La stesura del presente lavoro e la realizzazione operativa del progetto DBVeneto OnLine sono da attribuirsi in parti uguali ai due autori. 1 . I NT RO D U ZI O NE Nell’ambito del World Wide Web (WWW), costituito da singole pagine create in un linguaggio ipertestuale HyperText Markup Language (HTML) che l’utente finale vede raggruppate in luoghi virtuali chiamati “siti”, si propongono ai visitatori pagine statiche, memorizzate nella memoria di massa di una macchina Server. Il problema considerato in questo lavoro è stato quello di realizzare un sito Web che non si limitasse all’interazione dell’utente con pagine HTML statiche, bensì con pagine create dinamicamente nell’istante in cui sono richieste, in soddisfacimento di una specifica richiesta eseguita dall’utente per mezzo di pagine Web nelle quali formulare l’interrogazione. La dinamicità è legata all’interazione dell’utente con un sistema di gestione di basi di dati (DataBase Management System, DBMS), non per mezzo di un’applicazione o di un programma sulla macchina locale, ma attraverso il Web stesso. Il problema è stato risolto prima analizzando i sistemi attualmente disponibili per lo sviluppo del progetto, quindi - dopo aver individuato la tipologia degli strumenti da adottare - utilizzando metodologie e sviluppando programmi di interfaccia conformi ai protocolli legati ad Internet quali l’HyperText Transfer Protocol (HTTP) e il Transmission Control Protocol/Internet Protocol (TCP/IP). Questi programmi permettono l’accesso ai dati, ossia l’interrogazione e la gestione di un server DBMS tramite un qualsiasi Client collegato alla rete Internet. Il client è in realtà un navigatore (browser), cioè un’applicazione che permette di impaginare i sorgenti HTML e le immagini che arrivano dal sito Web, trasformandoli nelle pagine finali e, nella direzione contraria, interpretare le richieste dell’utente trasformandole in comandi da trasferire al server Web. Il meccanismo può essere indifferentemente e senza alcuna modifica applicato ad una rete aziendale (LAN) realizzata con i protocolli caratteristici della rete Internet (Intranet). Questo permette ad una azienda di mettere a disposizione i dati, o parte di essi, contenuti nel DataBase aziendale in maniera automatica e riducendo al minimo l’intervento per gli aggiornamenti. Sfortunatamente, infatti, pubblicare dati attraverso 1 pagine Web statiche richiede una manutenzione davvero considerevole, specialmente per siti che si estendono per più di qualche pagina HTML. Se una azienda pubblica i suoi archivi in pagine HTML, qualche addetto alla fine avrà il compito di assicurare che tutte quelle pagine siano tenute aggiornate. Per esempio, le variazioni di un listino prezzi dei prodotti di una azienda dovrebbero essere trascritte dalla tabella del DataBase dei prezzi della contabilità alle singole pagine HTML nel sito Web dell’azienda. E’ decisamente meglio che una variazione agli archivi dei prezzi si rifletta automaticamente anche nelle pagine HTML sul sito Web. E’ altrettanto ottimale che i clienti dell’azienda possano, se autorizzati, aggiornare e manipolare parte dei dati. Per esempio, un cliente potrebbe usare una pagina Web nel sito dell’azienda per aggiornare il suo indirizzo o altre informazioni. L’obbiettivo del presente lavoro è stato dunque proprio questo: progettare e realizzare la gestione e l'interrogazione di un DBMS con un semplice browser Web collegato ad Internet. La struttura di questo scritto rispecchia la metodologia utilizzata nello sviluppo del lavoro svolto: una prima parte considera l’analisi degli strumenti tecnici da utilizzare nell’esecuzione del progetto ed una seconda parte descrive il progetto realizzato con gli strumenti scelti. Il secondo capitolo contiene una spiegazione introduttiva del meccanismo di interfaccia generico che deve instaurarsi fra il Web, identificabile in un utente generico, la rete Internet - quale tramite per il passaggio dei dati - e la base di dati, fornitrice delle informazioni. Nel terzo capitolo è raccolto il progetto di banca dati DBVeneto realizzato per il Dipartimento di Scienze Economiche dell’Università Ca’ Foscari di Venezia con il coordinamento del professor Tattara. Vengono descritte sequenzialmente e metodicamente le diverse fasi della realizzazione dell’applicazione, i problemi incontrati e le soluzioni adottate. Nell’ultimo capitolo, è presentata l’applicazione vera e propria. Contiene le immagini delle pagine visibili tramite un browser Web collegato alla rete Internet, all’indirizzo del progetto www.unive.it/dbveneto, con la descrizione del loro ruolo all’interno dell’applicazione. 2 2 . L ’ I NT E R F A C C I A T R A W E B E D B M S Da un punto di vista generico, l’interazione è fra un client (il browser) che richiede l’accesso ai dati ed il server (il DBMS) che restituisce i dati richiesti: Figura 2-1 Ma se proviamo ad addentrarci nei meccanismi che regolano l’interazione, ci accorgiamo che l’applicazione client è costituita da un’interfaccia che trasforma le pagine in arrivo, raggruppa il testo, le immagini, i suoni ed i filmati ed impagina il tutto a video. L’applicazione client interpreta i comandi desunti dalle scelte effettuate nella pagina Web dall’utente e li trasforma in comandi HTTP da inviare sulla rete, mentre è il SO del calcolatore client che ingloba i comandi in pacchetti TCP/IP diretti al calcolatore server. Anche tra rete Internet e DBMS c’è in realtà qualcosa d’altro: un server HTTP di pagine Web, una porta di accesso, detta gateway che permette al server HTTP di interagire con il DBMS ed eventuali procedure applicative di funzionamento. Questo è lo schema più dettagliato: Figura 2-2 3 Tutto inizia con la richiesta di un utente (navigatore) della rete Internet che interagisce “cliccando” nelle pagine, il browser trasforma la richiesta in comandi HTTP che vengono inviati al server tramite la rete. Il server Web esamina la richiesta: se è di una pagina statica la chiede al file system e la spedisce quindi al client Web per soddisfare la sua richiesta. Se invece si tratta di una pagina contenente codice da interpretare, ovvero una pagina da creare dinamicamente, demanda ad un gateway l’esecuzione delle diverse parti di codice sparse nella pagina. Una volta eseguite, le accorpa al resto componendole nel codice HTML e dirige il tutto al client. La selezione nell’esame del tipo di pagine avviene di solito esaminando l’estensione nel nome del file contenente la pagina richiesta oppure il percorso del file. Sono caratteristiche per pagine da interpretare o eseguire le estensioni .asp, .php, .cgi, .exe, e le directory /cgi-bin, /wwwroot, riferite alla home directory dei documenti Web; mentre per pagine da restituire staticamente sono ormai consolidate le estensioni .htm e .html. L’interpretazione o l’esecuzione della pagina avviene nel gateway che, a seconda dei comandi ricevuti, esegue chiamate al DBMS per l’interrogazione di tabelle oppure al SO per conoscere l’ora, il giorno, la provenienza dell’utente, ed altri dati analoghi. Quando il gateway riceve la risposta alla chiamata, la inoltra al server Web che a sua volta la rispedisce al client attraverso la rete. Molto diverso è il meccanismo di funzionamento del sistema dei Java Applets. Infatti, la fase di interazione con il server Web è solo iniziale, per passare poi ad una interazione browser-DBMS diretta, che non utilizza il server Web. L’applicazione (Applet) viene scaricata dal browser come succede per una qualsiasi immagine, e quindi la prima parte del meccanismo segue le specifiche descritte sopra. Invece la seconda fase, cioè la vera e propria esecuzione dell’applicazione da parte del browser, va ad eliminare la funzione di intermediazione del server Web con il DBMS, permettendo al client di interagire direttamente con il DBMS senza passare dal server Web. 4 3 . A PP L I C A ZI O N E D I P R O G E T T O : D B V e n e t o O n L i n e Figura 3-1: Logo del progetto Lo scopo della realizzazione del sito Internet del progetto DBVeneto, chiamato appunto DBVeneto OnLine, è quello di fornire un DataBase regionale che consenta di affrontare i temi dello sviluppo del Veneto in modo rigoroso e scientifico. L'obiettivo finale è un DataBase organico, uniforme e aggiornabile nel tempo che permetta di analizzare i temi emersi con particolare vivacità nel corso dell'ultimo ventennio. Il DataBase costituisce un prodotto utile per il dibattito economico riferito alla situazione locale, con particolare attenzione a: • la necessità di fare un costante paragone tra l'evoluzione dell'economia veneta e quella delle altre regioni della Unione Europea; • la possibilità di individuare elementi atti a considerare il comportamento degli agenti economici. Le grandezze prese in esame sono "economiche" in senso lato e comprendono numerosi indicatori con disaggregazione territoriale di diverso livello. 5 3.1 Raccolta ed analisi dei requisiti L'analisi dei requisiti presuppone un adeguato studio preliminare della realtà di interesse e delle sue finalità. Gli aspetti da evidenziare sono: 1. gli obbiettivi del sistema informatico da realizzare; 2. le attività che devono essere supportate dal sistema informatico; 3. le unità organizzative (settori e aree funzionali) che utilizzeranno il sistema informatico; 4. il piano di sviluppo del sistema informatico. Il risultato di questo studio preliminare riguarda pertanto scelte fondamentali relativamente alla realtà di interesse considerata e al suo modo di funzionare, presumibilmente invarianti nel medio termine. Da una prima analisi dei requisiti si sono subito individuati gli strumenti da utilizzare e sui quali impostare il lavoro. L’Università, infatti, ha messo a disposizione del progetto il proprio server Web già installato e funzionante su un sistema Linux con piattaforma Intel. Per questo motivo è stata subito esclusa la tecnica ASP in quanto legata al mondo Microsoft ed al server Web dedicato. La scelta del DBMS è stata diretta verso un prodotto Open Source di libero utilizzo quale è il DataBase PostGreSql, sviluppato dall’Università di Berkeley nel 1985 e perfezionato negli anni fino ad arrivare all’ultima versione, la 6.5.2, dove le caratteristiche sono davvero quelle di un prodotto professionale di alto livello. Il DBMS usato è PostgreSql versione 6.3.2: un altro progetto Open Source dell’University of California, Berkeley. PostgreSQL è un Object-Relational DBMS sofisticato, che supporta pressoché tutti i costrutti SQL, incluse le subselects, le transactions e le funzioni e tipi user-defined. E’ il DataBase open-source più evoluto disponibile. E’ anche disponibile un supporto commerciale dalla PostgreSQL Inc. La versione corrente è la 6.5.2 ed è disponibile in molti siti mirror oppure su CD-ROM. PostgreSQL funziona su piattaforme Solaris, SunOS, HPUX, AIX, Linux, Irix, FreeBSD, e molte altre versioni di Unix. 6 3.1.1 Raggruppamento dei dati, vincoli, operazioni Il progetto globale prevede la realizzazione di alcune basi di dati disgiunte da gestire con lo stesso DBMS. In questo lavoro si presentano solamente la prima base di dati, già realizzata e collaudata, e cenni della seconda. La prima base di dati considerata è stata “IMPORT-EXPORT”: un insieme di tabelle contenenti i valori e le quantità delle importazioni e delle esportazioni di ogni categoria merceologica eseguite dagli operatori economici delle sette province della regione Veneto distinte per stato di origine o destinazione (dati di fonte Istat). La seconda base di dati considerata è stata “CER- Conti Economici Regionali”: un insieme di tabelle contenenti i valori nazionali e della regione Veneto di PIL, consumi, investimenti, redditi, popolazione, risultati di gestione ed altro dall’anno 1980 all’anno 1991 (dati di fonte Istat). Il DataBase comprende circa 10.000 tuple nella tabella principale. La realizzazione prevede il recupero di parte del lavoro svolto nella prima base di dati, specialmente dei sorgenti in codice C++ che implementano l’interfaccia vera e propria. Da un’analisi dei dati disponibili per l’IMPORT-EXPORT è stato dedotto quanto segue: • Registri cartacei esistenti: nessuno • Operazioni effettuate quotidianamente: nessuna • Operazioni effettuate periodicamente: raccolta ed aggiornamento annuale delle tabelle con i valori registrati nell’anno considerato • Utilizzo dei dati: l’interrogazione deve essere flessibile ed eseguibile su tutti i campi delle tabelle, ma limitata per non permettere all’utente di scaricare tutto il DataBase in poche interrogazioni. • Vincoli: è stato richiesto un vincolo di sicurezza riguardante il riconoscimento dell’utente e controllo dell’accesso con registrazione (tracing) delle interrogazioni effettuate. 7 3.1.2 Schema preliminare di settore Concentrando l’attenzione sulle tabelle esistenti, questi erano i dati contenuti per ogni singola riga: • anno di riferimento; • codice a tre cifre della categoria merceologica; • codice a tre cifre dello stato di importazione o esportazione del bene; • codice a 2 cifre della provincia della regione Veneto di residenza dell’importatore o dell’esportatore; • valore dell’importazione o dell’esportazione; • quantità importata o esportata. 3.1.3 Specifica delle operazioni degli utenti Una delle esigenze più importanti del progetto era quella di rendere il più possibile autonomi i responsabili del progetto, sia nella gestione degli utenti che nell’aggiornamento annuale dei dati. Per questo motivo sono state delineate due tipologie di utenti del DataBase: • interrogatore; • gestore. Infatti, la gestione degli utenti non è demandata, come di solito succede, all’amministratore della base di dati, in quanto gli utenti sono elencati in una tabella del DataBase stesso e vengono gestiti da un utente particolare, il gestore utenti, sempre tramite un browser Web. L’utente interrogatore può: • accedere alla tabelle in sola lettura; • modificare il registro degli accessi, senza possibilità di lettura; • modificare il registro di tracing delle interrogazioni svolte, senza poterlo leggere; 8 • accedere alla tabella degli utenti per la sola fase di controllo dell’accesso. Mentre l’utente gestore può: • accedere alla tabella utenti sia in lettura che in scrittura e quindi modificare gli utenti, per aggiungerne o eliminarne; • accedere alla tabella dei log degli accessi e delle queries in sola lettura. 3.1.4 Verifica completezza e consistenza Da una verifica della completezza e consistenza dei dati, è risultato che non era stato definito il numero (ordine di grandezza) dei dati contenuti e di quelli da aggiungere inserendoli annualmente, né la quantità degli accessi e delle interrogazioni previste. Da una precisa richiesta e dalla successiva valutazione sono stati dedotti i dati che seguono: • TIPOLOGIE DI MERCE: circa 250 senza incrementi né decrementi. • ANNI DA CONSIDERARE: dal 1987 al 1997. • STATI: circa 250 senza incrementi né decrementi. • PROVINCE: 7. • VALORI NELLA TABELLA PRINCIPALE: circa 40.000 tuple per ogni anno, da aggiornare. Questi i valori precisi delle tuple riferite ai diversi anni: 1987 26.454 1993 38.210 1988 29.763 1994 40.443 1989 30.847 1995 42.475 1990 31.719 1996 43.872 1991 32.472 1997 44.276 1992 36.538 Per un totale di circa 400.000 tuple da gestire ed interrogare. 9 • MEDIE DEL NUMERO DI ACCESSI e INTERROGAZIONI: da valutare nella fase di test. 3.2 Analisi dei dati I dati sono stati consegnati su supporto ottico CD-ROM, strutturati in file in formato Excel, in tabelle distinte per anno, provincia e stato. Il lavoro principale è stato quello della conversione dei dati per essere inseriti nella base di dati. Per rendere automatica la procedura di riversamento dei dati, sono state scritte in linguaggio Pascal le procedure di formattazione delle tabelle Excel trasformate quindi in frasi SQL standard. Una volta ottenute le frasi in linguaggio SQL da eseguire al prompt del monitor del DataBase, è stata avviata la procedura batch di inserimento delle tuple, durata complessivamente 28 ore. 3.3 Requisiti della base di dati La Base di Dati deve poter gestire la multiutenza, in quanto una interrogazione non si alterna all’altra, ma – anzi - essendo interrogabile tramite Web, è possibile che al DataBase abbiano contemporaneamente accesso moltissimi utenti. Deve anche implementare procedure di sicurezza, riuscendo a controllare gli accessi degli utenti, per permettere alle sole persone autorizzate la gestione delle diverse tabelle della base di dati. Deve infine permettere l'interfacciamento con Internet, perché è espressamente richiesto dei responsabili del progetto. 3.4 Progettazione concettuale Lo scopo dell'analisi concettuale è quello di tradurre il risultato dell'analisi dei requisiti settoriali in una descrizione formale e integrata degli aspetti strutturali e dinamici del sistema informatico studiato. L'attenzione viene posta sul come 10 progettare la base di dati e sull'insieme di operazioni che garantiscano per tutti i settori le funzionalità desiderate. Il risultato è uno schema concettuale in linguaggio formale con costrutti ad alto livello adatti a descrivere in modo naturale ciò che si sta modellando. Il modello utilizzato per il disegno concettuale della base di dati e' il modello ER (Entity-Relationship). Di seguito vengono specificate entità, relazioni e attributi per la base di dati in esame. Figura 3.5-1: Modello E-R ENTITA' Le entità corrispondono a classi di oggetti del mondo reale che hanno proprietà omogenee, comuni ed esistenza autonoma ai fini delle applicazioni di interesse. Un'occorrenza di un'entità è un oggetto della classe che l'entità rappresenta. E) Insieme delle entità: 1. ImpExp; 2. Utenti; 3. Data e Ora; 4. Codici Query. RELAZIONI Le relazioni corrispondono a legami logici o classi di fatti che sono significativi ai fini dell'applicazione di interesse. Una relazione può sussistere fra due o più entità dell'applicazione di interesse. Una occorrenza di relazione e' un oggetto della classe che la relazione rappresenta. R) Insieme delle relazioni: 1. Accessi; 2. LogQueries. 11 ATTRIBUTI Gli attributi descrivono proprietà elementari di entità e relazioni di interesse ai fini dell'applicazione. Sono possibili attributi composti. Le chiavi sono contrassegnate con (C). Per alcuni attributi viene specificata la cardinalità. E.1) Entità ImpExp: • Anno (C); • Provincia (C); • Merce (C); • Stato (C); • QuantitaImport; • ValoreImport; • QuantitaExport; • ValoreExport. E.2) Entità Utenti: • Nome (C); • Cognome (C); • Indirizzo; (1,N) • Cap; (1,N) • Paese; (1,N) • Prov; (1,N) • Stato; (1,N) • Professione; • Tel; (1,N) • Email; (1,N) • Password (C); • DataScad; • Data; • Ora. E.3) Entità Data e Ora: • Data (C); • Ora (C); 12 E.4) Entità Codici Query: • Codice Query (C); • Descrizione query. R.1) Relazione ACCESSI: • Nome (C); • Cognome (C); • Data (C); • Ora (C). R.2) Relazione LOGQUERIES: • Nome (C); • Cognome (C); • Professione; • Data (C); • Ora (C); • Codice Query. NORMALIZZAZIONE DELLO SCHEMA ER Per rendere lo schema ER in prima forma normale, è necessario eliminare la molteplicità di valori assunti da un eventuale attributo nelle entità che lo utilizzano. Per fare ciò, si introduce una nuova entità e la relazione associata che lega a ciascun attributo molteplice i dati relativi ad esso. In questo caso non ci sono normalizzazioni di prima forma normale da eseguire. 3.5 Ristrutturazione dello schema E-R Fra le specifiche non è richiesto più di un e-mail ed un numero telefonico. Analizzando la tabella degli utenti (PASS) si nota che è inutile prevedere più di una o due e-mail e numeri di telefono per ogni utente. Si può così evitare di dover normalizzare lo schema introducendo una tabella per i telefoni ed una per le e-mail, inserendo semplicemente due attributi e-mail e due attributi telefono nella entità PASS 13 degli utenti, che prevedano un minimo di flessibilità nell’informazione conservata. Lo stesso dicasi nel considerare diversi possibili indirizzi per lo stesso utente, in questo modo: E.2) Entità PASS: • Nome (C); • Cognome (C); • Indirizzo; • Cap; • Paese; • Prov; • Stato; • Professione; • Tel1; • Tel2; • Email1; • Email2; • Password (C); • DataScad; • Data; • Ora. Analizzando la tabella ImpExp si nota che l’elevata cardinalità del numero delle tuple in essa contenute produce un elevata occupazione di memoria di massa. Considerando poi la continua aggiunta annuale di dati nella tabella, sarà molto elevata la mole di dati, misurata in bytes, che arriverà a contenere. Questa imponente quantità di dati potrebbe essere ridotta se invece di utilizzare la descrizione completa per merci, stati e province nei rispettivi campi, venisse utilizzato il codice degli stessi. Per esempio per gli stati, invece di utilizzare una codifica di 40 caratteri per codificare lo stato in ogni tupla all’interno della tabella è meglio usare una codifica di 3 caratteri (codice a tre cifre), riducendo a meno di un decimo l’occupazione fisica. Se poi si usassero 3 invece di 55 caratteri per la merce e 14 3 invece di 7 per le province, si arriverebbe ad avere un totale di 9 caratteri invece di 102 per ogni tupla della tabella: davvero un enorme risparmio di memoria di massa. Ecco come si presenteranno le nuove entità e relazioni: Figura 3.6-1: Modello E-R E.2) Entità Nome merce: Nuove entità: 1. ImpExp; 2. Nome merce; 3. Nome stato; 4. Nome provincia; • NomeMerce(C). E.3) Entità Nome stato: • NomeStato(C). Nuove relazioni: 1. Codifica merci; 2. Codifica stati; 3. Codifica province. E.4) Entità Nome provincia: • NomeProvincia(C). R.1) Relazione Codifica merce: E.1) Entità ImpExp: • CodiceMerce (C); • NomeMerce. • Anno (C); • CodiceProvincia (C); • CodiceMerce (C); • CodiceStato (C); • CodiceStato (C); • QuantitaImport; • NomeStato. • ValoreImport; • QuantitaExport; • ValoreExport. R.2) Relazione Codifica stato: R.3) Relazione Codifica provincia: 15 • CodiceProvincia (C); • NomeProvincia. 3.6 Progettazione logica In questa fase di raffinazione fisica della base di dati è da ritoccare la struttura logica delle relazioni fra ImpExp e le tre tabelle Provincia, Merce, Stato. E’ infatti più corretto implementare nella stessa tabella relazioni che logicamente sarebbero separate in due tabelle diverse. Per esempio l’entità NomeMerce con la relazione CodificaMerce, essendo in relazione biunivoca 1 a 1, è meglio metterle nella stessa tabella in questo modo: TABELLA IMPEXP: Anno, CodiceMerce, CodiceStato, CodiceProvincia, (…); TABELLA MERCI: CodiceMerce, NomeMerce; TABELLA STATI: CodiceStato, NomeStato; TABELLA PROVINCE: CodiceProvincia, NomeProvincia. 3.6.1 Creazione della base di dati Finita la progettazione logica e fisica, si passa alla creazione vera e propria del DataBase. Per la creazione della base di dati si passa attraverso una fase manuale ed una automatica. Nella fase manuale si crea la struttura fisica del DataBase, con le tabelle di servizio e le variabili di ambiente che vengono impostate autonomamente. Il codice per eseguire questa fase da linea di comando è: createdb –h helios dbveneto Nella fase automatica si creano, tramite il codice SQL, le tabelle che serviranno ad implementare la gestione del problema da risolvere. Prima di tutto è necessario entrare nel monitor del DataBase, una specie di interfaccia utente che permette di interpretare comandi in linea: 16 psql –h helios dbveneto Nel nostro caso le tabelle da creare sono IMPEXP, PROVINCE, MERCI, STATI, PASS, LOGUSERS, LOGQUERIES. Codice SQL per la creazione della tabella IMPEXP, contenente le transazioni di importazione ed esportazione riferite ad un determinato anno, provincia, merce e stato: CREATE TABLE IMPEXP ( Anno CHAR(4) NOT NULL, CodiceProvincia CHAR(2) NOT NULL, CodiceMerce CHAR(3) NOT NULL, CodiceStato CHAR(3) NOT NULL, QuantitaImport INT4, ValoreImport INT4, QuantitaExport INT4, ValoreExport INT4, PRIMARY KEY (Anno, CodiceProvincia, CodiceMerce, CodiceStato), FOREIGN KEY (CodiceProvincia) REFERENCES PROVINCE, FOREIGN KEY (CodiceMerce) REFERENCES MERCI, FOREIGN KEY (CodiceStato) REFERENCES STATI); Codice SQL per la creazione della tabella PROVINCE, contenente le province della regione Veneto: CREATE TABLE PROVINCE ( CodiceProvincia CHAR(2) UNIQUE NOT NULL, NomeProvincia VARCHAR(7) UNIQUE NOT NULL, PRIMARY KEY (CodiceProvincia)); Codice SQL per la creazione della tabella MERCI, contenente le categorie merceologiche doganali: CREATE TABLE MERCI ( CodiceMerce CHAR(3) UNIQUE NOT NULL, NomeMerce VARCHAR(55) UNIQUE NOT NULL, PRIMARY KEY (CodiceMerce)); Codice SQL per la creazione della tabella STATI, contenente le nazioni oggetto dell’importazione o esportazione: CREATE TABLE STATI ( CodiceStato CHAR(3) UNIQUE NOT NULL, NomeStato VARCHAR(40) UNIQUE NOT NULL, PRIMARY KEY (CodiceStato)); Codice SQL per la creazione della tabella PASS degli utenti, contenente l’anagrafica, la password e la data e ora dell’ultimo accesso al DataBase: CREATE TABLE PASS ( 17 Nome Cognome Indirizzo Cap Paese Prov Stato Professione Tel1 Tel2 Email1 Email2 Password DataScad Data Ora PRIMARY KEY VARCHAR(30) NOT NULL, VARCHAR(30) NOT NULL, VARCHAR(30), VARCHAR(5), VARCHAR(30), VARCHAR(30), VARCHAR(30), VARCHAR(30), VARCHAR(30), VARCHAR(30), VARCHAR(40), VARCHAR(40), CHAR(8) NOT NULL, DATE, DATE, TIME, (Nome,Cognome,Password)); Codice SQL per la creazione della tabella LOGUSERS, che implementa il tracing degli accessi degli utenti al DataBase (o meglio al sito Web): CREATE TABLE LOGUSERS ( Nome VARCHAR(30) NOT NULL, Cognome VARCHAR(30) NOT NULL, Professione VARCHAR(30), Data DATE, Ora TIME, PRIMARY KEY (Nome,Cognome,Data,Ora)); Codice SQL per la creazione della tabella LOGQUERIES, per il tracing delle interrogazioni che gli utenti fanno al DataBase: CREATE TABLE LOGQUERIES ( Nome VARCHAR(30) NOT NULL, Cognome VARCHAR(30) NOT NULL, Professione VARCHAR(30), Data DATE, Ora TIME, Query VARCHAR(200), PRIMARY KEY (Nome,Cognome,Data,Ora)); Finita la fase di creazione del DataBase è possibile iniziare la fase successiva: la popolazione. 3.6.2 Popolazione della base di dati Una volta create le tabelle sopradescritte è possibile iniziare la popolazione della base di dati attraverso un meccanismo automatico di esecuzione batch di frasi SQL che hanno il compito di inserire tuple nelle diverse tabelle del DataBase. 18 Per esempio, per popolare l’intera tabella PROVINCE sono sufficienti 7 righe di codice SQL standard: INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO PROVINCE PROVINCE PROVINCE PROVINCE PROVINCE PROVINCE PROVINCE VALUES VALUES VALUES VALUES VALUES VALUES VALUES ('23','VERONA'); ('24','VICENZA'); ('25','BELLUNO'); ('26','TREVISO'); ('27','VENEZIA'); ('28','PADOVA'); ('29','ROVIGO'); Mentre per popolare la tabella MERCI sono necessarie molte più righe di codice SQL. Qui se ne riportano solo le prime dieci per semplicità: INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI MERCI VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES ('001','FRUMENTO'); ('002','SEGALE, ORZO, AVENA'); ('003','RISO GREGGIO'); ('004','GRANOTURCO'); ('005','ALTRI CEREALI'); ('006','LEGUMI E ORTAGGI FRESCHI'); ('007','LEGUMI E ORTAGGI SECCHI'); ('008','AGRUMI'); ('009','FRUTTA TROPICALE'); ('010','FRUTTA FRESCA'); Lo stesso vale per la tabella STATI, di cui si riportano solo le prime dieci righe di codice necessario per la sua popolazione: INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO STATI STATI STATI STATI STATI STATI STATI STATI STATI STATI VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES ('001','FRANCIA'); ('002','BELGIO E LUSSEMBURGO'); ('003','PAESI BASSI'); ('004','GERMANIA'); ('005','ITALIA'); ('006','REGNO UNITO'); ('007','IRLANDA'); ('008','DANIMARCA'); ('009','GRECIA'); ('010','PORTOGALLO'); Una volta creata e popolata la base di dati, è terminata la fase iniziale ed è possibile iniziare ad eseguire le interrogazioni e la gestione. 3.7 Specifiche tecniche ed implementazione Il DataBase è stato implementato sulla macchina helios.unive.it, locata al Centro di Calcolo dell’Università Ca’ Foscari di Venezia. Un reindirizzamento permette di accedere al sito Web anche tramite l’indirizzo www.unive.it/dbveneto. 19 La piattaforma è un PC assemblato con processore 80686 AMD K6 da 333Mhz, con 256MB di memoria RAM e tre dischi fissi in tecnologia Ultra Wide SCSI-2 da 18 GB ognuno. Il SO è Linux, il progetto Open Source iniziato da Linus Towald negli anni ottanta ed ancora diretto da lui, ma sviluppato da migliaia di appassionati programmatori. La distribuzione è la Red Had versione 6.0 ed il Kernel del sistema è la versione 2.2.10. Come server Web è stato utilizzato Apache Web Server, lo stesso che gestisce anche tutte le altre pagine Web dell’Università. Il DBMS usato è PostgreSql versione 6.3.2: un altro progetto Open Source dell’University of California, Berkeley. PostgreSQL è un Object-Relational DBMS sofisticato, che supporta pressoché tutti i costrutti SQL, incluse le subselects, le transactions e le funzioni e tipi user-defined. E’ il DataBase open-source più evoluto disponibile. E’ anche disponibile un supporto commerciale dalla PostgreSQL Inc. La versione corrente è la 6.5.3 ed è disponibile in molti siti mirror oppure su CD-ROM. PostgreSQL funziona su piattaforme Solaris, SunOS, HPUX, AIX, Linux, Irix, FreeBSD, e molte altre versioni di Unix. 3.8 Validazione, controllo, funzionamento Il momento più importante del progetto è consistito nelle prove di funzionamento e collaudo dell’intero sistema. Il fulcro dei test sono state le interrogazioni al DBMS effettuate tramite Internet per mezzo di diversi browser funzionanti su calcolatori collegati in rete. Un primo problema è stata la carenza di strumenti di debugging dei sorgenti in linguaggio C, per correggere gli errori intrinseci delle applicazioni di interfaccia sviluppate. Infatti, gli errori che si verificavano durante l’esecuzione del programma gateway fra server Web e DBMS, non venivano segnalati e diversificati, ma risultavano tutti nello stesso messaggio: “Internal Server Error”, rendendo difficile risalire alla causa all’interno del programma e quindi alla stesura del codice. 20 Questo problema è stato risolto eseguendo il programma da linea di comando di una shell del sistema Unix, inserendo di volta in volta nello standard input i valori che gli sarebbero stati passati compresi nell’URL o separatamente, a seconda del metodo GET o POST rispettivamente, con il quale venivano richiamati dal client. Un altro problema ricorrente è stata l’operazione di chiusura e rilascio della memoria assegnata all’applicazione CGI, dedicata volta per volta ai dati restituiti da operazioni sul DBMS. Se questa memoria non veniva disallocata e reinizializzata ogni volta che si operava sul DataBase tramite il CGI, inspiegabilmente il programma non si atteneva ai risultati aspettati, disorientando durante il debug dei sorgenti ed allungando i tempi di realizzazione. Un errore grossolano fatto durante la progettazione è stato quello di considerare i valori di importazione o esportazione nella tabella principale [vedi par. 3.6.1] dei semplici INT4, cioè interi di 4 byte (4,3*109 valori). Durante interrogazioni con aggregazioni, infatti, i risultati venivano presentati in attributi dello stesso tipo degli attributi originari disaggregati. Ma mentre 4 byte erano più che sufficienti per rappresentare i valori semplici nella tabella, non lo erano per rappresentare le loro aggregazioni o sommatorie. Questo problema è stato risolto ridefinendo la precisione delle variabili di presentazione dei risultati, assegnando il valore aggregato ad una variabile INT8 (1,8*1019 valori). Per ultimo, un problema legato alla gestione degli utilizzatori del sito Web. Questi vengono riconosciuti all’atto dell’ingresso nel sito, non nell’ingresso alla pagina iniziale, ma solo nella parte riguardante le interrogazioni vere e proprie. Una delle esigenze del progetto era quella di poter monitorare l’utilizzo del sistema, misurando il tempo che ogni utente rimaneva ad interrogare il DBMS. Una soluzione era di memorizzare la differenza fra il momento dell’ultima interrogazione eseguita ed il momento della prima, ottenendo il tempo netto di utilizzo del DBMS. Il problema era come definire quale fosse la prima e quale l’ultima interrogazione. Infatti una sessione può essere composta da diverse fasi di lavoro, alcune più intense altre meno, intervallate più o meno nel tempo. Era difficile definire un tempo, passato il quale veniva considerata una diversa sessione di lavoro. La soluzione adottata è stata quella di dare all’utilizzatore, una volta superata la fase di “login”, un tempo T fissato dal momento dell’ingresso per poter eseguire diverse 21 interrogazioni. In questo modo si può conoscere quante sessioni, di T secondi ciascuna, ha utilizzato l’utente e quindi quanto è rimasto “collegato” al DBMS. E’ chiaro che più alto è T, minore è la definizione della misura; più basso è T, maggiore è il disagio dell’utente nel doversi ricollegare dalla fase di “login” iniziale. T è stato fissato in 60 minuti. Attualmente, il sistema non presenta problemi e la sua efficienza è stata testata sotto tutte le condizioni di funzionamento (basso e alto carico di interrogazioni), con bassi tempi di risposta, ottimi tempi di scaricamento delle pagine dinamiche ed eccellenti risultati sia nelle interrogazioni semplici che in quelle complesse. 22 4 . RE ALI Z ZA ZI O NE DEL L ’I NT ER F AC CI A Nella realizzazione del sistema che permette di interrogare il DBMS attraverso pagine Web si è cercato di curare al meglio l’interfaccia utente, che è l’unica interazione tra l’utilizzatore e il DBMS. La pagina iniziale che appare nel navigatore all’atto della connessione al sito Web http://www.unive.it/dbveneto ha questa forma: Figura 4-1: Pagina Web iniziale del sito del progetto. 23 A parte le diverse pagine descrittive del progetto e dei dati in esso contenuti, la parte del sito più interessante è quella riguardante l’interrogazione della base di dati. All’apertura di questa pagina si entra nell’applicazione di controllo dell’accesso. La figura seguente mostra la fase di riconoscimento dell’utilizzatore: Figura 4-2: Riconoscimento dell’utente. Una volta inseriti i tre dati “Nome”, “Cognome” e “Password” si ritiene unico il riconoscimento dell’utente. Infatti possono esistere due utenti con lo stesso nome e cognome, ma non con la stessa password. Passata la fase di riconoscimento, l’utilizzatore viene avvisato di quanto tempo ha a disposizione per eseguire l'interrogazione [Fig.4-3]. Come introdotto nel par.3.8, il limite di tempo oltre il quale deve essere eseguita di nuovo la fase di login è di 60 minuti, sufficienti per eseguire una ventina di interrogazioni. 24 Figura 4-3 A questo punto l’utente entra nell’interfaccia vera e propria composta di due procedure: la prima riguardante la fase di composizione della frase di interrogazione e la seconda che serve per la restituzione dei risultati. In realtà ci sono due interfacce utente, cioè due diverse pagine disponibili per la formulazione della frase di interrogazione: una per avere un output sequenziale, ad una dimensione e continuo, ed un’altra per avere dei risultati in due dimensioni, in forma tabellare, con valori distribuiti sui due assi. Nella Fig. 4-4 è rappresentata la fase di formulazione della frase con uscita a due dimensioni. Nelle quattro variabili - l’anno, lo stato, la provincia e la merce - si possono scegliere valori singoli oppure più valori sempre all’interno della stessa variabile. In quest’ultimo caso il programma applicherà l’operatore OR fra le diverse province, ad esempio, scelte fra quelle disponibili. L’operatore applicato, invece, fra le diverse variabili è l’AND. Nella Fig. 4-4 si nota la possibilità di decidere quali variabili associare agli assi con cui lavorare, come anche quale valore restituire all’incrocio dei valori sugli assi. Il modulo permette di scegliere quale valore assegnare all’asse x e quale all’asse y, aggregando gli altri valori fra loro. 25 Figura 4-4 26 La Fig. 4-5 presenta la pagina in uscita, in forma tabellare a due dimensioni, con i valori richiesti nella interrogazione, riportata all’inizio della pagina stessa per comodità di lavoro e riferimento. Figura 4-5 27 Tutte le pagine dell’interfaccia sono semplici e senza troppe parole, ma sono altrettanto efficaci e funzionali. Seppur intuitive, il sito contiene anche le istruzioni per l’utilizzo delle pagine. Il funzionamento è efficiente e l’interrogazione veloce. La semplicità apparente di questo sito Web contenente l’applicazione sviluppata non mostra all’esterno alcun segno della complessità del meccanismo retrostante: una potente interfaccia di interazione fra il browser client ed il DBMS server. 28 INDICE 1. INTRODUZIONE ............................................................................................................................ 1 2. L’INTERFACCIA TRA WEB E DBMS ........................................................................................ 3 3. APPLICAZIONE DI PROGETTO: DBVENETO ONLINE ....................................................... 5 3.1 RACCOLTA ED ANALISI DEI REQUISITI........................................................................................... 6 3.1.1 Raggruppamento dei dati, vincoli, operazioni ..................................................................... 7 3.1.2 Schema preliminare di settore.............................................................................................. 8 3.1.3 Specifica delle operazioni degli utenti ................................................................................. 8 3.1.4 Verifica completezza e consistenza ...................................................................................... 9 3.2 ANALISI DEI DATI........................................................................................................................ 10 3.3 REQUISITI DELLA BASE DI DATI................................................................................................... 10 3.4 PROGETTAZIONE CONCETTUALE ................................................................................................. 10 3.5 RISTRUTTURAZIONE DELLO SCHEMA E-R ................................................................................... 13 3.6 PROGETTAZIONE LOGICA ............................................................................................................ 16 3.6.1 Creazione della base di dati............................................................................................... 16 3.6.2 Popolazione della base di dati ........................................................................................... 18 3.7 SPECIFICHE TECNICHE ED IMPLEMENTAZIONE ............................................................................ 19 3.8 VALIDAZIONE, CONTROLLO, FUNZIONAMENTO .......................................................................... 20 4. REALIZZAZIONE DELL’INTERFACCIA ............................................................................... 23 29