Relazione gestione vivaio - Anelli Alessandro - Classe V sez. A Mercurio – Anno scolastico 2010-2011
Istituto Tecnico Economico “ Agostino Bassi” – Succursale Via Giovanni XXIII – 26900 Lodi
Relazione gestione vivaio
Traccia Del Problema
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.
MODELLO ER
Lo schema ER deve seguire le seguenti regole:
CLIENTI
- L’attributo Codicecliente della tabella clienti, memorizza il codice del cliente in 5 caratteri alfanumerici, con valori da "00001" a "99999".
- L’attributo Nome della tabella Clienti, memorizza il nome del cliente in 15 caratteri alfanumerici.
- L’attributo Cognome della tabella Clienti, memorizza il Cognome del cliente in 15 caratteri alfanumerici.
- L’attributo Tipo della tabella Clienti, può assumere solo i valori “Privato” o “Azienda” massimo 15 caratteri alfanumerici.
- L’attributo Residenza della tabella Clienti, memorizza la residenza del cliente in 15 caratteri alfanumerici.
- L’attributo Telefono della tabella Clienti, memorizza il numero di telefono del cliente in 15 caratteri alfanumerici.
ATTIVITA’






PERSONALE







SPECIE




PIANTE








SCHEMA LOGICO RELAZIONALE
Come si può notare leggendo il codice SQL, per tutte le tabelle create è stato definito il motore di memorizzazione InnoDB, il quale garantisce il rispetto del vincolo di integrità referenziale. Ciò significa che qualunque dato rappresentante una chiave esterna all'interno di una tabella, per poter esistere, deve necessariamente essere presente anche all'interno della tabella principale a cui la chiave esterna stessa si riferisce; diversamente, infatti, il dato non potrebbe essere definito.
Relativamente alle chiavi esterne, per ognuna di esse sono state mpostate le opzioni ON UPDATE CASCADE e ON DELETE CASCADE. In questo modo, dunque, in caso di modifica o di cancellazione di chiavi primarie a cui si riferiscono una o più chiavi esterne, si ha l'automatica modifica (o l'automatica cancellazione) di tutte le chiavi esterne stesse all'interno delle varie tabelle.
Lo schema logico relazionale rispetta le forme normali ed è soggetto a questi vincoli di integrità referenziale:





Analisi Di Massima
Il programma deve consentire la gestione di un intero database nel quale vengono raccolti i dati delle piante, suddivise in specie e gestite da un solo membro del personale. Il personale specializzato, i clienti che richiedono attività esterne e i membri del personale che svolgono tali attività.
Analisi Dettaglio
L’inserimento dei dati nelle tabelle del database creato
La “popolazione” delle tabelle avviene tramite una pagina html contenente un modulo form dati, che una volta compilato viene inviato ad una pagina dinamica scritta in linguaggio Php che elabora i dati ed effettua l’inserimento/aggiornamento/cancellazione/ e ricerca (queries) dei record all’interno delle tabelle del database.
Tecnicamente, l’operazione prevede il passaggio del contenuto dei campi compilati del modulo Form della pagina html (pagina statica), ad una pagina dinamica tramite il vettore (Array) $POST in Php, memorizzato sul Server Web (software) sul Server (hardware).
Le variabili, nel linguaggio Php, vengono “attivate” aggiungendo all'inizio del nome il simbolo "$".
Nel programma scritto in linguaggio php che permette la popolazione del database, avviene innanzitutto la connessione a mysql tramite l’istruzione Sql Mysql_connect.
L’intera sintassi è : Mysql_connect(“localhost”,”root”) dove Localhost è l’indirizzo letterale corrispondente all’ip numerico 127.0.0.1, ovvero all’indirizzo della macchina locale sulla quale è presente sia il Server Client (Browser) che il Server Web. Tramite la pagina statica contenente il modulo form, si invia grazie al Server Client la query o le queries al Server Web. Se il Server Web si accorge che all’interno del codice sono presenti istruzioni in linguaggio PHP, il Server Web affida la procedura di traduzione all’interprete PHP che si occupa di trasformare il linguaggio php in linguaggio macchina. Se, una volta tradotto, l’interprete si accorge che le istruzioni hanno come finalità l’interrogazione di un database MYSQL, invia la query al Server Mysql che effettua tale o tali interrogazioni e successivamente, il Server Mysql invia nuovamente i dati ottenuti, frutto dell’elaborazione della query, all’interprete PHP.
L’interprete, eseguite le istruzioni fornitegli dal Server Web, fornisce il risultato in linguaggio html che viene restituito al Server Web e successivamente visualizzato grazie al client.
Una volta effettuato il collegamento al database, si inseriscono i valori ricevuti dalla pagina statica e trasferiti grazie al vettore (Array) $POST in Php, tramite la seguente istruzione mysql salvata in un’apposita variabile, comunemente denominata $sqlinterr:
insert nometabella (nomeattrib1, nomeattrib2, nomeattrib3) values (‘variabile1,variabile2,variabile3)
L’istruzione sql successiva, salvata in una nuova variabile denominata $res, permette di interrogare il database con la query creata e memorizzata nelal variabile $sqlinterr:
mysql_db_query(“nome database”,$sqlinterr)
Come successivo passaggio, viene inizializzata la variabile $num contenente l’istruzione sql che restituisce il numero dei record ottenuti grazie all’esecuzione della query:
mysql_affected_rows()
Il passaggio finale è la creazione di un ciclo if, che permette di verificare se i dati sono stati correttamente inseriti nel database:
If($num>0)
Il ciclo If è un ciclo condizione-evento per un massimo di una condizione e di due eventi, ovvero se si verifica la condizione impostata, si potrà assegnare un comando per quel tipo di condizione. Se la condizione impostata non si verifica verrà eseguito un diverso comando. In questo caso, faremo visualizzare due messaggi a video:
Il primo, se si verifica la condizione:
echo “ Un nuovo record è stato inserito”;
Il secondo, se l’operazione non è andata a buon fine. “Else” si utilizza per collegare i due eventi:
else echo “Il record non è stato inserito, riprovare”.
Se a video verrà visualizzata la prima stringa, saremo sicuri che l’operazione sarà andata a buon fine.
File Utilizzati
Per l'inserimento, sono stati utilizzati i seguenti file, collegati ai rispettivi programmi.
piante.php ----à inspiante.php
specie.php ----à insspecie.php
attivitasvolta.php ----à insattivitasvolta.php
clienti.html ----à insclienti.php
personale.html ----à inspersonale.php
Per le queries sono stati utilizzati i seguenti file, collegati ai rispettivi programmi.
1.php
2.php
3.php
4.php
5.php ----à 52.php
6.php
7.php ----à 72.php
8.php ----à 82.php
9.php ----à 92.php
Software utilizzati per lo sviluppo applicativo
Linguaggio Html (per la realizzazione statica del sito Web)
linguaggio di programmazione PHP (per la creazione delle pagine web dinamiche)
Nome Del Programma
Il nome del programma è "Vivaio".
Installazione Del Programma
Per installare il seguente programma basterà inserire nella seguente Directory :
"C:\Program Files\EasyPHP-5.2.10\www" nel caso di Easyphp
Oppure “C:\Xampp\htdocs” nel caso di Xampp
la cartella "Vivaio" contenente i file necessari all'utilizzo funzionale del programma e grazie all'utilizzo del browser, ci si potrà collegare al server apache locale, inserendo il comando
"localhost"
nella barra degli indirizzi e aprire la cartella "Vivaio". Se non è stato ancora installato sul pc un server web Apache (Mysql)e dell’ambiente php, è possibile scaricare le versioni free dai siti:
Se si vuole utilizzare EasyPHP è consigliabile utilizzare la versione 5.2.10
Gestione Del Sito Web
L’HomePage del sito contiene Il Nome del programma. Sulla destra troviamo i link che collegano l’utente alle query sopra citate e spiegate. Nei pulsanti superiori, troviamo i nomi delle tabelle. Cliccando sulla tabella, avremo la possibilità di collegarci tramite la pagina successiva, al programma di Inserimento. Per la realizzazione del sito web è stato utilizzato un Free Template creato dalla Reality Software.
Codice Creazione Database
CREATE DATABASE Vivaio
CREATE TABLE IF NOT EXISTS `personale` (
`Codicepersonale` varchar(5) NOT NULL,
`Nome` varchar(15) NOT NULL,
`Cognome` varchar(15) NOT NULL,
`Datanascita` date NOT NULL,
`Categoria` varchar(15) NOT NULL,
`Qualifica` varchar(15) NOT NULL,
`Costoorario` decimal(9,0) NOT NULL,
PRIMARY KEY(Codicepersonale)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `specie` (
`Codicespecie` varchar(5) NOT NULL,
`Nome` varchar(15) NOT NULL,
`Modocoltivazione` varchar(15) NOT NULL,
`Esposizione` varchar(15) NOT NULL,
`Codicepersonale` varchar(15) NOT NULL,
PRIMARY KEY(Codicespecie),
FOREIGN KEY(Codicepersonale) REFERENCES Personale(Codicepersonale)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `piante` (
`Codicepianta` varchar(5) NOT NULL,
`Codicespecie` varchar(15) NOT NULL,
`Nome` varchar(15) NOT NULL,
`Descrizione` varchar(100) NOT NULL,
`Tipo` varchar(15) NOT NULL,
`Immagine` varchar(200) NOT NULL,
`Stagionefioritura` varchar(15) NOT NULL,
`Numero` varchar(9) NOT NULL,
`Prezzo` decimal(9,2) NOT NULL,
PRIMARY KEY(Codicepianta),
FOREIGN KEY(Codicespecie) REFERENCES Specie(Codicespecie)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `clienti` (
`Codicecliente` varchar(5) NOT NULL,
`Nome` varchar(15) NOT NULL,
`Cognome` varchar(15) NOT NULL,
`Tipo` varchar(15) NOT NULL,
`Residenza` varchar(15) NOT NULL,
`Telefono` varchar(15) NOT NULL,
PRIMARY KEY(Codicecliente)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `attivita` (
`Codiceattivita` varchar(5) NOT NULL,
`Codicecliente` varchar(5) NOT NULL,
`Nome` varchar(50) NOT NULL,
`Tipo` varchar(15) NOT NULL,
`Necessitapiante` varchar(15) NOT NULL,
`Dataprenotazione` date NOT NULL,
`Dataeffettuazione` date DEFAULT NULL,
PRIMARY KEY(Codiceattivita),
FOREIGN KEY(Codicecliente) REFERENCES Clienti(Codicecliente)
) ENGINE=InnoDb DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `attivitasvolta` (
`Codicepersonale` varchar(5) NOT NULL,
`Codiceattivita` varchar(5) NOT NULL,
PRIMARY KEY(Codicepersonale, Codiceattivita),
FOREIGN KEY(Codicepersonale) REFERENCES Personale(Codicepersonale),
FOREIGN KEY(Codiceattivita) REFERENCES Attivita(Codiceattivita)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
QUERIES (Interrogazioni)
QUERY 1
Visualizzare il codice, il nome e l'immagine di tutte le piante presenti nel vivaio:
SELECT piante.Codicepianta, piante.Nome, piante. Immagine FROM piante
QUERY 2
Visualizzare il codice, il nome e il prezzo di tutte le piante che fioriscono in estate e che abbiano un prezzo maggiore di 10 euro:
SELECT piante.Codicepianta, piante.Nome, piante.Prezzo FROM piante WHERE Stagionefioritura='Estate' AND Prezzo>10
QUERY 3
Visualizzare Codice e il nome della specie coltivabile all'aperto a mezz'ombra:
SELECT specie.Codicespecie, specie. Nome FROM specie WHERE Modocoltivazione='aperto' AND Esposizione='mezzombra'
QUERY 4
Visualizzare tutti gli agronomi nati nel 1970 che richiedono una remunerazione oraria superiore ai 10 euro.
SELECT personale.Codicepersonale, personale.Nome, personale.Cognome FROM personale WHERE personale.Datanascita LIKE '1970-%-%' AND personale.Categoria='Agronomo' AND personale:Costoorario>10
QUERY 5
Dato il nome di una stagione, visualizzare il nome delle piante che fioriscono in quella stagione:
SELECT piante.Nome FROM piante WHERE '$stagione'=piante.Stagionefioritura
QUERY 6
Visualizzare il Codice Cliente, il Nome, Il Cognome e la Residenza dei clienti privati:
SELECT clienti.Codicecliente, clienti. Nome, clienti.Cognome, clienti.Residenza FROM clienti WHERE clienti.Tipo='Privato'
QUERY 7
Inserire il nome della pianta per verificare quante ne sono presenti in magazzino:
SELECT piante.Codicepianta, piante.Nome, piante. Numero FROM piante WHERE piante.Nome='$nome'
QUERY 8
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 clienti.Nome, clienti.Cognome, clienti.Telefono FROM clienti, attivita WHERE clienti.Codicecliente=attivita.Codicecliente AND attivita.Dataprenotazione BETWEEN '$datainizio' AND '$datafine'
QUERY 9
Dato il codice di un agronomo, riportare quanti esemplari di piante sono sotto la sua responsabilità:
SELECT personale.Codicepersonale, personale.Nome, SUM(piante.Numero) AS 'Totale Piante' FROM specie, personale, piante WHERE personale.Codicepersonale=specie.Codicepersonale AND specie.Codicespecie=piante.Codicespecie AND personale.Codicepersonale='$nomeagronomo'
QUERY 10
Visualizzare nome, descrizione e quantità di esemplari presenti nel vivaio, della pianta più economica da interno:
SELECT piante.Nome, piante.Descrizione, piante.Numero FROM piante WHERE piante.Prezzo=(SELECT MIN(Prezzo) FROM piante) AND piante.Tipo='Interno'
Commenti
Posta un commento