Freigeben über


Szenarien für das Verwenden von Sichten

Im Allgemeinen werden Sichten verwendet, um die Darstellung einer Datenbank für jeden einzelnen Benutzer einzuschränken, zu vereinfachen und anzupassen. Sichten können als Sicherheitsmechanismen verwendet werden, da Benutzern der Zugriff auf Daten über Sichten ermöglicht werden kann, ohne diesen Benutzern jedoch die Berechtigungen für den direkten Zugriff auf die der Sicht zugrunde liegenden Basistabellen zu gewähren. Sichten können verwendet werden, um eine abwärtskompatible Schnittstelle zum Emulieren einer Tabelle bereitzustellen, die zuvor vorhanden war, aber deren Schema geändert wurde. Sichten können auch verwendet werden, wenn Sie Daten zu und von Microsoft SQL Server kopieren, um die Leistung zu verbessern oder um Daten zu partitionieren.

Beschränken auf bestimmte Daten

Sichten ermöglichen es Benutzern, die Anzeige auf bestimmte, für sie interessante Daten und relevante Aufgaben zu beschränken. Nicht benötigte oder vertrauliche Daten können aus der Sicht ausgeschlossen werden.

So ermöglicht z. B. eine vBikes-Sicht in der AdventureWorks2008R2-Beispieldatenbank den Benutzern, die Namen aller Fahrräder anzuzeigen, die gegenwärtig auf Lager sind. Die Sicht filtert aus der Product-Tabelle alle Felder außer Name aus und gibt nur die Namen der fertigen Fahrräder und nicht die der Fahrradkomponenten zurück.

CREATE VIEW vBikes AS
SELECT DISTINCT p.[Name] FROM Production.Product p
    JOIN Production.ProductInventory i ON p.ProductID = i.ProductID
    JOIN Production.ProductSubCategory ps 
        ON p.ProductSubcategoryID = ps.ProductSubCategoryID 
    JOIN Production.ProductCategory pc 
        ON (ps.ProductCategoryID = pc.ProductCategoryID 
            AND pc.Name = N'Bikes')
        AND i.Quantity > 0

Vereinfachen der Datenbearbeitung

Sichten können die Methoden vereinfachen, die Benutzer zur Arbeit mit Daten verwenden. Sie können häufig verwendete Verknüpfungen, Projektionen, UNION-Abfragen und SELECT-Abfragen als Sicht definieren, sodass die Benutzer bei der weiteren Verwendung der Daten nicht alle Bedingungen und Einschränkungen erneut angeben müssen. So kann z. B. eine komplexe Abfrage zur Erstellung eines Berichts, die Unterabfragen, äußere Verknüpfungen und Aggregationen ausführt, um Daten aus einer Gruppe von Tabellen abzurufen, als Sicht erstellt werden. Die Sicht vereinfacht den Zugriff auf die Daten, da die zugrunde liegende Abfrage nicht jedes Mal neu geschrieben oder abgesendet werden muss, wenn der Bericht erstellt wird; stattdessen wird die Sicht abgefragt. Weitere Informationen zum Ändern von Daten finden Sie unter Grundlegende Informationen zu Abfragen.

Obwohl es sich dabei nicht um eine komplexe Abfrage handelt, ermöglicht die vBikes-Sicht in der AdventureWorks2008R2-Beispieldatenbank den Benutzern die Beschränkung auf bestimmte Daten, ohne dass dazu die JOIN-Klauseln, die zum Erstellen der Sicht erforderlich sind, erstellt werden müssen.

Sie können auch benutzerdefinierte Inlinefunktionen erstellen, die logisch als parametrisierte Sichten funktionieren, oder Sichten mit Parametern in Suchbedingungen von WHERE-Klauseln oder anderen Teilen der Abfrage. Weitere Informationen finden Sie unter Benutzerdefinierte Inlinefunktionen.

Gewährleisten der Abwärtskompatibilität

