Domanda

Al momento sto progettando una nuova app, con un rapporto read: write elevato. Al mio attuale datore di lavoro abbiamo un sacco di dati denormalizzati sulle nostre tabelle per motivi di prestazioni. È meglio avere tabelle totalmente 3NF e quindi utilizzare viste indicizzate per eseguire tutta la denormalizzazione? Devo eseguire query su tabelle o viste?

Un esempio di alcune delle cose che mi interessano sono aggregati di colonne tabelle secondarie (ad es. con un conteggio dei post degli utenti archiviato da qualche parte).

È stato utile?

Soluzione

In generale è una buona idea avere viste denormalizzate se è necessario accedere a più tabelle normalizzate molto frequentemente. Nella maggior parte dei casi si tratterà di un aumento significativo delle prestazioni rispetto all'utilizzo di un join e alla query direttamente rispetto alle tabelle, e di solito non è meno gestibile, dal momento che la vista o il join possono essere scritti in modo agnostico sulle modifiche a parti delle tabelle che non usa.

Se tutto i tuoi tavoli debbano essere nella terza forma normale è un'altra domanda. Nella maggior parte delle applicazioni con cui ho lavorato, la risposta è la maggior parte le tabelle dovrebbero essere normalizzate in questo modo, ma ci sono eccezioni. Se fare un'eccezione ha a che fare con il modo in cui i dati vengono utilizzati e se si può essere molto sicuri che quell'uso non cambi in futuro.

Dover tornare indietro e ri-normalizzare in seguito perché hai fatto qualcosa nel modo sbagliato può essere costoso, ma l'eccessiva normalizzazione dei dati che dovrebbe essere semplice da usare e comprendere può rendere le cose più complicate e difficili da mantenere di quanto non debbano essere . Il chilometraggio può variare.

Altri suggerimenti

Se si intende utilizzare le viste per presentare dati denormalizzati all'utente (e si utilizza SQL Server), è necessario controllare la clausola SCHEMABINDING. Se una vista è schemabound, è possibile indicizzarla e l'indice verrà aggiornato quando vengono aggiornate le tabelle sottostanti. In questo modo, se gli indici sono impostati correttamente, le persone che cercano dati possono effettivamente selezionare dall'indice, quindi non sarà necessario ricostruire la vista complessa per ogni query, ma gli utenti visualizzeranno comunque aggiornati data in cui cambiano le tabelle sottostanti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top