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 |
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.
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.
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.
| 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) |
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à:
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]