La fase più critica quando dobbiamo creare un database è la fase di progettazione della struttura delle tabelle. A volte pensiamo di aver creato un archivio ben fatto ignorando però alcune tecniche di ottimizzazione delle basi dati. In questo articolo parleremo della normalizzazione per risolvere problemi di spreco di memoria e dell’integrità referenziale per risolvere problemi di consistenza dei dati.
Facciamo l’esempio della progettazione della struttura della tabella “Articoli di Magazzino“, prevediamo che sarà così strutturata:
A prima vista sembrerebbe ben implementata nella sua struttura, ma se facessimo un’analisi più attenta, ci accorgeremmo che per ogni articolo inserito avremmo la possibile duplicazione del valore nel campo UnMis oppure in quello della Categoria, perché più articoli utilizzano quasi sicuramente gli stessi valori, problema che prende il nome di ridondanza dei dati.
Per risolvere il problema dobbiamo scomporre la tabella in più tabelle, nel nostro caso particolare tre tabelle, quella delle unità di misura:
La tabella delle categorie dovrebbe essere tipo questa:
Ovviamente la tabella degli articoli diverrebbe:
In pratica abbiamo sostituito i campi di testo con gli identificativi univoci delle altre due tabelle ed in questo modo al posto di 3 caratteri abbiamo un intero lungo e quindi ci abbiamo rimesso un poco di memoria, ma nell’altro abbiamo rimpiazzato 20 caratteri in un intero lungo e quindi con notevole risparmio di spazio. Queste linee guida per l’ottimizzazione delle tabelle si chiamano regole di normalizzazione. Gli aspetti positivi dati dalla normalizzazione sono notevoli:
A volte però la semplice normalizzazione delle tabelle non basta per garantire la completezza dei dati, ma è necessario che rispettino un altro vincolo: quello dell’integrità referenziale. In pratica si tratta di un insieme di regole utilizzate per assicurare che la relazione tra i record nelle tabelle correlate sia valida. Quando si definisce un vincolo d’integrità è come se si creassero due tipologie di tabelle: una esterna o Master ed una interna o Slave. La tabella Slave deve adeguarsi alla tabella Master in modo che ogni cambiamento di quest’ultima si ripercuota sulla tabella interna: tutte le modifiche o le cancellazioni sulla tabella esterna si ripercuotono in cascata anche sulla tabella interna. Viceversa tutte le variazioni sulla tabella interna devono tenere conto del contenuto della tabella esterna. Nel nostro esempio specifico, quando cancelliamo un articolo e non c’è nessun’altro che utilizza quell’unità di misura, anche quest’ultima viene cancellata, evitando così le tuple ( record ) spurie che si manifestano quando non abbiamo dati corrispondenti nella tabella principale oppure le tuple dondolanti che si manifestano quando ad esempio inseriamo un’unità di misura inesistente, nella tabella degli articoli.
La progettazione di una struttura adeguata per i database è estremamente importante per l’avvio di un nuovo programma gestionale, infatti se il database su cui appoggia è strutturato male, non solo si hanno carenze di prestazioni, ma anche possibili problemi di correttezza dei dati che trovano molta difficoltà nell’essere scovati.
Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…
MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→
In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…
In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…
Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…
Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→