Sichten ermöglichen Ihnen das Erstellen einer abwärtskompatiblen Schnittstelle für eine Tabelle, wenn sich deren Schema ändert. So kann z. B. eine Anwendung auf eine nicht normalisierte Tabelle verwiesen haben, die das folgende Schema aufweist:

Employee(Name, BirthDate, Salary, Department, BuildingName)

Um ein redundantes Speichern von Daten in der Datenbank zu vermeiden, könnten Sie die Tabelle normalisieren, indem Sie sie in die folgenden beiden Tabellen aufteilen:

Employee2(Name, BirthDate, Salary, DeptId)

Department(DeptId, BuildingName)

Sie können die alte Employee-Tabelle löschen und durch die folgende Sicht ersetzen, um eine abwärtskompatible Schnittstelle bereitzustellen, die weiterhin auf Daten aus Employee verweist:

CREATE VIEW Employee AS
SELECT Name, BirthDate, Salary, BuildingName
FROM Employee2 e, Department d
WHERE e.DeptId = d.DeptId

Für Anwendungen, von denen bisher die Employee-Tabelle abgefragt wurde, können jetzt Daten aus der Employee-Sicht abgerufen werden. Die Anwendung muss nicht geändert werden, wenn nur Daten aus der Employee-Sicht gelesen werden. Anwendungen, mit denen Employee aktualisiert wird, können in einigen Fällen auch unterstützt werden, indem der Sicht INSTEAD OF-Trigger hinzugefügt werden, um den zugrunde liegenden Tabellen INSERT-, DELETE- und UPDATE-Vorgänge für die neue Sicht zuzuordnen. Weitere Informationen finden Sie unter Entwerfen von INSTEAD OF-Triggern.

Anpassen von Daten

Mithilfe von Sichten können verschiedene Benutzer Daten auf unterschiedliche Weise anzeigen, selbst wenn die Daten gleichzeitig verwendet werden. Dies ist insbesondere dann von Vorteil, wenn Benutzer mit unterschiedlichen Interessen und Fähigkeiten auf dieselbe Datenbank zugreifen. So kann z. B. eine Sicht erstellt werden, die nur die Daten derjenigen Kunden abruft, für die ein bestimmter Sachbearbeiter auch tatsächlich zuständig ist. Die Sicht kann die abzurufenden Daten anhand des Benutzernamens des Sachbearbeiters ermitteln, der die Sicht verwendet.

Exportieren und Importieren von Daten

Mithilfe von Sichten können Sie Daten in andere Anwendungen exportieren. So können Sie z. B. die Tabellen Customer und SalesOrderHeader in der AdventureWorks2008R2-Datenbank verwenden, um die Verkaufsdaten mithilfe von Microsoft Excel zu analysieren. Zu diesem Zweck können Sie eine Sicht erstellen, die auf den Customer- und SalesOrderHeader-Tabellen basiert. Anschließend können Sie die durch die Sicht definierten Daten mithilfe des Dienstprogramms bcp exportieren. Mithilfe des Dienstprogramms bcp oder der BULK INSERT-Anweisung können Daten auch aus Datendateien in bestimmte Sichten importiert werden, wenn die Zeilen mithilfe der INSERT-Anweisung in die Sicht eingefügt werden können. Weitere Informationen zu den Einschränkungen beim Kopieren von Daten in Sichten finden Sie unter INSERT (Transact-SQL). Weitere Informationen zum Verwenden des Dienstprogramms bcp und der BULK INSERT-Anweisung beim Kopieren von Daten in eine Sicht und aus einer Sicht finden Sie unter Massenexport von Daten aus einer Sicht oder Massenimport von Daten in eine Sicht.

Kombinieren partitionierter Daten auf mehreren Servern

