Progettazione database. ‘Gestione ordini’

In questo post realizzeremo un semplice progetto di un database per la gestione degli ordini. Esso ci permetterà di misurarci con un problema che nella struttura si rifà alla seconda prova dell’Esame di Stato di Informatica degli Istituti Tecnici. Questo progetto suggerisce uno schema operativo sintetico che può essere seguito nello svolgimento della prima parte della prova d’esame. Si tenga presente che rispetto a quest’ultima manca la parte relativa all’implementazione delle pagine web dinamiche, che verrà affrontata in un altro post.

Descrizione del problema

Una catena di negozi è costituita da un certo numero di punti vendita situati in città diverse. Tutti i punti vendita ritirano gli articoli da vendere da un unico magazzino centrale. Gli ordini inoltrati verso il magazzino centrale sono caratterizzati da un codice identificativo, dalla data dell’ordine e comprendono gli articoli da ritirare. Gli articoli appartengono a diverse categorie merceologiche, ad esempio “alimentari”, “abbigliamento”, “informatica”, ecc. Per una gestione più efficiente degli ordini, si vuole dotare l’azienda di un sistema di gestione elettronico degli ordini, in modo che i punti vendita possano effettuare gli ordini attraverso il sito web della catena di negozi. In particolare si vuole che quando un punto vendita effettua l’ordine, deve essere possibile effettuarlo solo sugli articoli effettivamente disponibili in magazzino in quel momento.

Fatte le opportune ipotesi aggiuntive, si sviluppi:

  1. L’analisi della realtà di riferimento descritta.
  2. La progettazione concettuale della realtà descritta attraverso la produzione di uno schema (ad esempio ER, Entity‐Relationship) riportante gli attributi di ogni entità, il tipo di ogni associazione e i suoi eventuali attributi.
  3. La traduzione dello schema concettuale in uno schema fisico (schema logico relazionale).
  4. La definizione in linguaggio SQL di almeno tre relazioni (tabelle), tra loro correlate, definite nello schema logico.
  5. Le seguenti interrogazioni espresse in algebra relazionale e/o in linguaggio SQL:
  1. Elenco degli articoli non disponibili in magazzino.
  2. Elenco degli ordini provenienti dalla città di Potenza, con codice e data dell’ordine.
  3. Elenco degli articoli disponibili in magazzino che appartengono alla categoria merceologica “Pc e periferiche”.
  4. Elenco degli articoli che compongono l’ordine che ha il codice: 1345.
  5. Elenco di tutti gli ordini effettuati nel mese di novembre dal punto vendita “ShopPro Srl” della città di Potenza.
  6. Numero di ordini effettuati da ciascun punto vendita della città di Potenza in ordine alfabetico rispetto alla ragione sociale.
  7. Il/i punto/i vendita della città di Potenza che ha/hanno effettuato più ordini.

Soluzione proposta

1. Analisi ed ipotesi aggiuntive

Analizzando la realtà di riferimento è possibile individuare le seguenti entità fondamentali:

  1. PuntoVendita – per tutte le istanze dei punti vendita della realtà in esame.
  2. Ordine – per tutte le istanze degli ordini inoltrati dai punti vendita al magazzino centrale.
  3. Articolo – per il “catalogo” degli articoli con cui è possibile comporre gli ordini fra quelli disponibili in magazzino.

Allo scopo di ridurre la ridondanza, inoltre, conviene introdurre anche le seguenti entità:

  1. Categoria – per le categorie merceologiche a cui ciascun articolo appartiene.
  2. Città – per le città che ospitano i punti vendita.

Per la definizione delle associazioni che legano le entità individuate, si può osservare che:

  1. Ciascun punto vendita deve trovarsi in una città e ciascuna città può ospitare più punti vendita.
  2. Ciascun punto vendita può inoltrare più ordini e ciascun ordine deve essere inoltrato da un punto vendita.
  3. Ciascun ordine deve comprendere uno o più articoli (ciascuno in una certa quantità) e ciascun articolo può essere compreso in più ordini.
  4. Ciascun articolo appartiene ad una categoria merceologica e a ciascuna categoria possono appartenere più articoli.

Lo schema E/R delle entità, delle associazioni e dei relativi attributi fondamentali che derivano dall’analisi effettuata, è quello mostrato nella figura seguente, in cui in particolare:

  • Per soddisfare la richiesta che l’ordine si possa effettuare solo su articoli effettivamente disponibili, nell’entità articolo è stato introdotto l’attributo giacenza (che fornisce il numero di pezzi disponibili in magazzino). Questo attributo farà si che prima della conferma dell’ordine, ci sia la possibilità di verificare che la quantità richiesta di quell’articolo sia effettivamente disponibile in magazzino.
  • L’attributo quantità è stato assegnato all’associazione che lega Ordine con Articolo, in quanto esso non appartiene in maniera esclusiva a nessuna delle due entità, ma dipende da entrambe. Quanti sono i pezzi di un certo articolo in un ordine, infatti, dipende sia da qual è l’articolo, sia da qual è l’ordine che si considera.

2. Schema E/R

Lo schema E/R ottenuto con l’analisi precedente viene mostrato nella figura seguente. Esso risulta essere già normalizzato fino alla terza forma normale (3FN).

gestione-ordini

3. Schema logico

Applicando le regole di derivazione dello schema logico al precedente schema E/R, si ottengono le seguenti definizioni delle tabelle:

  • citta(id, nome)

citta

  • puntiVendita(id, denominazione, indirizzo, telefono, email, id_citta)

punti-vendita

  • ordini(id, data, id_puntoVendita)

ordini

  • dettaglio_ordini(id_ordine, id_articolo, quantita)

dettaglio-ordini

Essa è una tabella aggiuntiva necessaria per rendere possibile l’implementazione dell’associazione N a N fra le entità Ordine e Articolo nel database.

  • articoli(id, descrizione, giacenza, idCategoria)

articoli

  • categorie(id, descrizione)

categorie

4. Definizione delle tabelle in linguaggio SQL 

5. Interrogazioni espresse in linguaggio SQL

a)     Elenco degli articoli non disponibili in magazzino.

b)     Elenco degli ordini provenienti dalla città di Potenza, con codice e data dell’ordine.

oppure:

c)     Elenco degli articoli disponibili in magazzino che appartengono alla categoria merceologica “Pc e periferiche”.

oppure:

d)     Elenco degli articoli che compongono l’ordine che ha il codice: 1345.

oppure:

e)     Elenco di tutti gli ordini effettuati nel mese di novembre dal punto vendita “ShopPro Srl” della città di Potenza.

oppure:

f)     Numero di ordini effettuati da ciascun punto vendita della città di Potenza in ordine alfabetico rispetto alla ragione sociale.

g)     Il punto vendita della città di Potenza che ha effettuato più ordini.

Per la scrittura di questa interrogazione può essere utile considerare la query del punto precedente. Essa, infatti, restituisce una tabella (che chiamo per comodità T) con il seguente schema:

T(id, ragione_sociale, ordini_effettuati)

che permette di realizzare l’interrogazione g) con una query annidata che abbia la seguente struttura:

Per ottenere la query definitiva non ci resta che sostituire a T la query del punto precedente: