Progettazione logica

Tavole dei volumi e delle operazioni

Tavola dei volumi:

Concetto Tipo Volume
Fornitori E 13
Fornitori di prodotti non confezionati E 10
Fornitori di rotoli di tetrapak E 3
Rotoli di tetrapak E 10.000
Prodotti non confezionati E 10.000
Clienti E 40
Ordine E 10.000
Prodotti confezionati E 10.000
Rotoli di tetrapak in magazzino E 100
Prodotti non confezionati in magazzino E 30
Macchine E 15
Macchine guaste E 1
Macchine in produzione E 9
Macchine di riserva E 5
Gruppo di macchine E 5
Serbatoio asettico E 5
Magazzino E 130
Azienda E 150
Fornitura di prodotti non confezionati R 10.000
Fornitura di rotoli di tetrapak R 10.000
Richiesta di prodotti confezionati R 10.000
Vendita prodotto confezionato R 10.000
Produzione prodotto ordinato R 10.000
Immagazzinamento rotoli di tetrapak R 10.000
Immagazzinamento di prodotti non confezionati R 10.000
Produzione R 10.000
Confezionamento prodotto R 50
Assegnamento macchina di riserva R 5
Assegnamento ad un gruppo R 15
Collegamento al serbatoio R 5

 

Tavola delle operazioni:

Operazione Tipo Frequenza
1 I 1 volta all'anno
2 I 1 volta al mese
3 I 4 volte al giorno
4 I 3 volte a settimana
5 I 20 volte al giorno
6 I 20 volte al giorno
7 I 1 volta ogni 3 anni
8 I 1 volta ogni 5 anni
9 I 1 volta ogni 3 anni
10 I 1 volta ogni 5 anni
11 I 5 volte al giorno
12 B 10 volte al giorno
13 B 1 volta al giorno
14 I 1 volta ogni 6 mesi
15 B 1 volta al giorno
16 B 1 volta a settimana
17 B 1 volta al mese
18 B 1 volta all'anno
19 B 1 volta a settimana
20 B 1 volta al mese
21 B 1 volta all'anno
22 B 1 volta al mese
23 B 1 volta all'anno
24 B 1 volta al giorno

 

Ristrutturazione dello schema concettuale:

Eliminazione delle ridondanze:

Abbiamo rilevato che l'attributo lunghezza associato all'entità rotoli di tetrapak in magazzino si può calcolare dalla differenza tra la somma delle lunghezze di quel rotolo di tetrapak acquistato e la somma dei rotoli di tetrapak utilizzati. 
La stessa cosa vale anche per l'attributo quantità relativo all'entità prodotti non confezionati in magazzino.
Le operazioni che coinvolgono l'attributo lunghezza sono la numero 4, 5 e 24, mentre quelle che coinvolgono l'attributo quantità sono la numero 3, 5 e  24.

Tavola degli accessi in presenza di ridondanza: caso rotoli di tetrapak in magazzino

Operazione 4: Inserire  i dati relativi all'acquisto di rotoli di tetrapak
Concetto Costrutto Accessi Tipo
Rotoli di tetrapak in magazzino Entità 1 S
Rotoli di tetrapak (acquistati) Entità 1 S
Immagazzinamento rotoli di tetrapak Relazione 1 S
Fornitura di rotoli di tetrapak Relazione 1 S

 

Operazione 5:  Inserire i dati relativi alla produzione e vendita di un prodotto confezionato
Concetto Costrutto Accessi Tipo
Ordine Relazione 1 L
Clienti Entità 1 L
Richiesta prodotti confezionati Relazione 1 L
Rotoli di tetrapak in magazzino Entità 1/1 L/S
Prodotti non confezionati in magazzino Entità 1/1 L/S
Confezionamento prodotto Relazione 1 S
Macchine Entità 1 S
Produzione Relazione 1 S
Prodotti confezionati Entità 1 S
Vendita prodotto confezionato Relazione 1 S
Produzione prodotto ordinato Relazione 1 S

 

Operazione 24: Visualizzazione dei prodotti presenti in magazzino
Concetto Costrutto Accessi Tipo
Rotoli di tetrapak in magazzino Entità 100 L

Tavola degli accessi in assenza di ridondanza:

Operazione 4: Inserire  i dati relativi all'acquisto di rotoli di tetrapak
Concetto Costrutto Accessi Tipo
Rotoli di tetrapak (acquistati) Entità 1 S
Immagazzinamento rotoli di tetrapak Relazione 1 S
Fornitura di rotoli di tetrapak Relazione 1 S

 

Operazione 5:  Inserire i dati relativi alla produzione e vendita di un prodotto confezionato
Concetto Costrutto Accessi Tipo
Ordine Relazione 1 L
Clienti Entità 1 L
Richiesta prodotti confezionati Relazione 1 L
Rotoli di tetrapak (acquistati) Entità 10.000/10.000 L/S
Prodotti non confezionati  Entità 10.000/10.000 L/S
Confezionamento prodotto Relazione 1 S
Macchine Entità 1 S
Produzione Relazione 10.000 S
Prodotti confezionati Entità 10.000 S
Vendita prodotto confezionato Relazione 1 S
Produzione prodotto ordinato Relazione 1 S

 

Operazione 24: Visualizzazione dei prodotti presenti in magazzino
Concetto Costrutto Accessi Tipo
Rotoli di tetrapak (acquistati) Entità 10.000 L
Produzione Relazione 10.000 L


Tavola degli accessi in presenza di ridondanza: caso dei prodotti non confezionati
Per l'operazione 5 si fa riferimento alla tabella come sopra

Operazione 3: Inserire i dati relativi all'acquisto di un prodotto non confezionato
Concetto Costrutto Accessi Tipo
Prodotto non confezionato in magazzino Entità 1 S
Prodotto non confezionato Entità 1 S
Immagazzinamento prodotti non confezionati Relazione 1 S
Fornitura di prodotti non confezionati Relazione 1 S

 

Operazione 24: Visualizzazione dei prodotti presenti in magazzino
Concetto Costrutto Accessi Tipo
Prodotti non confezionati in magazzino Entità 30 L

 

Tavola degli accessi in assenza di ridondanza:

Operazione 3: Inserire i dati relativi all'acquisto di un prodotto non confezionato
Concetto Costrutto Accessi Tipo
Prodotto non confezionato Entità 1 S
Immagazzinamento prodotti non confezionati Relazione 1 S
Fornitura di prodotti non confezionati Relazione 1 S

 

Operazione 24: Visualizzazione dei prodotti presenti in magazzino
Concetto Costrutto Accessi Tipo
Prodotti non confezionati in magazzino Entità 10.000 L
Prodotti confezionati Entità 10.000 L

 

In presenza di ridondanza il costo delle operazioni analizzate (considerando doppio il costo delle operazioni in scrittura rispetto a quelle in lettura):
caso dei rotoli di tetrapak
Op4 =  8 (costo) * 12 (volte al mese) = 96
Op24 = 100 (costo) * 30 (volte al mese) = 3.000
Op5 = 21 (costo) * 600 (volte al mese) = 12.600
Tot = 15.696
caso dei rotoli di tetrapak
Op3 = 8 (costo) * 120 (volte al mese) = 960
Op24 = 30 (costo) * 30 (volte al mese) = 900
Op5 = 21 (costo) * 600 (volte al mese) = 12.600 
Tot = 14.460

In assenza di ridondanza il costo delle operazioni analizzate (considerando doppio il costo delle operazioni in scrittura rispetto a quelle in lettura):
caso dei rotoli di tetrapak
Op4 =  6 (costo) * 12 (volte al mese) = 72
Op24 = 20.000 (costo) * 30 (volte al mese) = 600.000
Op5 = 100.012 (costo) * 600 (volte al mese) = 60.007.200
Tot = 60.607.272
caso dei rotoli di tetrapak
Op3 = 6 (costo) * 120 (volte al mese) = 720
Op24 = 20.000 (costo) * 30 (volte al mese) = 600.000
Op5 = 100.012 (costo) * 600 (volte al mese) = 60.007.200
Tot = 60.607.920

Conviene mantenere la ridondanza perchè a fronte di un leggero aumento delle dimensioni del database (approssimativamente di 130 righe) il costo delle operazioni è molto inferiore.

 

Eliminazione delle gerarchie

