lunedì 15 marzo 2010

5) Normalizzazione, denormalizzazione e query

All'interno di un databadse talvolta è necessario eliminare le duplicazioni inutili in modo da fornire un percorso di ricerca rapida per tutte le informazioni necessarie. Il processo di ottimizzazione di tabelle, chiavi, colonne e relazioni per creare un database efficiente viene definito normalizzazione. La normalizzazione non si riferisce ai soli file relazionali in quanto rappresenta anche una comune attività di progettazione per i file indicizzati.

La normalizzazione è un processo complesso con numerose regole specifiche e diversi livelli di intensità. Nella sua accezione più completa, essa consiste nel processo di eliminazione dei gruppi ripetuti, riduzione al minimo della ridondanza, eliminazione delle chiavi composte per una dipendenza parziale e separazione degli attributi non chiave. In termini semplici, le regole per la normalizzazione possono essere ricondotte al concetto di correlazione esclusiva di ogni attributo (colonna) a una chiave specifica. È necessario che in ogni tabella venga descritto solo un tipo di entità, ad esempio una persona, un luogo, un ordine cliente o un prodotto.

Una query di creazione tabella consente di recuperare dati da una o più tabelle e quindi di caricare il set di risultati in una nuova tabella. La nuova tabella può essere inclusa nel database aperto oppure può essere creata in un nuovo database.

In genere, si utilizza una query di creazione tabella quando è necessario copiare o archiviare dati. Supponiamo, ad esempio, di disporre di una o più tabelle di dati relativi alle vendite precedenti e di utilizzare tali dati in alcuni report. Le cifre relative alle vendite non possono essere modificate in quanto le transazioni risalgono almeno al giorno prima e l'esecuzione continua di una query per recuperare i dati può richiedere troppo tempo, in particolare se si esegue una query complessa su un archivio dati di grandi dimensioni. In questo caso, il caricamento dei dati in una tabella distinta e l'utilizzo di tale tabella come origine dati può ridurre il carico di lavoro e offrire un archivio dati efficace.

Il processo di creazione di una query di creazione tabella è costituito dai passaggi generali seguenti:

  • Attivare il database, se non è firmato o non è salvato in un percorso attendibile. In caso contrario, non sarà possibile eseguire query di comando, ovvero query di accodamento, di aggiornamento e di creazione tabella.
  • In visualizzazione Struttura della query creare una query di selezione e quindi modificarla affinché restituisca i record desiderati. È possibile selezionare dati da più tabelle e, in pratica, denormalizzarli. È possibile, ad esempio, inserire dati relativi a clienti, corrieri e fornitori in una singola tabella, un procedimento che non si utilizzerebbe in un database di produzione con tabelle normalizzate in modo appropriato. È inoltre possibile utilizzare criteri nella query per limitare o personalizzare ulteriormente il set di risultati.
  • Convertire la query di selezione in una query di creazione tabella, scegliere una posizione per la nuova tabella e quindi eseguire la query per creare la tabella.


Alcuni vantaggi derivanti dalla normalizzazione sono:

  • Integrità dei dati (poiché non sono presenti dati ridondanti).
  • Query ottimizzate (poiché con le tabelle normalizzate vengono generati join veloci ed efficienti).
  • Operazioni più rapide di ordinamento e creazione degli indici (poiché le tabelle presentano un numero minore di colonne).
  • Migliori prestazioni per le istruzioni UPDATE (poiché è presente un numero minore di indici per tabella).
  • Migliore risoluzione della concorrenza (poiché i blocchi di tabella interessano una minore quantità di dati).

È possibile normalizzare i database meno complessi seguendo una semplice regola: è opportuno che le tabelle che contengono informazioni ripetute siano suddivise in tabelle separate per eliminare la duplicazione.

Si supponga il caso di una nuova applicazione per un libraio che deve registrare informazioni su ogni libro, comprese le seguenti:

  • nome dell'autore
  • indirizzo dell'autore
  • telefono dell'autore
  • titolo
  • ISBN (International Standard Book Number)
  • anno di pubblicazione
  • nome dell'editore
  • indirizzo dell'editore
  • telefono dell'editore.

È sufficiente creare un'unica tabella con un campo per ognuno degli elementi di dati elencati. Tuttavia, analizzando attentamente i dati, risulta ovvio che una tabella di questo tipo contiene diverse ridondanze. Numerosi autori, ad esempio, hanno scritto più libri e quindi le informazioni relative all'autore e all'editore per ogni libro verranno ripetute più volte. Se si inserissero tutti questi campi in un'unica tabella si genererebbe confusione e si otterrebbero voci duplicate.

Accanto alla normalizzazione delle alternative di progettazione, è utile tenere presente le diverse tecniche che consentono di denormalizzare intenzionalmente un database. La denormalizzazione intenzionale dei dati può essere motivata dal rilevamento di problemi di prestazioni oppure nel caso in cui si desideri semplificare la creazione di report ad-hoc. I problemi di prestazioni derivano dalle query per le quali, in produzione, è richiesto un numero troppo elevato di join di tabelle con uso intensivo del disco. Lo scopo della creazione di report ad-hoc è consentire agli utenti finali di eseguire query non strutturate, in quanto è possibile che utenti finali poco esperti non siano certi delle procedure necessarie per ottenere informazioni da più tabelle correlate.

Le tecniche di denormalizzazione comprendono la duplicazione dei dati, la possibilità di disporre di dati di riepilogo, la suddivisone di tabelle in partizioni orizzontali o verticali e la creazione di visualizzazioni denormalizzate per semplificare la creazione di report, ovvero un'alternativa intelligente che lascia invariato il database normalizzato.

Come esempio di denormalizzazione, si consideri il caso degli indirizzi dei clienti. Di solito, una tabella dei clienti comprende gli attributi nome, via, città, stato e codice di avviamento postale. Anche se la città e lo stato possono essere ricavati direttamente dal codice di avviamento postale, per cui è possibile normalizzare la tabella dei clienti eliminando la città e lo stato dai dati di ogni cliente, è pratica comune lasciare l'indirizzo denormalizzato.

Gli indirizzi vengono denormalizzati per diversi motivi:

  • Gli indirizzi vengono utilizzati in più posizioni (query, report, buste, schermate per il supporto ai clienti) e la denormalizzazione evita di aggiungere altro codice per la ricostruzione dell'indirizzo in tutta l'applicazione.
  • Per le query basate sugli indirizzi viene utilizzata una sintassi SQL molto più semplice.
  • Gli errori di indirizzo sono limitati a singoli clienti.



Nessun commento:

Posta un commento