Wann und warum entscheidet jemand, dass er eine Ansicht in seiner Datenbank erstellen muss? Warum nicht einfach eine normale gespeicherte Prozedur oder einen Select ausführen?
Antworten
Zu viele Anzeigen?Der größte Vorteil eines Views gegenüber einer gespeicherten Prozedur ist, dass Sie einen View genauso verwenden können wie eine Tabelle. Auf einen View kann nämlich direkt in der FROM
Klausel einer Abfrage. z.B., SELECT * FROM dbo.name_of_view
.
In fast jeder anderen Hinsicht sind gespeicherte Verfahren leistungsfähiger. Sie können Parameter übergeben, einschließlich out
Parameter, die es Ihnen ermöglichen, mehrere Werte auf einmal zurückzugeben, können Sie SELECT
, INSERT
, UPDATE
y DELETE
Operationen, etc. etc.
Wenn Sie möchten, dass die Fähigkeit einer Ansicht, Abfragen aus dem FROM
Klausel, aber Sie wollen auch in der Lage sein, Parameter zu übergeben, gibt es eine Möglichkeit, das auch zu tun. Man nennt sie eine tabellenwertige Funktion.
Hier ist ein sehr nützlicher Artikel zu diesem Thema:
EDIT: Das wirft übrigens die Frage auf, welchen Vorteil eine Ansicht gegenüber einer tabellenbewerteten Funktion hat. Darauf habe ich keine wirklich gute Antwort, aber ich möchte anmerken, dass die T-SQL-Syntax für die Erstellung eines Views einfacher ist als für eine tabellenwertige Funktion, und dass die Benutzer Ihrer Datenbank mit Views vielleicht besser vertraut sind.
Es kann als guter "Vermittler" zwischen Ihrem ORM und Ihren Tabellen fungieren.
Beispiel:
Wir hatten eine Personentabelle, deren Struktur wir ändern mussten, damit die Spalte SomeColumn in eine andere Tabelle verschoben werden konnte und eine Eins-zu-Viele-Beziehung zu ihr hatte.
Der größte Teil des Systems, was die Person anbelangt, verwendet SomeColumn jedoch immer noch als eine einzige Sache, nicht als viele Dinge. Wir haben eine Ansicht verwendet, um alle SomeColumns zusammenzuführen und sie in die Ansicht zu stellen, was gut funktioniert hat.
Dies funktionierte, weil sich zwar die Datenschicht geändert hatte, die geschäftlichen Anforderungen sich jedoch nicht grundlegend geändert hatten, so dass die Geschäftsobjekte nicht geändert werden mussten. Hätten sich die Geschäftsobjekte ändern müssen, wäre dies meiner Meinung nach keine brauchbare Lösung gewesen, aber die Ansichten sind auf jeden Fall ein guter Mittelweg.
Hier sind zwei häufige Gründe:
Sie können es zur Sicherheit verwenden. Gewähren Sie keine Berechtigungen für die Haupttabelle und erstellen Sie Ansichten, die den Spalten- oder Zeilenzugriff beschränken, und gewähren Sie den Benutzern die Berechtigung, die Ansicht zu sehen.
Sie können es aus Bequemlichkeit verwenden. Verbinden Sie einige Tabellen, die Sie immer wieder verwenden, in der Ansicht. Dies kann Abfragen konsistent und einfacher machen.
Konzentration auf bestimmte Daten Die Ansichten ermöglichen es den Benutzern, sich auf bestimmte Daten, die sie interessieren, und auf die spezifischen Aufgaben, für die sie zuständig sind, zu konzentrieren. Unnötige Daten können aus der Ansicht herausgenommen werden. Dies erhöht auch die Sicherheit der Daten, da die Benutzer nur die Daten sehen können, die in der Ansicht definiert sind, und nicht die Daten in der zugrunde liegenden Tabelle. Weitere Informationen über die Verwendung von Sichten zu Sicherheitszwecken finden Sie unter Verwendung von Sichten als Sicherheitsmechanismen.
Vereinfachung der Datenmanipulation Ansichten können die Bearbeitung von Daten durch die Benutzer vereinfachen. Sie können häufig verwendete Joins, Projektionen, UNION-Abfragen und SELECT-Abfragen als Ansichten definieren, so dass die Benutzer nicht jedes Mal alle Bedingungen und Qualifikationen angeben müssen, wenn eine zusätzliche Operation an diesen Daten durchgeführt wird. Beispielsweise kann eine komplexe Abfrage, die für Berichtszwecke verwendet wird und Unterabfragen, äußere Joins und Aggregationen durchführt, um Daten aus einer Gruppe von Tabellen abzurufen, als View erstellt werden. Der View vereinfacht den Zugriff auf die Daten, da die zugrunde liegende Abfrage nicht jedes Mal geschrieben oder übermittelt werden muss, wenn der Bericht erstellt wird; stattdessen wird der View abgefragt. Weitere Informationen zur Datenmanipulation finden Sie hier.
Sie können auch benutzerdefinierte Inline-Funktionen erstellen, die logischerweise als parametrisierte Ansichten arbeiten, oder Ansichten, die Parameter in WHERE-Klausel-Suchbedingungen haben. Weitere Informationen finden Sie unter Inline-Benutzerdefinierte Funktionen.
So passen Sie Daten an Ansichten ermöglichen es verschiedenen Benutzern, Daten auf unterschiedliche Weise zu sehen, auch wenn sie dieselben Daten gleichzeitig verwenden. Dies ist besonders vorteilhaft, wenn Benutzer mit unterschiedlichen Interessen und Kenntnissen dieselbe Datenbank nutzen. Zum Beispiel kann eine Ansicht erstellt werden, die nur die Daten der Kunden abruft, mit denen ein Kundenbetreuer zu tun hat. Die Ansicht kann auf der Grundlage der Anmelde-ID des Kundenbetreuers, der die Ansicht verwendet, bestimmen, welche Daten abgerufen werden sollen.
So exportieren und importieren Sie Daten Ansichten können für den Export von Daten in andere Anwendungen verwendet werden. Sie können zum Beispiel die Tabellen der Filialen und Verkäufe in der Pubs-Datenbank verwenden, um die Verkaufsdaten mit Microsoft® Excel zu analysieren. Zu diesem Zweck können Sie eine Ansicht erstellen, die auf den Filial- und Verkaufstabellen basiert. Mit dem Dienstprogramm bcp können Sie dann die in der Ansicht definierten Daten exportieren. Daten können auch mit dem Dienstprogramm bcp oder der Anweisung BULK INSERT aus Datendateien in bestimmte Ansichten importiert werden, vorausgesetzt, dass Zeilen mit der Anweisung INSERT in die Ansicht eingefügt werden können. Weitere Informationen über die Einschränkungen beim Kopieren von Daten in Views finden Sie unter INSERT. Weitere Informationen über die Verwendung des bcp-Dienstprogramms und der BULK INSERT-Anweisung zum Kopieren von Daten in und aus einem View finden Sie unter Kopieren in oder aus einem View.
So kombinieren Sie partitionierte Daten Der Transact-SQL-Operator UNION set kann innerhalb einer Ansicht verwendet werden, um die Ergebnisse von zwei oder mehr Abfragen aus separaten Tabellen in einer einzigen Ergebnismenge zu kombinieren. Dies erscheint für den Benutzer als eine einzige Tabelle, die als partitionierte Ansicht bezeichnet wird. Wenn beispielsweise eine Tabelle Verkaufsdaten für Washington und eine andere Tabelle Verkaufsdaten für Kalifornien enthält, kann eine Ansicht aus der UNION dieser Tabellen erstellt werden. Die Ansicht stellt die Verkaufsdaten für beide Regionen dar. Um partitionierte Ansichten zu verwenden, erstellen Sie mehrere identische Tabellen und geben eine Einschränkung an, um den Datenbereich zu bestimmen, der zu jeder Tabelle hinzugefügt werden kann. Der View wird dann unter Verwendung dieser Basistabellen erstellt. Wenn der View abgefragt wird, bestimmt SQL Server automatisch, welche Tabellen von der Abfrage betroffen sind und verweist nur auf diese Tabellen. Wenn beispielsweise eine Abfrage angibt, dass nur die Verkaufsdaten für den Bundesstaat Washington benötigt werden, liest SQL Server nur die Tabelle mit den Verkaufsdaten für Washington; auf andere Tabellen wird nicht zugegriffen.
Partitionierte Ansichten können auf Daten aus mehreren heterogenen Quellen basieren, z. B. auf Remote-Servern, und nicht nur auf Tabellen in derselben Datenbank. Um beispielsweise Daten von verschiedenen Remote-Servern zu kombinieren, von denen jeder Daten für eine andere Region Ihres Unternehmens speichert, können Sie verteilte Abfragen erstellen, die Daten aus jeder Datenquelle abrufen, und dann eine Ansicht auf der Grundlage dieser verteilten Abfragen erstellen. Alle Abfragen lesen nur Daten aus den Tabellen auf den Remote-Servern, die die von der Abfrage angeforderten Daten enthalten; auf die anderen Server, auf die von den verteilten Abfragen im View verwiesen wird, wird nicht zugegriffen.
Wenn Sie Daten über mehrere Tabellen oder mehrere Server verteilen, können Abfragen, die nur auf einen Teil der Daten zugreifen, schneller ausgeführt werden, da weniger Daten zu durchsuchen sind. Wenn sich die Tabellen auf verschiedenen Servern oder auf einem Computer mit mehreren Prozessoren befinden, kann jede an der Abfrage beteiligte Tabelle auch parallel gescannt werden, wodurch die Abfrageleistung verbessert wird. Darüber hinaus können Wartungsaufgaben, wie z. B. der Neuaufbau von Indizes oder das Sichern einer Tabelle, schneller ausgeführt werden. Durch die Verwendung einer partitionierten Ansicht erscheinen die Daten immer noch als eine einzige Tabelle und können als solche abgefragt werden, ohne dass manuell auf die richtige zugrunde liegende Tabelle verwiesen werden muss.
Aufgeteilte Ansichten sind aktualisierbar, wenn eine dieser Bedingungen erfüllt ist: Ein INSTEAD OF-Trigger ist für die Ansicht mit einer Logik zur Unterstützung von INSERT-, UPDATE- und DELETE-Anweisungen definiert.
Sowohl der View als auch die INSERT-, UPDATE- und DELETE-Anweisungen folgen den für aktualisierbare partitionierte Views definierten Regeln. Weitere Informationen finden Sie unter Erstellen einer partitionierten Ansicht.
https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join
Es gibt mehr als einen Grund, dies zu tun. Manchmal macht es gemeinsame Join-Abfragen einfach, da man nur einen Tabellennamen abfragen kann, anstatt alle Joins zu machen.
Ein weiterer Grund ist die Beschränkung der Daten auf verschiedene Nutzer. Also zum Beispiel:
Tabelle 1: Spalten - USER_ID;USERNAME;SSN
Admin-Benutzer können Zugriffsrechte auf die eigentliche Tabelle haben, aber Benutzer, die keinen Zugriff auf z. B. die SSN haben sollen, erstellen eine Ansicht als
CREATE VIEW USERNAMES AS SELECT user\_id, username FROM Table1;
Geben Sie ihnen dann Zugriffsrechte für die Ansicht und nicht für die Tabelle.