Per la generalizzazione Fornitori, si decide di accorpare le entità figlie nel padre. Infatti, poiché le entità figlie non hanno attributi propri, è necessario aggiungere solamente l'attributo che determina il tipo di fornitore. Inoltre, si ha il vantaggio di non dover distinguere tra le occorrenze delle entità figlie per effettuare l'operazione 1.
Per la generalizzazione Azienda, accorpiamo l'entità padre nelle figlie. Ciò è possibile poiché la generalizzazione è totale. Inoltre, tutte le operazioni da effettuare fanno distinzioni tra le entità figlie.
La generalizzazione Magazzino è totale, si decide quindi di accorpare l'entità padre nelle figlie. Tutte le operazioni coinvolte distinguono, infatti, tra le entità figlie.
Riguardo alla generalizzazione Macchine, accorpiamo le entità figlie, che non hanno attributi propri, nel padre aggiungendo un attributo Tipo. L'operazione più importante che coinvolge queste entità (la numero 5), si riferisce a tutte le entità figlie.
L'eliminazione dell'ultima generalizzazione, comporta l'aggiunta di una ulteriore regola di vincolo:
RV13 - Ogni gruppo di macchine ha al proprio interno una ed una sola macchina di riserva.

Accorpamenti e partizionamenti

Decidiamo di accorpare le entità Macchine e Gruppo Di Macchine perchè la maggior parte delle operazioni che le coinvolgono (la numero 5, 7, 11 e 12) devono sempre accedere ad entrambe.
L'accorpamento da noi effettuato consiste nell'aggiungere, all'entità Macchine, gli attributi Numero del gruppo, Prodotti confezionabili e Rotoli utilizzabili.
Questo accorpamento rende necessaria l'introduzione di due nuove regole di vincolo:
RV14 - Se due macchine appartengono allo stesso gruppo, allora devono poter confezionare gli stessi prodotti.
RV15 - Se due macchine appartengono allo stesso gruppo, allora devono poter utilizzare gli stessi rotoli.

 

Eliminazione degli attributi multivalore

Elenco degli identificatori principali

 

Nome entità Identificatore
Fornitori Codice (numero)
Clienti Codice (numero)
Macchine Nome (stringa)
Prodotti non confezionati Codice (numero)
Rotoli di tetrapak Codice (numero)
Prodotti non confezionati in magazzino Tipo di prodotto (stringa)
Rotoli di tetrapak in magazzino Tipo di rotolo (stringa)
Ordine Codice (numero)
Serbatoio asettico Nome (stringa)
Rotoli utilizzati Codice (numero)
Prodotti confezionati Codice (numero)
Prodotti contenibili Codice (numero)

Normalizzazione

Associazioni:

L'associazione ternaria Confezionamento Prodotti presenta la seguente dipendenza funzionale:

Rotoli di tetrapak in magazzino è Prodotti non confezionati in magazzino

La chiave di tale associazione è costituita dalle entità Macchine e Rotoli di tetrapak in magazzino, quindi è necessario normalizzare lo schema cambiando l'associazione ternaria in due associazioni binarie, come risulta dal seguente schema:

La nuova associazione prodotto adeguato al rotolo associa ad ogni rotolo in magazzino, l'unico prodotto non confezionato che può contenere.

Le altre associazioni sono tutte di tipo binario e quindi anche in forma normale di Boyce e Codd.


Entità:

Per nessuna delle entità presenti nello schema finale ristrutturato, sono presenti delle dipendenze funzionali non banali. Ciascuna di esse è quindi già in forma normale.

 

Traduzione verso il modello relazionale

Rappresentiamo ogni entità dello schema finale ristrutturato con una tabella, avente per chiave gli identificatori primari.
Non è però necessario rappresentare le entità Prodotto contenibile, Prodotto confezionabile e Rotolo utilizzabile perchè esse sono composte solamente dagli identificatori "Tipo", i quali sono già presenti nelle tabelle che rappresentano le associazioni molti a molti Contenibilità, Confezionabilità e Utilizzabilità e perchè non interessa tenere traccia di prodotti che non sono associati ad alcuna macchina o serbatoio. Inoltre le associazioni Confezionabilità e Utilizzabilità saranno identificate, oltre che dal prodotto o rotolo, dal numero del gruppo invece che dal nome della macchina. In questo modo le regole di vincolo RV14 e RV15 saranno sempre soddisfatte.
Le associazioni di tipo uno a molti sono rappresentate aggiungendo i propri attributi e l'identificatore dell'entità associata con cardinalità maggiore di uno, nella tabella dell'entità associata con cardinalità massima pari ad uno. Ad esempio, l'associazione Richiesta di prodotti confezionati è rappresentata aggiungendo l'attributo "Data" e l'identificatore di Clienti "Codice" alla tabella che rappresenta Ordine.
Si fa però eccezione per le associazioni Fornitura di rotoli di tetrapak, Fornitura di prodotti non confezionati e Vendita prodotto confezionato, esse saranno rappresentate da tabelle proprie. Si è deciso di fare questa scelta per ottimizzare l'esecuzione delle operazioni dalla 16 alla 23, le quali coinvolgono solamente gli attributi delle associazioni suddette.
Inoltre, l'aggiunta dell'identificatore di Serbatoio asettico alla tabella rappresentante Macchine, causerebbe il verificarsi di una dipendenza funzionale tra tale identificatore e l'attributo "Numero gruppo". Per evitare tale inconveniente, decidiamo quindi di rappresentare l'associazione Collegamento al serbatoio mediante una tabella propria.