Der UNION-Mengenoperator von Transact-SQL kann innerhalb einer Sicht verwendet werden, um die Ergebnisse von zwei oder mehr Abfragen aus unterschiedlichen Tabellen in einem einzigen Resultset zu kombinieren. Dieses Resultset wird dem Benutzer als eine einzige Tabelle angezeigt, die als partitionierte Sicht bezeichnet wird. Wenn eine Tabelle z. B. Verkaufsdaten für Washington und eine andere Tabelle Verkaufsdaten für Kalifornien enthält, kann mithilfe von UNION eine Sicht aus diesen beiden Tabellen erstellt werden. Die Sicht stellt die Verkaufsdaten für beide Regionen dar.

Bei der Verwendung partitionierter Sichten erstellen Sie mehrere identische Tabellen, wobei Sie eine Einschränkung angeben, die den Bereich der Daten bestimmt, die zu jeder einzelnen Tabelle hinzugefügt werden können. Die Sicht wird anschließend mithilfe dieser Basistabellen erstellt. Wenn die Sicht abgefragt wird, ermittelt SQL Server automatisch die von der Abfrage betroffenen Tabellen und verweist ausschließlich auf diese Tabellen. Wenn eine Abfrage z. B. angibt, dass nur die Verkaufsdaten für den Staat Washington benötigt werden. SQL Server liest in diesem Fall nur die Tabelle, die die Verkaufsdaten für Washington enthält; ein Zugriff auf weitere Tabellen erfolgt nicht.

Partitionierte Sichten können auf Daten aus mehreren heterogenen Quellen, wie z. B. aus Remoteservern basieren, um ein vereintes Datenbankserversystem zu erstellen. Wenn Sie z. B. Daten von verschiedenen Remoteservern kombinieren möchten und auf jedem Server die Daten für einen anderen Bereich Ihrer Organisation gespeichert sind, können Sie verteilte Abfragen erstellen, mit denen die Daten aus jeder Datenquelle abgerufen werden, und dann auf der Basis dieser verteilten Abfragen eine Sicht erstellen. Jede Abfrage liest nur Daten aus den Tabellen auf den Remoteservern, die die von der Abfrage angeforderten Daten enthalten; ein Zugriff auf die anderen Server, auf die in den verteilten Abfragen in der Sicht verwiesen wird, erfolgt nicht.

Wenn Sie Daten tabellenübergreifend partitionieren, können Abfragen, die nur auf einen Teil der Daten zugreifen, schneller ausgeführt werden, da der Umfang der zu scannenden Daten geringer ist. Wenn sich die Tabellen auf unterschiedlichen Servern oder auf einem Computer mit mehreren Prozessoren befinden, können die einzelnen Tabellen, die in die Abfrage einbezogen werden, auch parallel gescannt werden. Das kann die Abfrageleistung verbessern. Darüber hinaus können Wartungsaufgaben schneller ausgeführt werden, wie z. B. das erneute Erstellen eines Indexes oder das Sichern einer Tabelle.

Durch das Verwenden partitionierter Sichten werden die Daten weiterhin als eine einzelne Tabelle angezeigt und können auch genauso abgefragt werden. Ein manueller Verweis auf die jeweils richtige zugrunde liegende Tabelle ist nicht erforderlich.

HinweisHinweis

Die bevorzugte Methode zum Partitionieren von lokalen Daten auf einem Server besteht in der Verwendung partitionierter Tabellen. Weitere Informationen finden Sie unter Partitionierte Tabellen und Indizes.

Partitionierte Sichten können aktualisiert werden, wenn eine der folgenden Bedingungen zutrifft:

  • Ein INSTEAD OF-Trigger ist mit Logik zur Unterstützung von INSERT-, UPDATE- und DELETE-Anweisungen für die Sicht definiert.

  • Sowohl die Sicht als auch die INSERT-, UPDATE- und DELETE-Anweisungen entsprechen den Regeln für aktualisierbare partitionierte Sichten. Weitere Informationen finden Sie unter Erstellen von partitionierten Sichten.