DENORMALIZZARE E’ UN CONSIGLIO DISCUTIBILE PRESUPPOSTI ERRATI PORTANO A FALSI VANTAGGI Molto spesso si sente pronunciare la seguente frase: “Normalizzate a livello logico, ma denormalizzate a livello fisico. Quando le strutture dati sono denormalizzate è possibile soddisfare una richiesta SQL usando molto meno I/O fisico di quanto sarebbe altrimenti necessario”. Alla base di questa affermazione vi sono presupposti sbagliati. Infatti per quanto possa essere appropriato denormalizzare in certe situazioni, coloro che seguissero ciecamente il consiglio, molto probabilmente otterrebbero una Banca Dati poco efficiente. Vediamo quali sono i presupposti sbagliati e quale è invece la realtà. Presupposto 1: “Normalizzato significa in terza forma normale (3NF)”. La teoria della normalizzazione costituisce una disciplina collaterale al modello relazionale. Le forme normali conosciute sono 6, corrispondenti ad altrettanti stati in cui può trovarsi una relazione. La 3NF è quella preferibile, in termini di flessibilità del database a lungo termine e di manutenzione delle applicazioni. L’utilizzo di uno strumento CASE per la disegnare un modello concettuale dei dati, porta alla realizzazione di un modello in 3NF, quindi privo di ridondanze. Presupposto 2: “Il controllo sulle prestazioni è a carico del programmatore”. Questo è un concetto obsoleto. L’ottimizzazione di una Banca Dati è di pertinenza del DBA. Ciò non significa che nello sviluppo delle applicazioni si debba ignorare l’aspetto delle prestazioni in quanto esse derivano sia dal disegno dei dati che dal disegno delle applicazioni. Inoltre, se si usano compromessi sul disegno dati, sarà molto difficile ottenere vantaggi dal miglioramento delle prestazioni di future versioni del DBMS. Presupposto 3: “Tutte le attività sul database implicano I/O fisico”. In teoria è possibile che un intero Database risieda in memoria per lunghi periodi. In tal caso le operazioni di SELECT, INSERT, UPDATE, DELETE non richiederebbero I/O fisico. E adesso, la realtà. Affermare che “denormalizzare equivale a ridurre I/O fisico” non è corretto. Un disegno normalizzato talvolta può richiedere meno I/O in quanto le righe di una tabella normalizzata sono più corte e quindi in una pagina fisica ce ne stanno di più. Inoltre tramite la tecnica di “clusterizzazione” di tabelle, molte righe correlate possono essere recuperate con un’unica operazione di I/O. Viceversa le righe di una tabella denormalizzata, sono più lunghe e quindi occupano più spazio e consentono a meno righe correlate di essere salvate nella stessa pagina fisica. Più importante delle prestazioni è l’ulteriore difficoltà che la denormalizzazione introduce nello sviluppo applicativo e nell’interrogazione della base dati. Conclusioni. Consentire la denormalizzazione significherebbe avere banche dati progettate per fornire buone prestazioni alle applicazioni iniziali ma con buone probabilità di essere responsabili di creare effetti svantaggiosi alle applicazioni successive. Piuttosto che denormalizzare, è preferibile adottare un insieme di misure di tuning fisico, che coprono aspetti di indicizzazione, ottimizzazione delle query, strategia di locking, attività di manutenzione, selezione di appropriati parametri di sistema. Infatti non bisogna dimenticare che i “miglioramenti in termini di prestazioni” per i prodotti relazionali sono sempre più significativi con il rilascio di nuove release. Le banche dati progettate con la filosofia relazionale di approccio ai dati risultano essere le più flessibili. Sono semplici, non ridondanti, condivisibili ed espandibili. Quando la progettazione logica e fisica di un database è fatta seguendo scrupolosamente la rappresentazione concettuale, il sistema è concepito per rispondere non solo ai bisogni immediati, ma anche a quelli di applicazioni future.