questo link
Transcript
questo link
RELAZIONE DI PROGETTO INTEGRATIVO PER L’ ESAME “BASI DI DATI” • Studente: • N.mat.: • Tema: Nigro Carlo 145559 Negozio virtuale Il progetto consiste nella creazione di una base di dati che consenta la gestione di un negozio virtuale, operante sul web oltre che in una sede fisica. Descrizione del problema: Un negozio è specializzato nella vendita di prodotti informatici e relativi alla telefonia. La base di dati deve permettere di creare un elenco dove siano specificate oltre alla categoria di appartenenza, il nome, la descrizione dettagliata ed il prezzo unitario della merce. Oltre a ciò, la tabella deve contenere un numero identificativo che distingua due prodotti simili tra loro ma con caratteristiche, seppur di poco, diverse (ad esempio il colore). E’ poi utile la presenza di un dato che indichi il numero di pezzi rimasti in magazzino, quindi quelli effettivamente disponibili per la vendita. Il negozio ha un fornitore per ogni categoria di prodotto che acquista. Infine possiede un’anagrafica dei propri clienti, a cui vanno aggiunte oltre alle solite informazioni, un nome utente ed una password, per effettuare il login al sito internet e poter procedere con l’acquisto ed un campo dove inserire il proprio indirizzo e-mail dove ricevere comunicazione di avvenuta evasione dell’ordine. ENTITA’ RELAZIONI Dati anagrafici Fornitore Disponib. Caratter. (1,N) (1,N) Prodotto Categoria Dati anagrafici Prezzo acquisto (1,N) (1,N) Cliente Acquisto Vendita Prezzo vendita SCHEMA SCHELETRO Quantità Nome Vendita Id Prezzo Prezzo acquisto Prodotto Acquisto Disponibilità Id prodotto Data Descrizione Quantità Data Id prodotto Categoria Cliente Fornitore Dati anagrafici Dati anagrafici SCHEMA LOGICO Cliente(Nome,Cognome,C.F./P.Iva,Indirizzo,Cap,Citta,Provincia,Telefono,Mail,Nick,Password) Vendita(Nick,IdProdotto,Quantità,Data) Prodotto(Id,Nome,Descrizione,PrezzoUnitario,Categoria,PezziDisponibili) Acquisto(P.Iva,IdProdotto,PrezzoAcquisto,Quantità,Data) Fornitore(P.Iva,Nome,Cognome,Indirizzo,Telefono,Fax,...) Il negozio virtuale è stato effettivamente creato per l’esame di ‘Strumenti per applicazioni web’, sebbene sia stata implementata unicamente la parte relativa alla vendita degli articoli. E’ possibile verificarne il funzionamento all’indirizzo: http://spaw.ce.unipr.it/progetti/INFOTECH Descrizione: Il suo funzionamento è reso possibile dall’utilizzo di quattro tabelle (dati_clienti, prodotti, carrello, ordini) del database chiamato gestione_ordini inizialmente così costruite: Dati_clienti: • Nome • Cognome varchar(30) varchar(20) • • • • • • • • • Fatturazione (unique) Indirizzo CAP Città Provincia Telefono Email Nick (chiave primaria) Password (unique) varchar(16) varchar(30) int(5) varchar(20) char(2) varchar(12) varchar(30) varchar(12) varchar(12) Prodotti: • • • • • • Id (chiave primaria) Prodotto Descrizione Prezzo Disponibili Categoria int(8) varchar(40) text decimal(4,2) int(3) char(3) Carrello: • Nick • Id • Quantità varchar(12) int(8) int(2) Ordini: • • • • • • • • • • TimeID Giorno Mese Anno Nick Id Quantità Spedizione Pagamento Evaso int(10) int(2) int(2) int(4) varchar(12) int(8) int(2) varchar(16) varchar(20) tinytext(1) Le tabelle Dati_clienti e Prodotti non necessitano di particolari spiegazioni. La tabella Carrello ha la funzione di memorizzare i prodotti che vengono scelti man mano da un utente durante la navigazione sul sito, finché egli non conferma l’ordine (dopodichè i dati vengono cancellati una volta scritti nella tabella ordini). La tabella Ordini ha invece la funzione di memorizzare tutti i dati relativi ad un ordine e comprende un attributo Evaso che consente al proprietario del negozio di sapere se ha spedito o meno la merce ordinata da un cliente. Così costruita, quest’ultima presenta notevoli ridondanze. La necessità di questa scelta è stata dettata principalmente dal fatto che non è stata trovata una funzione che restituisca da un singolo attributo ‘Data’, il mese e l’anno relativi ad una tupla così da poter effettuare un’interrogazione secondo parametri immessi dall’utente (ad esempio sapere l’elenco di ordini effettuati il mese di Febbraio dell’anno 2004). In via teorica attualmente spezzerei la tabella Ordini in due così da avere: Ordini: • • • • • • TimeId Nick Id Quantità Evaso Primary key(TimeId,Id) int(10) varchar(12) int(8) int(2) tinytext(1) Dati_ordini • • • • TimeId (Primary key) Data Spedizione Pagamento int(10) date varchar(16) varchar(20) Fatto questo resterebbe da riprogrammare gli script del sito affinché effettuino le interrogazioni di interesse mediante un JOIN. Dettagli tecnici sulla struttura del sito sono chiariti nella relazione stesa per ‘Strumenti per applicazioni web’ che allego di seguito. Tengo a precisare che non è stato fatto utilizzo di alias nelle interrogazioni per il semplice motivo che la versione Sql presente sul server spaw.ce.unipr.it, forse perché arretrata non li supporta, così come richiede che un JOIN debba essere specificato come INNER JOIN per funzionare.