2009-03-10 14 views
27

Questa domanda riguarda le viste del database, non visualizzazioni materializzate.Quando utilizzare le viste del database e quando no?

Pro:

  • semplificazione Query.
  • Evitare di ripetere gli stessi join su query multiple.
  • Evitare numeri magici.

Contro:

  • Hiding query reali (potrebbero essere state ripetendo unisce).

Cos'altro?

+0

[qui] [1] è un'altra risposta penso che sarà utile [1]: http://stackoverflow.com/questions/1278521/why-do-you-create- a-vista-in-a-base di dati – saman

risposta

11

Pro: Consente di modificare le strutture di dati sottostanti senza influenzare le query applicazioni utilizzano (a patto che il vista può nascondere le strutture di dati)

7

Visualizzazioni sono abbastanza impressionante quando non del tutto attendibile la parte inviando query al tuo database. Un buon esempio potrebbe essere la creazione di una vista sui tavoli per un appaltatore in modo che tutto ciò che possono vedere siano le righe relative al loro progetto.

11

Sicurezza. Concedi l'accesso su una vista agli utenti che dovrebbero essere in grado di vedere le colonne restituite da esso.

0

Sono solito usarli tutto il tempo, ora raramente. Tuttavia, faccio tutto il mio accesso ai dati attraverso le stored procedure, quindi l'utilità di una vista è un po 'meno poiché l'SP può nascondere la complessità del join dove necessario.

Considererei ancora l'utilizzo di una vista se si fosse verificata una combinazione particolarmente complessa di molti tavoli, da cui avevo bisogno di costruire molti SP in cima, ma per essere onesti, non riesco a pensare a nessuno di essi in produzione in questo momento.

L'altro scenario sarebbe utilizzare uno sarebbe dove i miei utenti hanno accesso al database per generare i propri report, e ho voluto nascondere la complessità sottostante per loro.

3

Ora che SQL Server ha common table expressions mi ritrovo a creare meno visualizzazioni. Quando creo una vista, di solito è per una gerarchia normalizzata che può essere utilizzata in molte query, non qualcosa che sostituisce una query.

Ad esempio, Regione, Mercato e Città possono essere tre tabelle normalizzate (fiocco di neve). Il 90% delle mie query ha bisogno di questi dati, quindi creerò una vista. La vista non sostituisce mai una singola query ma rende tutte le altre query semplici e ASCIUTTE.

4

Sebbene le viste possano nascondere la complessità e più join, si tratta comunque di una complessità che sarebbe stata presente nella SP.

Se l'SP poteva essere ottimizzato, la vista dovrebbe essere ottimizzata, il che porterebbe a un aumento delle prestazioni su tutti gli SP che hanno colpito quella vista.

Le visualizzazioni sono incredibilmente potenti e utili per una ragione che spicca soprattutto per le altre ottime ragioni. Riducono la duplicazione del codice. Cioè, nella maggior parte dei casi, la linea di fondo. Se una query verrà utilizzata in tre o più posizioni, una vista semplificherà drasticamente le modifiche se cambiano i parametri dello schema o della query.

Una volta ho dovuto modificare 22 stored procedure per modificare qualche logica di query. Se l'architettura originale avesse utilizzato le viste, avrei avuto solo tre modifiche.

1

Ho dovuto usare le viste un paio di volte per fare strani join e raggruppare per alias.

Con strani join, intendo selezionare un elenco di date distinte e quindi esterno unirle alla tabella da cui provengono per ottenere voci nulle per i giorni vuoti. Non riuscivo a capire nessun altro modo di farlo.

Come per il raggruppamento per alias, sembrava dipendere dalla complessità della formula all'interno dell'alias. Se l'alias non ha fatto riferimento a colonne effettive o a colonne già raggruppate, tutto andava bene, ma gli alias sulle colonne che non erano inclusi nel raggruppamento causavano errori di lancio.

Mi sembra di ricordare di aver letto o sentito da qualche parte durante i miei giorni universitari che selezionare da una vista era più rapido che selezionare da un gruppo di tabelle unite, ma non so se è vero.

Un ultimo vantaggio dell'utilizzo di una vista: tabelle pivot in Excel. Non penso che ci sia un modo per unire le tabelle, o almeno non nell'interfaccia della procedura guidata. Potrebbe essere possibile eseguire join in Microsoft Query, ma non ho ancora provato perché il pensiero mi è appena venuto in mente.

Problemi correlati