2009-11-20 7 views
7

Quali sono i pro/contro della de-normalizzazione di un database di applicazioni aziendali perché renderà più facili i report di scrittura?De-normalizzare i dati in tempo reale a scopo di segnalazione - Buono o cattivo?

Pro - progettare report in SSRS sarà probabilmente "più semplice" poiché non saranno necessari join.

Con - lo sviluppo/mantenimento dell'applicazione per gestire i dati non normalizzati diventerà più difficile a causa della duplicazione dei dati e della sincronizzazione.

Altri?

+0

In realtà non sto considerando la de-normalizzazione nell'interesse per i report. Sto costruendo un argomento in modo da non doverlo fare. –

+0

La normalizzazione rende molto più semplice inserire i dati in un database (compresi i costi come assicurarsi che tutto sia coerente). La denormalizzazione facilita il recupero dei dati da un database. –

risposta

19

La denormalizzazione a fini di segnalazione è Bad, m'kay.

La creazione di viste o un data warehouse denormalizzato è buono.

Le viste hanno risolto la maggior parte dei miei bisogni relativi ai rapporti. I data warehouse sono eccezionali quando gli utenti generano i report quasi costantemente o quando le visualizzazioni iniziano a rallentare.

Questo è il motivo per cui si vuole normalizzare il database

  1. per liberare la raccolta delle relazioni da indesiderabili dipendenze di inserimento, aggiornamento e cancellazione;
  2. Per ridurre la necessità di ristrutturare la raccolta di relazioni quando vengono introdotti nuovi tipi di dati e quindi aumentare la durata dei programmi applicativi;
  3. Per rendere il modello relazionale più informativo per gli utenti;
  4. Per rendere la raccolta di relazioni neutrale rispetto alle query statistiche, dove queste statistiche possono cambiare col passare del tempo.

-E.F. Codd, "ulteriore normalizzazione del Data Base relazionale Modello" via wikipedia

+2

La vista non è sempre la risposta, anche se molti li raccomandano. Se si dispone di un join complesso a causa di un progetto di database altamente normalizzato, il tempo di esecuzione per una visualizzazione può diventare inaccettabile. –

+2

+1 per mKay - jk, i miei pensieri esattamente –

+0

Sono d'accordo con Irwin, le visualizzazioni non saranno d'aiuto se il problema è il rendimento – ennuikiller

6

L'unica volta che si deve considerare la de-normaliozazione è quando il tempo impiegato dal rapporto per generare non è accettabile. La de-normalizzazione causerà problemi di coerenza che a volte sono impossibili da determinare, specialmente nei dataset di grandi dimensioni

+0

Sono d'accordo e aggiungo: Se stai per de-normalizzare, devi anche assicurarti di definire qualche procedura o processo per assicurarti che tutti i dati de-normalizzati siano mantenuti sincronizzati e aggiornati. – FrustratedWithFormsDesigner

0

Un altro difetto è che i dati sono suscettibili di non essere in tempo reale, in quanto v'è un certo tempo si muove attorno ai dati di passare da una forma normalizzata per un de-normalizzato. Se qualcuno vuole che il rapporto sia all'altezza del secondo richiesto, ciò può essere difficile da fare in questa situazione.

Se si tratta di una duplicazione della sincronizzazione nel post originale, mi dispiace non l'ho visto in quel modo.

+0

In realtà, la domanda non riguardava la de-normalizzazione just-in-time. Ma in realtà de-normalizzare le strutture in modo permanente. Qual è quello che mi è stato chiesto di fare. –

+0

La mia intenzione era che alcuni requisiti per i report potrebbero cambiare nel tempo e mentre il report potrebbe generarsi per ogni mese o trimestre, qualcuno potrebbe voler ottenere i dati APPENA POSSIBILE e quindi il dilemma nasce. –

+0

Capisco. Per ora, i report vengono eseguiti in tempo reale tramite il visualizzatore di report SSRS. Gli utenti hanno un sacco di dropdown e campi attraverso i quali possono modificare i parametri e riprovare a loro piacimento. Il nostro attuale modello normalizzato non ha problemi di prestazioni con questo processo in tempo reale. –

4

Non denormalizzare solo per eliminare la complessità dei rapporti, può causare enormi problemi nel resto dell'applicazione. O non si applicano le regole risultanti in dati errati o se lo si fa, quindi inserimenti, eliminazioni e aggiornamenti possono essere seriamente rallentati per tutti, non solo per le due o tre persone che eseguono i report.

Se i report non funzionano veramente bene, quindi creare un data warehouse denormalizzato e popolarlo in un feed notturno o settimanale. Il tipo di report che in genere richiedono questo tipo di solito non interessa se i dati sono aggiornati al minuto, in quanto sono di solito report mensili, trimestrali o annuali che elaborano (e soprattutto aggregano) grandi quantità di dati dopo il fatto.

2

Puoi fare entrambe le cose ...lascia il database normalizzato per le applicazioni. Quindi creare un database denormalizzato per i report e creare un'applicazione che regoli i dati di copia da un database all'altro.

Dopo tutto, i report non devono sempre disporre dei dati aggiornati più recenti, il più delle volte è possibile avviare facilmente un aggiornamento ogni 1 ora nel database di report e solo una volta al giorno.

1

Oltre il data warehouse e le soluzioni di visualizzazione fornite in altre risposte, che sono buone in qualche modo, se si è disposti a sacrificare alcune prestazioni per ottenere un buono all'ultimo secondo di dati, ma si desidera comunque un database normalizzato, è possibile utilizzare su Oracle una vista materializzata con aggiornamento rapido su commit, o in SQL Server, è possibile utilizzare gli indici cluster per una vista.