perché si consiglia alle persone di non aggiornare tramite le visualizzazioni


8

Durante il college è stato sbattuto nelle nostre teste per non aggiornare le tabelle attraverso le viste, e di nuovo quando sono arrivato sul posto di lavoro dove ci è stato detto di non aggiornare il database attraverso le viste.

Dove ci sono / Ci sono implicazioni significative in termini di prestazioni nel fare questo? O questo è più un caso di sviluppatori senior / DBA che dicono al personale junior di non farlo perché possono involontariamente provocare il caos con un join errato.

EDIT
Sto usando MSSQL 2000-2008 (a seconda dei dettagli del client)


Quale DBMS stai usando?
a_horse_with_no_name,

@a_horse_with_no_name Aggiornato per indicare DBMS. Speravo che la risposta fosse abbastanza generica in tutti i DBMS '. Ero ingenuo?
Tim Sparg,

Stai parlando di viste che sono naturalmente aggiornabili o viste per le quali dovresti scrivere un INSTEAD OFtrigger? Non ho sentito questo consiglio in particolare a proposito non ti è mai stato dato un motivo?
Martin Smith,

@TimSparg: dipende da come la vista è resa aggiornabile. Se instead ofvengono utilizzati i trigger, non vi è alcuna ambiguità e non vedo un motivo per non usarli. Ma non ho familiarità con SQL Server, quindi non posso commentare l'utilizzo delle viste senza trigger.
a_horse_with_no_name,

@Martin Smith Sto parlando di visualizzazioni naturalmente aggiornabili. Mi è stato vagamente detto che ci sono insidie ​​e problemi di prestazioni, questo è stato poi rafforzato sul mio posto di lavoro dove siamo stati fermamente invitati a non aggiornare attraverso le visualizzazioni. Sto iniziando a pensare che era solo qualcosa che gli sviluppatori / DBA senior avrebbero detto perché non avevano voglia di spiegare di stare attenti all'aggiornamento attraverso le visualizzazioni (IE interno vs esterno)
Tim Sparg,

Risposte:


10

Perché una vista sia aggiornabile senza utilizzare i INSTEAD OFtrigger "SQL Server deve essere in grado di tracciare in modo inequivocabile le modifiche dalla definizione della vista a una tabella di base". .

L'aggiornamento di queste viste non presenta svantaggi in quanto SQL Server genererà solo un piano di query per la tabella di base interessata. Un possibile svantaggio potrebbe essere che aggiunge un livello di offuscamento, quindi a meno che non si utilizzi Views come livello di sicurezza, è più chiaro scrivere semplicemente il codice che aggiorna direttamente la tabella di base.

Un altro potrebbe essere se la vista ne contiene una o più JOINe si aggiorna il lato "uno" con un valore dal lato "molti" non è determinante quale risultato si ottiene, ma lo stesso vale per la UPDATE ... FROMsintassi proprietaria di SQL Server . MERGEPer evitare questo possibile problema, è necessario utilizzare una query secondaria correlata scalare.

Per le viste che non sono aggiornabili e richiedono un INSTEAD OFtrigger, ci sono implicazioni sulle prestazioni in quanto le tabelle pseudo insertede deleteddevono essere generate dalla tabella di base, quindi se possibile l'aggiornamento delle tabelle di base sarà probabilmente più efficiente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.