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.