La migliore pratica è quella di sempre inizia con 3NF, quindi considera la denormalizzazione solo se trovi un problema di prestazioni specifico.
Le prestazioni sono solo una dei problemi che devi affrontare con i database. Duplicando i dati, corri il rischio di consentire la presenza di dati incoerenti nel tuo database, annullando così uno dei principi fondamentali dei database relazionali, la coerenza (il C
in ACID
).
Sì, i join hanno un costo, non c'è modo di aggirarlo. Tuttavia, il costo è solitamente molto inferiore a quanto si pensa e spesso può essere sommerso da altri fattori come i tempi di trasmissione della rete. Assicurandoti che le colonne pertinenti siano indicizzate correttamente, puoi evitare molti di questi costi.
E ricorda il mantra dell'ottimizzazione:misura, non indovinare! E misurare in un ambiente simile alla produzione. E mantieni misurazione (e ottimizzazione) periodicamente:l'ottimizzazione è solo un'operazione di impostazione e dimenticanza se lo schema e i dati non cambiano mai (molto improbabile).
Il ripristino delle prestazioni in genere può essere reso sicuro utilizzando i trigger per mantenere la coerenza. Ciò, ovviamente, rallenterà i tuoi aggiornamenti, ma potrebbe comunque consentire alle tue selezioni di essere eseguite più velocemente.