A.S. 2002/2003 - SECONDA PROVA - ISTRUZIONE TECNICA M070 - ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE Indirizzo: INFORMATICA progetto "Abacus" Tema di: INFORMATICA GENERALE E APPLICAZIONI TECNICO-SCIENTIFICHE Un vivaio vuole realizzare una base di dati per gestire le sue attività di vendita di piante e le sue attività esterne. Si vogliono memorizzare, oltre alle informazioni generali sulle diverse specie di piante, anche quelle relative alle specifiche piante presenti nel vivaio. Di ogni specie deve essere registrato il nome, un'immagine, una breve descrizione, informazioni relative al modo di coltivazione e alle caratteristiche dell'esposizione ed infine se si tratta di pianta da interno o da esterno. Si vogliono inoltre registrare i dati relativi alle piante effettivamente presenti nel vivaio, raggruppate per specie, eventualmente suddivise in diversi tipi in base al prezzo di vendita. Per ogni specie (o per ogni tipo, se la specie è suddivisa in tipi), è necessario registrare il numero di esemplari presenti nel vivaio e il costo di ogni esemplare. Si vogliono inoltre gestire le informazioni relative al personale che lavora nel vivaio (agronomi, operai, amministrativi) registrando i dati anagrafici, la qualifica e, per gli agronomi, l'anno di assunzione nel vivaio. Ogni singola specie del vivaio è sotto la responsabilità di un agronomo. Le attività esterne del vivaio, quali ad esempio la potatura o la manutenzione dei giardini, sono svolte dal personale in base alla qualifica (in generale ogni lavoratore è in grado di svolgere più di un'attività) e sono caratterizzate da un codice, da un nome, da un costo orario. Per le attività esterne si vogliono mantenere tutte le informazioni relative ai clienti che richiedono le attività, in particolare se si tratta di privati o di aziende, la data di prenotazione e quella di effettuazione dell'intervento richiesto e se per l'intervento sono necessarie piante del vivaio. Il candidato consideri la situazione sopra descritta, precisi eventuali ipotesi aggiuntive e realizzi: • un'analisi della realtà di riferimento che illustri le premesse per i successivi passi della progettazione della base di dati; • uno schema concettuale della base di dati; • uno schema logico della base di dati; • la definizione delle relazioni della base di dati in linguaggio SQL; • le seguenti interrogazioni espresse in linguaggio SQL: 1. dato il nome di una pianta, riportare quanti esemplari di quella pianta sono presenti nel vivaio; 2. dato il nome di una stagione, visualizzare il nome delle piante che fioriscono in quella stagione; 3. dato il nome di un intervento esterno, tra quelli previsti dal vivaio, riportare il nome e il telefono dei soggetti che hanno richiesto quell'intervento nel corso di un determinato anno solare; 4. dato il nome di un agronomo, riportare quanti esemplari di piante sono sotto la sua responsabilità; 5. visualizzare nome, descrizione e quantità di esemplari presenti nel vivaio, della pianta più economica da interno; 6. riportare nome degli interventi richiesti non ancora evasi con il nome e il telefono del richiedente. Il candidato sviluppi inoltre, a scelta uno dei seguenti moduli: • Si vuole realizzare un sito Internet che presenti al pubblico il vivaio illustrandone i prodotti e le diverse attività. • Si vuole consentire la gestione delle attività esterne del vivaio attraverso una prenotazione on-line da parte dei clienti. Illustrare le modalità di realizzazione di questa funzione e gli strumenti tecnici adottabili. Durata massima della prova: 6 ore. È consentito soltanto l'uso di manuali tecnici e di calcolatrici tascabili non programmabili. Non è consentito lasciare l'Istituto prima che siano trascorse 3 ore dalla dettatura del tema. PREMESSA In botanica le specie delle piante vengono indicate con due nomi (classificazione binomia): il primo è un sostantivo che indica il genere e il secondo è un sostantivo o un aggettivo che indica la specie vera e propria. Ad esempio: Rosa Canina, Fagus sylvatica, Veronica Allionii, ... Le sottospecie, le varietà e le forme (quelli che nella traccia della prova scritta sono i tipi diversi) sono indicati con sostantivi e/o aggettivi, come ad esempio: Saxifraga exarata var. moschata, Anemone Hepatica var. machranta major, ... ANALISI a) Visione di insieme e carico di lavoro Assunto quanto sopra esposto nei riguardi del concetto di specie in botanica, la prova d'esame riguarda la realizzazione di una applicazione basata sui dati di un vivaio, nel quale sono in essere attività di vendita di piante e attività esterne di varia natura. I dati riferiti al contesto di lavoro in questione sono riferiti: - alle specie di piante in generale - alle specie di piante con eventuali tipi indicati presenti all'interno del vivaio - alle attività esterne che il vivaio offre ai clienti - alle attività di vendita delle piante - ai clienti (anagrafica) del vivaio b) Descrizione del contesto del sistema L'applicazione informatica che si deve occupare della gestione del vivaio si suppone sia una applicazione ex-novo, utilizzata da una segretaria del vivaio, ad esempio (personale amministrativo). c) Ipotesi aggiuntive Si considerano le piante del vivaio classificate con l'indicazione della specie di appartenenza e del tipo (con l'intesa che ad una specie possono corrispondere o nessuno, o uno o più tipi). Si è pensato, nei riguardi del personale del vivaio, di considerare all'interno dello stesso contesto, appunto il PERSONALE, anche gli agronomi, nonostante il fatto che per questi dipendenti del vivaio sia obbligatorio indicare la data di assunzione. Si è pensato di indicare all'interno della base di dati sia le specie di piante che i tipi all'interno delle specie. Un intervento non evaso ha il campo data_effett uguale a NULL. d) Vincoli Il dato riferito alla data di assunzione deve essere specificato solo per gli agronomi. I clienti si dividono in due categorie, privati e aziende. Le due categorie sono rappresentate da due valori ben precisi di un campo dell'entità CLIENTE (tipo_cliente). e) Approfondimenti Vedi punto c) f) Scelte implementative I dati in ingresso dell'applicazione sono: - dati delle specie di piante - dati delle piante effettivamente presenti nel vivaio - dati del personale - dati sulle attività esterne del vivaio - dati sui clienti (anagrafica, in effetti). g) Strumenti Hardware e software Si ipotizza di utilizzare: - SQL per le interrogazioni (come indicato esplicitamente nella traccia) e per la progettazione logica del database per l'indicazione delle relazioni tra le entità - modello E/R per la progettazione concettuale - modello relazionale per la progettazione del database - html per la progettazione del sito - codice ASP per la parte di programmazione lato server (ultimo punto della traccia). Dall'analisi della traccia del tema d'esame si evince che la soluzione si basa sulle seguenti entità: SPECIE_PIANTA per indicare i dati sulla specie della pianta PIANTA_VIVAIO per indicare i dati delle piante effettivamente presenti nel vivaio PERSONALE per indicare i dati riferiti al personale del vivaio, con l'indicazione precisa di un campo anno_assunzione non nullo solo per gli agronomi ATTIVITA_ESTERNA per i dati riferiti alle attività esterne che il vivaio offre ai suoi clienti CLIENTE per l'anagrafica dei clienti del vivaio. Si suppone, come indicato nel testo della traccia, che ogni dipendente sappia effettuare più di una attività all'interno del vivaio, e quindi una attività esterna può essere effettuata da più di un dipendente. Per comprendere in che cosa consiste la descrizione di una attività esterna effettuata come intervento presso un cliente, si consideri il seguente esempio: si supponga che il cliente Overmach spa abbia richiesto in data 14/04/2003 al vivaio in questione un intervento di sistemazione di 4 pioppi presenti all'interno dell'area cortilizia dell'azienda. Il vivaio attraverso l'attività di segreteria organizza e manda 3 tecnici (operai) in data 18/04/2003 per effettuare l'intervento richiesto, che la segreteria del vivaio valuta essere composto dalle attività di potatura, concimazione, eliminazione di una delle 4 piante troppo vecchia. La situazione è così sintetizzata: - Nome operai per l'intervento: Rossi, Verdi, Gialli - Nome delle attività: potatura, (costo orario 15 euro), eliminazione pianta (costo orario 20 euro) - Data effettuazione intervento: 18/04/2003 - Nome cliente: Overmach spa - Piante del vivaio utilizzate: nessuna Pare evidente che un intervento effettivamente svolto dal vivaio per essere codificato necessita di una serie di informazioni eterogenee che quindi non possono appartenere alla medesima entità: sono presenti informazioni sul cliente, sui dipendenti e sulle attività esterne che il vivaio è in grado di fornire. Un primo schema di massima è il seguente: PIANTA VIVAIO SPECIE PIANTA DIPENDENTE CLIENTE ATTIVITA ESTERNA nel quale si evidenziano, in prima istanza, quali sono le entità che descrivono il caso di studio, senza specificare con precisione quali siano le relazioni e le associazioni tra le entità medesime. Si evince immediatamente che le entità individuate e i collegamenti che intercorrono tra le stesse non sono sufficienti a questo livello per descrivere completamente l'attività del vivaio così come è indicata nella traccia. Dal testo del problema si ottiene che i dati sono legati dalle seguenti relazioni: - tra l'entità SPECIE_PIANTA e l'entità PIANTA_VIVAIO vi è una relazione 1:N (ad una specie possono corrispondere una o più piante del vivaio, ad una pianta del vivaio corrisponde una specie) - tra l'entità PIANTA_VIVAIO e DIPENDENTE intercorre una relazione N:1 (un dipendente agronomo possono corrispondere più specie del vivaio, fissata una specie questa è riferita ad un agronomo ben preciso, che è un dipendente del vivaio). - tra l'entità DIPENDENTE e l'entità ATTIVITA_ESTERNA c'è una relazione N:M (un dipendente può occuparsi di molte attività esterne, una attività esterna può essere effettuata da più dipendenti) - tra l'entità CLIENTE e l'entità ATTIVITA_ESTERNA intercorre una relazione N:M (un cliente può richiedere e ottenere più attività esterne, una attività esterna può essere riferita a più clienti). Per indicare queste relazioni di tipo "molti a molti" si determina una associazione denominata INTERVENTO che contiene i campi chiave primaria di DIPENDENTE, di ATTIVITA_ESTERNA e di CLIENTE, oltre che i campi specifici che sono riferiti all'intervento vero e proprio (data di prenotazione, data effettiva di intervento, se sono utilizzate piante del vivaio oppure no). Lo schema E/R e le relazioni che intercorrono tra i dati circolanti all'interno della realtà di studio è il seguente: SPECIE PIANTA PIANTA VIVAIO DIPENDENTE CLIENTE INTERVENTO ATTIVITA ESTERNA Volendo, infine, rappresentare la situazione degli agronomi i quali hanno un ruolo diverso tra i dipendenti del vivaio per quanto concerne la loro responsabilità sulle specie di piante del vivaio ("Ogni singola specie del vivaio è sotto la responsabilità di un agronomo) lo schema E/R diventa il seguente: ATTIVITA ESTERNA INTERVENTO CLIENTE DIPENDENTE IS A AGRONOMO PIANTA VIVAIO Questa NON E' una relazione, ma è un modo per rappresentare il fatto che l'agronomo è un dipendente particolare, ovvero gli agronomi sono un sottoinsieme di tutti i dipendenti. Nelle query questo si traduce in una clausola WHERE o AND della istruzione SELECT che fa uso del campo qualifica dell'entità DIPENDENTE che deve essere uguale ad 'agronomo'. SPECIE PIANTA Le entità presenti nello schema sono descritte nel seguente modo (sottolineato il campo chiave primaria, in corsivo il campo chiave esterna): SPECIE_PIANTA (nome_specie, immagine, descrizione, modo_coltivaz, esposizione, collocazione, stagione_fioritura) Dove: - nome_specie è chiave primaria ed è una stringa composta sempre da due nomi - immagine è il campo contenente il percorso per raggiungere un'immagine della specie di pianta - descrizione è il dato per rappresentare una breve descrizione della pianta - modo_coltivazione contiene informazioni sul modo di coltivazione della specie - esposizione riguarda le modalità di esposizione della pianta - collocazione serve per rappresentare i due dati "da interno" e "da esterno" - stagione_fioritura con ovvio significato PIANTA_VIVAIO (codice, specie, tipo, prezzo_vendita, numero_esemplari, costo, codice_agronomo) Dove: - codice è la chiave primaria - specie è la chiave esterna riferita alla specie nell'entità SPECIE - tipo è un'ulteriore classificazione della pianta - codice agronomo è chiave esterna verso l'entità DIPENDENTE gli altri campi hanno ovvio significato. DIPENDENTE (codice, cognome, nome, qualifica, anno_assunz.) Dove i campi sono propri di un'anagrafica e il campo anno_assunz assume valori non nulli solo per gli agronomi del vivaio. CLIENTE(codice, cognome, nome, indirizzo, citta, telefono, tipo_cliente) Con ovvi significati dei campi ATTIVITA_ESTERNA (codice, descrizione, costo_ora) Con ovvio significato dei campi INTERVENTO (codice_att, cod_dip, cod_cliente, data_prenotaz, data_effett, piante_vivaio) Dove: - la chiave primaria dell'entità è composta ed è indicata dai campi in grassetto - codice_att è chiave esterna verso ATTIVITA_ESTERNA - cod_dip è il campo chiave esterna verso l'entità DIPENDENTE - cod_cliente è campo chiave esterna verso CLIENTE - data_prenotaz e data_effett sono le date rispettivamente di prenotazione e di effettivo intervento - piante_vivaio è un campo che contiene i valori 'SI' oppure 'NO' a seconda che siano state utilizzate piante del vivaio durante l'intervento esterno. ATTIVITA_ESTERNA(codice, desrizione, costo_ora) Con ovvio significato dei campi. Vincoli di integrità I vincoli di integrità impliciti sono tutte le chiavi primarie individuate e tutte le chiavi esterne individuate. Vincoli di integrità espliciti sono, ad esempio, il valore NULL nel campo data_assunz. della entità DIPENDENTE per tutti i dipendenti tranne che per gli agronomi. Regole di lettura Una specie di pianta può riferirsi a una o più specie di piante del vivaio, differenti tra loro per il tipo. Una pianta del vivaio appartiene certamente a una specie. Ogni pianta del vivaio è riferita ad un agronomo, poichè ogni specie del vivaio è riferita ad un agronomo. Ogni agronomo può essere il responsabile di una o più specie del vivaio e di conseguenza di una o più piante del vivaio. Ogni cliente può richiedere una o più attività esterne al vivaio. Ogni attività esterna può essere richiesta da uno o più clienti. Un dipendente può effettuare una o più attività esterne, una attività esterna può essere effettuata da uno o più dipendenti. Modello logico e relazioni in SQL. Lo schema logico della base di dati comprende le tabelle (i loro nomi sono quelli delle entità al plurale: SPECIE_PIANTE, PIANTE_VIVAIO, DIPENDENTI, ATTIVITA_ESTERNE, CLIENTI. Si deve tenere conto che l'agronomo è un caso particolare di dipendente. In SQL la definizione delle tabelle e quindi delle relazioni che intercorrono tra le rispettive entità. Si ricorda che i nomi delle tabelle da indicare nelle CREATE TABLE devono essere i rispettivi plurali delle entità. CREATE TABLE SPECIE_PIANTE { NOME_SPECIE CHAR(25), IMMAGINE CHAR(30), DESCRIZIONE CHAR(50), MODO_COLTIVAZIONE CHAR (50), ESPOSIZIONE CHAR (10), COLLOCAZIONE CHAR (20), STAGIONE_FIORIT CHAR(15), PRIMARY KEY NOME_SPECIE }; CRETE TABLE PIANTE_VIVAIO { CODICE CHAR (5), SPECIE CHAR CHAR(25), TIPO CHAR (15), PREZZO_VENDITA NUMERIC (3,2) NOT NULL, NUMERO_ESEMPLARI INTEGER, COSTO NUMERIC(3,2), CODICE_AGRONOMO CHAR(5), FOREIGN KEY (SPECIE) REFERENCES SPECIE_PIANTA (NOME_SPECIE) FOREIGN KEY (CODICE_AGRONOMO) REFERENCES DIPENDENTI (CODICE) } [...] QUERY 1) Dato il nome di una pianta, riportare quanti esemplari di quella pianta sono presenti nel vivaio SELECT SUM(NUMERO_ESEMPLARI) AS TOTALE_ESEMPLARI FROM PIANTE_VIVAIO,SPECIE_PIANTA WHERE SPECIE=NOME_SPECIE AND SPECIE=[nome_pianta]; 2) Dato il nome di una stagione, visualizzare il nome delle piante che fioriscono in quella stagione SELECT NOME_SPECIE FROM SPECIE_PIANTE WHERE STAGIONE_FIORIT = [stagione]; 3) Dato il nome di un intervento esterno, tra quelli previsti dal vivaio, riportare il nome e il telefono dei soggetti che hanno richiesto quell'intervento nel corso di un determinato anno solare. SELECT COGNOME, NOME, TELEFONO FROM CLIENTI, INTERVENTO, ATTIVITA_ESTERNA WHERE CODICE=COD_CLI AND DATA_PRENOTAZ BETWEEN '01/01/03' AND '31/12/03' AND DESCRIZIONE = [intervento]; 4) Dato il nome di un agronomo, riportare quanti esemplari di piante sono sotto la sua responsabilità. Per prima cosa selezioniamo dal database tutti gli esemplari del vivaio che sono sotto la responsabilità di un agronomo particolare, poi contiamo quanti record ha la tabella così generata. CREATE VIEW PIANTE_AGRONOMO AS SELECT SPECIE, TIPO FROM PIANTE_VIVAIO, DIPENDENTI WHERE CODICE_AGRONOMO=CODICE AND COGNOME=[cognome]; SELECT COUNT (*) AS NUMERO_PIANTE FROM PIANTE_AGRONOMO 5) Visualizzare nome, descrizione e quantità di esemplari presenti nel vivaio, della pianta più economica da interno SELECT SPECIE, TIPO, NUM FROM PIANTA_VIVAIO, SPECIE_PIANTA WHERE SPECE=NOME_SPECIE AND COLLOCAZ='interno' AND COSTO=(SELECT MIN (COSTO) FROM PIANTA_VIVAIO) 6) Riportare il nome degli interventi richiesti non ancora evasi con il nome e il telefono del richiedente. SELECT DESCRIZIONE, COGNOME, NOME, TELEFONO FROM ATTIVITA_ESTERNA, CLIENTE, INTERVENTO WHERE DATA_EFFETT=NULL AND COD_CLIE=CODICE SITO Si pensa di risolvere il punto "Si vuole realizzare un sito Internet che presenti al pubblico il vivaio illustrandone i prodotti e le diverse attività". Si ipotizza di utilizzare: - HTML per la costruzione delle pagine del sito - ASP per la parte di programmazione lato server del sito - un server web del tipo IIS - Internet Explorer per i client di rete Per fornire lo schema del sito si deve pensare ad uno schema come quello che si dovrebbe costruire per un ipertesto: i rettangoli rappresentano le pagine del sito, i collegamenti tra i rettangoli sono i link tra le pagine del sito. Lascio al lettore la soluzione di questa parte. La parte dinamica del sito è quella che opera l'accesso al database delle immagini delle specie di piante presenti all'interno del vivaio: l'accesso remoto al database ha come risultato, a seconda della richiesta del cliente, la visualizzazione lato client di una scheda per ogni specie contenente i dati riferiti alla esposizione, alla stagione di fioritura, etc. Lo schema di questa parte del sito è il seguente: FORM di immissione richiesta specie Pag. HTML con la scheda della specie presente nel vivaio Pagina ASP sul server che processa i l nome della specie ricevuto dal form Tabella dati PIANTE VIVAIO DATABASE SERVER CLIENT A questo punto si decide di implementare con tecnologia ASP la parte di ricerca on-line delle specie delle piante presenti nel vivaio. L'accesso remoto è al database della prova scritta e in particolare alle tabelle PIANTE_VIVAIO E SPECIE. I file sono richiedi_catalogo.htm e richiedi_pianta.asp