Sei sulla pagina 1di 3

Bartolini Jonathan 5^A

ESERCITAZIONE MAGGIO 2017

TESTO:
Unazienda commerciale vuole gestire i dati relativiagli ordini di materiale ricevuti dai propri
clienti.Lazienda vende un certo numero di prodotti,ognuno dei quali caratterizzato da un codice,un nome,
una descrizione, un prezzo di acquisto, un prezzo di vendita e dalla giacenza attuale.

I prodotti sono classificati secondo specifichecategorie che si vogliono gestire separatamentemediante un


codice e relativa descrizione.

Lazienda si rivolge a fornitori esterni per lacquisizionedei prodotti in listino: un prodotto vieneacquistato
da un solo fornitore che pu fornireprodotti diversi. Ogni fornitore definito da un codice, una ragione
sociale, un indirizzo, il CAP,la citt, la provincia e il telefono.

Gli stessi attributi che definiscono i fornitori,sono utilizzati per descrivere anche i clienti cheinoltrano gli
ordini allazienda. Ogni ordine relativoa un certo cliente ed identificato da uncodice, da una data di
ricezione, dalla data dievasione (se tale campo non avvalorato lordinesi intende ancora inevaso) e dalle
spese ditrasporto.
In ogni ordine possono essere richiestidiversi prodotti del listino per ognuno dei qualiviene indicata la
quantit ordinata.Presentare lanalisi del problema in relazione anche alle query seguenti, lo schema E/R con
la descrizione, lo schema logico e lSQL dei seguenti quesiti

a) fornitore/i da cui si acquista il prodotto/i picostoso/i (lista del tipo fornitore,


prodotto,prezzo_acquisto);
b) dati dei clienti che nellanno in corso hannoacquistato sia il prodotto con codice P01 che il prodotto
con codice P41, ma non il prodotto con codice P35;
c) ammontare del valore dei prodotti evasi nelmese di gennaio 2017;
d) Per ogni cliente, limporto totale ordini perlanno 2016;
e) per ogni prodotto, quantit ordinata dai clientinel 2016 suddivisa per provincia;
f) categoria/e che nel 2016 stata la pi redditiziain termini economici (guadagno).

RISOLUZIONE
ANALISI:
Il database deve gestire i dati relativi agli ordini dei materiali di unazienda ricevuti dai propri clienti. Si
presuppone che ogni prodotto abbia, come attributi, un nome, un codice identificativo, una descrizione che
indichi a cosa serve o cosa effettua il determinato prodotto, un prezzo di acquisto che rappresenta il prezzo
che il fornitore impone allazienda al momento dellacquisto e il prezzo di vendita che indica il prezzo con ci
il prodotto viene immesso in commercio, la giacenza che rappresentala quantit di prodotti presenti
allinterno del magazzino pronti per essere venduti. Si ha quindi un fornitore che, come specificato dal testo,
pu fornire allazienda pi prodotti mentre uno specifico prodotto pu essere distribuito da un solo fornitore.
Questo presenter come attributi il proprio codice identificativo, la ragione sociale (ad esempio s.r.l o
s.p.a), indirizzo, il cap, la citt e la provincia della sede e il recapito telefonico.
Inoltre ogni prodotto appartiene ad una determinata categoria: per questo occorre unentit a parte per
definirla i quali campi saranno il codice identificativo e la descrizione. Si presuppone che un prodotto pu
appartenere ad una sola categoria mentre ad una determinata categoria possono appartenere pi prodotti.
Si hanno poi i clienti che sono le persone fisiche che effettuano lordine: queste avranno, come da comanda,
come attributi gli stessi che sono stati inseriti nellentit fornitore. Un cliente potr effettuare pi ordini
mentre un determinato ordine potr essere relativo ad un solo cliente. Per cui questo verr caratterizzato da
un proprio id, una data di ricezione (quando il pacco stato consegnato allutente) e da una data di evasione
(quando lordine stato assegnato al corriere per la spedizione). Inoltre presenter un attributo relativo al
costo della spedizione che relativo ad ogni ordine.
Bartolini Jonathan 5^A

