Während des Studiums wurde es uns in den Kopf geschlagen, Tabellen nicht durch Ansichten zu aktualisieren, und als ich wieder am Arbeitsplatz ankam, wurde uns gesagt, dass wir die Datenbank nicht durch Ansichten aktualisieren sollten.
Wo gibt es / Gibt es signifikante Auswirkungen auf die Leistung? Oder handelt es sich eher um einen Fall, in dem leitende Entwickler / Datenbankadministratoren Nachwuchskräften sagen, dass sie dies nicht tun sollen, weil sie mit einer falschen Verbindung unabsichtlich Chaos anrichten können.
BEARBEITEN
Ich verwende MSSQL 2000-2008 (abhängig von den Angaben des Clients)
sql-server-2008
view
Tim Sparg
quelle
quelle
INSTEAD OF
Auslöser schreiben müssten ? Ich habe diesen Rat nicht besonders gehört. Übrigens, haben Sie nie einen Grund angegeben?instead of
Trigger verwendet werden, gibt es keine Mehrdeutigkeit und ich sehe keinen Grund, sie nicht zu verwenden. Aber ich bin mit SQL Server nicht so vertraut, daher kann ich die Verwendung von Ansichten ohne Trigger nicht kommentieren.Antworten:
Damit eine Ansicht ohne Verwendung von
INSTEAD OF
Triggern aktualisiert werden kann "SQL Server muss in der Lage sein, Änderungen von der Ansichtsdefinition eindeutig auf eine Basistabelle zu verfolgen." .Das Aktualisieren dieser Ansichten hat keinen Leistungsnachteil, da SQL Server nur einen Abfrageplan für die betroffene Basistabelle generiert. Ein möglicher Nachteil könnte darin bestehen, dass eine Verschleierungsebene hinzugefügt wird. Wenn Sie also Views nicht als Sicherheitsschicht verwenden, ist es klarer, nur Code zu schreiben, der die Basistabelle direkt aktualisiert.
Eine andere Möglichkeit besteht darin, dass die Ansicht eine Eins zu Viele enthält
JOIN
und Sie die "Eins" -Seite mit einem Wert von der "Viele" -Seite aktualisieren. Es ist unbestimmt, welches Ergebnis Sie erzielen, dies gilt jedoch auch für die proprietäreUPDATE ... FROM
Syntax von SQL Server . Sie müsstenMERGE
eine skalarkorrelierte Unterabfrage verwenden, um dieses mögliche Problem zu vermeiden.Für Ansichten , die nicht aktualisierbar und erfordern einen sind
INSTEAD OF
Auslöser gibt es Auswirkungen auf die Leistung als dieinserted
unddeleted
Pseudo-Tabellen müssen aus der Basistabelle erzeugt werden , um , wenn möglich , die Aktualisierung der Basistabellen direkt wahrscheinlich effizienter sein wird.quelle