Gli attributi che costituiscono la chiave primaria delle tabelle sono sottolineati, mentre gli attributi che possono assumere valore <NULL> sono segnati con un asterisco.

Entità - Relazione Traduzione
Fornitori Fornitori (Codice, Nome, Città*, Telefono, Via*, NCivico*, CAP*, Fax*, Email*, Tipo) 
Clienti Clienti (Codice, Nome, Città*, Telefono, Via*, NCivico*, CAP*, Fax*, Email*) 
Macchine Macchine (Nome, Ngruppo, Stato)
Prodotti non confezionati ProdNC (Codice, TipoProd, Quantita)
Rotoli di tetrapak Rotoli (Codice, TipoRot, Lunghezza)
Prodotti non confezionati in magazzino ProdNCM (TipoProd, Quantita)
Rotoli di tetrapak in magazzino RotoliM (TipoRot, Lunghezza, ProdCont)
Prodotti confezionati ProdConf (Codice, LungRotolo, NomeMacchina)
Ordine Ordine (Codice, TipoProd, DataConsegna, Quantita, TipoRot, Capacita, DataRichiesta, CodiceCliente)
Serbatoio asettico Serbatoio (Nome)
Confezionamento prodotti ConfProd (Rotoli, Macchine)
Confezionabilità Conf (NGruppo, ProdMac)
Utilizzabilità Util (NGruppo, RotMac)
Contenibilità Cont (Serbatoio, ProdSerb)
Collegamento al serbatoio CollSerbatoio (NGruppo, Serbatoio)
Fornitura di rotoli di tetrapak FornitRotoli (Codice, Fornitore, Spesa, Data)
Fornitura di prodotti non confezionati FornitProdNC (Codice, Fornitore, Spesa, Data)
Vendita prodotto confezionato Vendita (Codice, Cliente, Ricavo, Data)


Traduzione Vincoli di riferimento
Fornitori (Codice, Nome, Città, Telefono, Via, NCivico, CAP, Fax, Email, Tipo)  -
Clienti (Codice, Nome, Città, Telefono, Via, NCivico, CAP, Fax, Email)  -
Macchine (Nome, Ngruppo, Stato) Ngruppo à CollSerbatoio.NGruppo
ProdNC (Codice, TipoProd, Quantita) TipoProd à ProdNCM.TipoProd
Rotoli (Codice, TipoRot, Lunghezza) TipoRot à RotoliM.TipoRot
ProdNCM (TipoProd, Quantita) -
RotoliM (TipoRot, Lunghezza, ProdCont) ProdCont à ProdNCM.TipoProd
ProdConf (Codice, LungRotolo, NomeMacchina) Codice à Ordine.Codice
NomeMacchina à Macchine.Nome
Ordine (Codice, TipoProd, DataConsegna, Quantita, TipoRot, Capacita, DataRichiesta, CodiceCliente) CodiceCliente à Clienti.Codice
Serbatoio (Nome) -
ConfProd (Rotoli, Macchine) Rotoli à RotoliM.TipoRot
Macchine à Macchine.Nome
Conf (NGruppo, ProdMac) NGruppo à CollSerbatoio.NGruppo
Util (NGruppo, RotMac) NGruppo à CollSerbatoio.NGruppo
Cont (Serbatoio, ProdSerb) Serbatoio à Serbatoio.Nome
CollSerbatoio (NGruppo, Serbatoio) Serbatoio à Serbatoio.Nome
FornitRotoli (Codice, Fornitore, Spesa, Data) Codice à Rotoli.Codice
Fornitore à Fornitori.Codice
FornitProdNC (Codice, Fornitore, Spesa, Data) Codice à ProdNC.Codice
Fornitore à Fornitori.Codice
Vendita (Codice, Cliente, Ricavo, Data) Codice à ProdConf.Codice
Cliente à Clienti.Codice

[Indice] - [Analisi dei requisiti] - [Progettazione Concettuale] - [Codifica SQL] - [Testing]