Valutando che in un ordine possono essere richiesti pi prodotti e un prodotto pu essere inserito in pi
ordini, schematizzando il tutto con unassociazione N N:M,
:M, occorre creare unentit che semplificher questa
relazione. In richieste verranno inserite le foreignkey
foreignkeydi
di prodotti e ordini e contemporaneamente un attributo
che indicher la quantit ordinata in quellordine di quello specifico prodotto.
In questo modo sar possibile gestire tutte le situazioni e avere una corretta memorizzazione dei dati che
lazienda deve avere.

SCHEMA E/R E LOGICO:

Lettura dello schema E/R:


Un fornitore pu vendere pi prodotti mentre un prodotto pu essere venduto da un sol solo fornitore (si
ha unassociazione 1:N),
Un prodotto appartiene ad una sola categoria mentre ad una categoria appartengono pi prodotti (si
ha una relazione N:1),
Un ordine pu richiedere pi prodotti ed un prodotto pu essere richiesto in pi ordini (si hha una
relazione N:M che viene semplificata con lentit Richiestela
la quale sar connessa alle altre due entit
con due associazioni 1:N),
Un cliente pu effettuare pi ordini mentre un determinato ordine pu essere effettuato da un solo
cliente (si ha unassociazione 1:N).

QUERY RISOLTE:
a) Select Fornitori.*, Prodotti.PrezzoA, Prodotti.Nome FROM Prodotti INNER JOIN
Fornitori ON Prodotti.CodFornitori=Fornitori.CodFornitori WHERE
Prodotti.PrezzoA=(SELECT MAX(PrezzoA) FROM Prodotti);

b) SELECT Clienti.* FROM Clienti INNER JOIN Ordini ON


Ordini.CodCliente=Clienti.CodClienti INNER JOIN Richieste ON
Richieste.CodOrdine=Ordini.CodOrdine WHERE YEAR(Ordini.DataR)=YEAR(now())
YEAR(Ordini.DataR)=YEAR
AND Richieste.CodProdotti=
Richieste.CodProdotti=P01 OR Richieste.CodProdotti=P4
Richieste.CodProdotti=P41 OR
Richieste.CodProdotti!=
Richieste.CodProdotti!=P35;
Bartolini Jonathan 5^A

c) SELECT SUM(Prodotti.PrezzoV* Richieste.Qta) FROM Ordini INNER JOIN Richieste


ON Richieste.CodOrdine=Ordini.CodOrdine INNER JOIN Prodotti ON
Richieste.CodProdotti=Prodotti.CodProdotti WHERE
Ordini.DataEvasione>=01/01/2017 AND Ordini.DataEvasione<=31/01/2017;

d) SELECT SUM(Prodotti.Prezzi* Richieste.Qta)+ Ordini.SpeseT FROM Ordini INNER


JOIN Richieste ON Richieste.CodOrdine=Ordini.CodOrdine INNER JOIN Prodotti ON
Richieste.CodProdotti=Prodotti.CodProdotti INNER JOIN Clienti ON
Ordini.CodCliente=Clienti.CodClienti WHERE YEAR(Ordini.DataR)=2016 ;

e) SELECT SUM(Richieste.Qta)as., clienti.provinciaFROM Ordini INNER JOIN


Richieste ON Richieste.CodOrdine=Ordini.CodOrdine INNER JOIN Prodotti ON
Richieste.CodProdotti=Prodotti.CodProdotti INNER JOIN Clienti ON
Ordini.CodCliente=Clienti.CodClienti WHERE YEAR(Ordini.DataR)=2016 GROUP
BY(Clienti.Provincia) ;

f) SELECT Categorie.*, MAX(Prodotti.PrezzoV*Richieste.Qta) FROM Categorie INNER


JOIN Prodotti ON Prodotti.CodCategoria=Categorie.CodCategoria INNER JOIN
Richieste ON Richieste.CodProdotti=Prodotti.CodProdotti WHERE
YEAR(Ordini.DataR)=2016;

Potrebbero piacerti anche