SIMULAZIONE SECONDA PROVA L azienda Gamma è una società multinazionale di produzione e commercializzazione di prodotti di abbigliamento. Essa ha intuito l opportunità di indagare i nuovi modelli individuali di comportamento dei consumatori e ha adeguato le proprie strategie manageriali, utilizzando metodologie di raccolta dati che consentano un rapido feedback tra l analisi delle vendite e le strategie di produzione. Ciò le ha consentito di offrire sul mercato modelli di abbigliamento di tendenza, con un processo di progettazione, produzione e distribuzione di poche settimane e a prezzi accessibili al grande pubblico. L offerta di modelli è differenziata in base all analisi dei comportamenti dei consumatori e, pertanto, per identificarne rapidamente le tendenze, Gamma traccia ogni singolo capo disponibile nei suoi punti vendita. La rete commerciale dell azienda Gamma è composta di punti vendita che presentano caratteristiche e offerte differenziate, distribuiti prevalentemente nelle città di medie e grandi dimensioni. Il personale di vendita può essere impiegato presso i vari punti vendita della società, in periodi diversi. L azienda attua strategie di fidelizzazione e di raccolta delle opinioni dei clienti anche tramite Web. Il candidato, concentrandosi sulla porzione di sistema informativo che gestisce l attività di vendita: 1. sviluppi uno schema concettuale della relativa base di dati, che dovrà prevedere: a. i punti vendita, identificati mediante un opportuno codice, dei quali si registra anche l indirizzo, il telefono, la data di inizio attività; b. i dipendenti, dei quali interessano i dati anagrafici, la qualifica, il punto vendita in cui operano; c. i modelli, specificando per ciascuno il codice, il nome, la descrizione, il prezzo di listino, il genere (uomo/donna), la collezione a cui appartiene; d. i singoli capi, di cui interessano il modello, la taglia, il colore (scelto tra un insieme codificato) ed il punto vendita dove si trova. Al momento della vendita si deve inoltre memorizzare la data di vendita, il prezzo effettivo di vendita (che può differire dal prezzo di listino in caso di promozioni) e il dipendente che ha curato la vendita. 2. derivi il corrispondente schema logico relazionale; 3. sviluppi in linguaggio SQL le query per ottenere le seguenti informazioni: a. il volume totale di vendite di un determinato punto vendita in un dato periodo di tempo; b. l elenco dei capi presenti in un punto vendita ad una precisa data (a scopo di inventario) con la descrizione dei modelli a cui appartengono. 4. Si immagini che un cliente, in un punto vendita della catena, non trovi un capo della sua taglia di un determinato modello, e che chieda al commesso di verificare se esso è presente in un altro punto vendita. Il candidato sviluppi in un linguaggio a sua scelta le pagine web che consentono all addetto alle vendite di visualizzare, per ciascun punto vendita, il numero di capi disponibili del tipo richiesto dal cliente, specificando modello e taglia. Prof. Sergio Scarano Pagina 1
SOLUZIONE ANALISI DEI DATI ENTITÀ: Modello: per memorizzare informazioni relative ai vari modelli prodotti dall azienda Capo: per tracciare ogni singolo capo in vendita PuntoVendita: per le informazioni relative ai vari punti vendita dell azienda dislocati nelle varie città Dipendente: anagrafica dei dipendenti dell azienda e operanti presso i vari punti vendita. ATTRIBUTI: Modello: IDModello (PK), Descrizione, PrezzoListino, Genere, Collezione, Recensione. IDModello contiene numeri interi ad auto-incremento; PrezzoListino è un campo di tipo valuta; Descrizione, Genere e Collezione sono campi di tipo testo; Recensione (intesa come la media delle recensioni dei vari clienti) è un campo che conterrà un numero reale. Capo: IDCapo (PK), Taglia, Colore, Disponibilità, DataVendita, PrezzoVendita. IDCapo contiene numeri interi ad auto-incremento; Taglia è un campo di tipo testo; Colore è un campo di tipo numerico (byte, consente 256 colori diversi con codici compresi tra 0 e 255); Disponibilità è un campo binario di tipo SI/NO; DataVendita è un campo di tipo data/ora (formato gg/mm/aaaa); PrezzoVendita è un campo di tipo valuta. DataVendita e PrezzoVendita possono essere considerati campi opzionali (saranno valorizzati solo in caso di vendita del capo). PuntoVendita: IDPuntoVendita (PK), Città, Indirizzo, Telefono, Mail, DataInizioAttività. IDPuntoVendita contiene numeri interi ad auto-incremento; Città, Indirizzo, Telefono e Mail sono campi di tipo testo; DataInizioAttività è un campo di tipo data/ora (formato gg/mm/aaaa). Dipendente: IDDipendente (PK), Cognome, Nome, DataNascita, Qualifica. IDDipendente contiene numeri interi ad auto-incremento; Cognome, Nome e Qualifica sono campi di tipo testo; DataNascita è un campo di tipo data/ora (formato gg/mm/aaaa). ASSOCIAZIONI E REGOLE DI LETTURA Modello Capo: (1 a Molti). Ad ogni modello si devono associare uno o più capi; ogni capo deve essere collegabile ad un unico modello. PuntoVendita Capo: (1 a Molti). In ogni punto vendita (negozio) deve essere possibile acquistare uno o più capi; ogni singolo capo deve essere a disposizione per la vendita in un unico negozio. Dipendente Capo: (1 a Molti). Ad ogni dipendente si può ricondurre la vendita di uno o più capi; ogni capo può essere venduto da un unico dipendente. Prof. Sergio Scarano Pagina 2
PuntoVendita Dipendente: (Molti a Molti). In un punto vendita devono lavorare uno o più dipendenti; ogni dipendente deve lavorare in uno o più punti vendita (chiaramente in periodi diversi). MODELLO E/R MODELLO CAPO DIPENDENTE PUNTO VENDITA MODELLO LOGICO Poiché si intende utilizzare, in fase di implementazione, un DBMS relazionale (Access o MySql), la relazione Molti a Molti sarà sostituita da relazioni 1 a Molti attraverso l introduzione di una tabella di collegamento. PUNTO VENDITA DIPENDENTE ASSUNZIONE ARCHIVIO CAMPO CHIAVE FORMATO DIMENSIONE OPZIONALITA IDModello PK Numerico AutoIncremento NO Descrizione Testo 20 NO Modelli PrezzoListino Valuta Euro NO Genere Testo 1 NO Collezione Testo 20 NO Recensione Numerico Decimale NO IDPuntoVendita PK Numerico AutoIncremento NO Città Testo 20 NO PuntiVendita Indirizzo Testo 30 NO Telefono Testo 15 NO Mail Testo 40 NO DataInizioAttività Data/Ora Data in Cifre NO IDDipendente PK Numerico AutoIncremento NO Cognome Testo 20 NO Dipendenti Nome Testo 20 NO DataNascita Data/Ora Data in Cifre NO Qualifica Testo 20 NO Prof. Sergio Scarano Pagina 3
Assunzioni Capi IDPuntoVendita FK Numerico Intero Lungo NO IDDipendente FK Numerico Intero Lungo NO DataAssunzione Data Data in Cifre NO IDCapo PK Numerico AutoIncremento NO Taglia Testo 5 NO Colore Numerico Byte NO Disponibilità SI/NO NO DataVendita Data/Ora Data in Cifre SI PrezzoVendita Valuta Euro SI IDModello FK Numerico Intero Lungo NO IDPuntoVendita FK Numerico Intero Lungo NO IDDipendente FK Numerico Intero Lungo NO CARATTERISTICHE DEL DBMS Si userà il DBMS MySql per la creazione del database e per le interrogazioni (query) al database. Si ipotizza, quindi, di poter testare il funzionamento dell applicazione in un ambiente preinstallato in locale che comprende una piattaforma integrata di sviluppo web (come ad esempio EasyPhp) contenente: il server web Apache il server di database MySQL un interprete di script php l'interfaccia grafica phpmyadmin per la creazione delle tabelle e il test delle query in SQL. INTERROGAZIONI SELECT SUM(PrezzoVendita) AS [Volume totale Vendita] FROM PuntiVendita, Capi WHERE PuntiVendita.IDPuntoVendita = Capi.IDPuntoVendita AND IDPuntoVendita = [Inserire il codice del punto vendita] AND DataVendita BETWEEN [Inserire data iniziale] AND [Inserire data finale] AND Disponibilità = NO ; SELECT IDCapo, Taglia, Colore, Descrizione FROM Modelli, Capi, PuntiVendita WHERE Modelli.IDModello = Capi.IDModello AND PuntiVendita.IDPuntoVendita = Capi.IDPuntoVendita AND IDPuntoVendita = [Inserire il codice del punto vendita] AND Disponibilità = SI ; Prof. Sergio Scarano Pagina 4
PAGINA WEB Si intende progettare una pagina web che permetta di cercare capi, di un modello e di una taglia ben precisa, all interno della rete dei punti vendita dell azienda; la pagina PHP restituirà il numero di capi, del modello e della taglia cercata, presenti in ciascun punto vendita. Di seguito il codice HTML relativo a tale pagina: <!doctype html> <html lang="it"> <head> <meta charset="utf-8" /> <title> Ricerca Capi </title> </head> <body bgcolor="yellow" text="blue" topmargin="50"> <div align="center"> <h2> RICERCA CAPO </h2> <font size="5"> <form action="ricerca.php" method="get"> <table border="0" cellspacing="20"> <tr> <td> Modello </td> <td> <input type="text" size="15" name="txtmodello" /> </td> </tr> <tr> <td> Taglia </td> <td> <input type="text" size="5" name="txttaglia" /> </td> </tr> <tr> <td> <input type="submit" name="cmdcerca" value="cerca" /> </td> <td> <input type="reset" name="cmdannulla" value="annulla" /> </td> </table> </form> </font> </div> </body> </html> Prof. Sergio Scarano Pagina 5
Alla pressione del pulsante CERCA viene richiamata la pagina ricerca.php che provvederà ad eseguire la query di ricerca nel database. Il codice di tale pagina è il seguente: <!doctype html> <html lang="it"> <head> <meta charset="utf-8" /> <title> Esito ricerca capo </title> </head> <body bgcolor="yellow" text="blue" topmargin="5"> <div align="center"> <h2> ESITO RICERCA </h2> <?php // recupero dati dal form $modello=$_get["txtmodello"]; $taglia=$_get["txttaglia"]; // connessione a MySql Server $conn=mysql_connect("localhost","root","") or die("connessione non riuscita"); // selezione del database su MySql mysql_select_db("dbgamma",$conn) or die("database non trovato"); // creazione query SQL $sql="select IDPuntoVendita, Città, COUNT(*) AS Totale "; $sql.="from PuntiVendita, Capi, Modelli "; $sql.="where PuntiVendita.IDPuntoVendita = Capi.IDPuntoVendita "; $sql.="and Modelli.IDModello = Capi.IDModello "; $sql.="and Descrizione = $modello "; $sql.="and Taglia = $taglia "; $sql.="group BY IDPuntoVendita, Città;"; // esecuzione query e creazione recordset $rs=mysql_query($sql,$conn) or die("query fallita"); // visualizzazione risultato ricerca echo "<font size=5>"; echo "<table cellspacing=10 border=0>"; echo "<tr> <th> CODICE PUNTO VENDITA </th> <th> CITTA </th> <th> N CAPI </th> </tr>"; while ($riga=mysql_fetch_array($rs)) { echo "<tr> <th>. $riga[ IDPuntoVendita ]. </th> <th>. $riga[ Città ]. </th><th>. $riga[ Totale ]. </th> </tr>"; } echo "</table>"; echo "</font>"; // chiusura connessione a MySql Server mysql_close($conn);?> </div> </body> </html> Prof. Sergio Scarano Pagina 6