it-swarm.com.de

Warum erstellen Sie eine Ansicht in einer Datenbank?

Wann und warum entscheidet jemand, dass er eine Ansicht in seiner Datenbank erstellen muss? Warum nicht einfach eine normale gespeicherte Prozedur ausführen oder auswählen?

246
MedicineMan

Eine Ansicht bietet mehrere Vorteile.

1. Ansichten können Komplexität verbergen

Wenn Sie eine Abfrage haben, die das Zusammenfügen mehrerer Tabellen erfordert, oder wenn Sie komplexe Logik oder Berechnungen haben, können Sie die gesamte Logik in eine Ansicht codieren. Wählen Sie dann aus der Ansicht genau wie eine Tabelle aus.

2. Ansichten können als Sicherheitsmechanismus verwendet werden

Eine Ansicht kann bestimmte Spalten und/oder Zeilen aus einer Tabelle auswählen und Berechtigungen für die Ansicht anstelle der zugrunde liegenden Tabellen festlegen. Dadurch können nur die Daten angezeigt werden, die ein Benutzer sehen muss.

3. Ansichten können die Unterstützung von Legacy-Code vereinfachen

Wenn Sie eine Tabelle umgestalten müssen, bei der viel Code beschädigt wurde, können Sie die Tabelle durch eine Ansicht mit demselben Namen ersetzen. Die Ansicht bietet genau das gleiche Schema wie die Originaltabelle, während sich das tatsächliche Schema geändert hat. Dadurch wird verhindert, dass der alte Code, der auf die Tabelle verweist, beschädigt wird, sodass Sie den alten Code nach Belieben ändern können.

Dies sind nur einige der vielen Beispiele, wie Ansichten nützlich sein können.

432
Dave Carlile

Es kann unter anderem zur Sicherheit eingesetzt werden. Wenn Sie über eine Kundentabelle verfügen, möchten Sie möglicherweise allen Vertriebsmitarbeitern Zugriff auf die Felder Name, Adresse, Postleitzahl usw. gewähren, jedoch nicht auf credit_card_number. Sie können eine Ansicht erstellen, die nur die Spalten enthält, auf die sie zugreifen müssen, und ihnen dann Zugriff auf die Ansicht gewähren.

82
Graeme Perrow

Eine Ansicht ist eine Kapselung einer Abfrage. Abfragen, die in Ansichten umgewandelt werden, sind in der Regel kompliziert. Daher kann das Speichern als Ansicht für die Wiederverwendung von Vorteil sein.

38
Andrew Hare

Normalerweise erstelle ich Ansichten, um häufig zur Berichterstellung verwendete Daten zu demormalisieren und/oder zu aggregieren. 

EDIT

Wenn ich über eine Datenbank verfügte, in der einige der Entitäten Person, Firma, Rolle, Eigentümertyp, Auftrag, Bestelldetail, Adresse und Telefon waren, in der die Personentabelle sowohl Mitarbeiter und Kontakte als auch die Adresse und gespeichert hat In Telefontabellen wurden Telefonnummern sowohl für Personen als auch für Unternehmen gespeichert. Das Entwicklungsteam hatte die Aufgabe, Berichte zu generieren (oder Berichtsdaten für Nichtentwickler zugänglich zu machen), z. B. Verkäufe nach Mitarbeitern oder Verkäufe nach Kunden oder Verkäufe nach Regionen, Verkäufe nach Monat , Kunden nach Bundesstaat usw. Ich würde eine Reihe von Ansichten erstellen, die die Beziehungen zwischen den Datenbankentitäten demormalisieren, so dass eine stärker integrierte Sicht (kein Wortspiel beabsichtigt) der Entitäten in der realen Welt verfügbar ist. Zu den Vorteilen gehören:

  1. Redundanz beim Schreiben von Abfragen reduzieren
  2. Festlegung eines Standards für verbundene Einheiten
  3. Bereitstellen von Möglichkeiten zur Bewertung und Maximierung der Leistung .__ für komplexe Berechnungen und Verknüpfungen (Z. B. Indizieren von Schemabound-Ansichten in MSSQL)
  4. Daten zugänglicher machen und für Teammitglieder und Nicht-Entwickler intuitiv.
27
cmsjr

Mehrere Gründe: Wenn Sie komplizierte Joins haben, ist es manchmal am besten, eine Ansicht zu haben, damit bei jedem Zugriff immer die Joins korrekt sind und die Entwickler sich nicht alle Tabellen merken müssen, die sie benötigen. Dies kann in der Regel für eine Finanzanwendung gelten, bei der es äußerst wichtig wäre, dass alle Finanzberichte auf demselben Datensatz basieren.

Wenn Sie Benutzer haben, die die Datensätze einschränken möchten, die sie jemals sehen können, können Sie eine Sicht verwenden, ihnen nur Zugriff auf die Sicht und nicht auf die zugrunde liegenden Tabellen gewähren und dann die Sicht abfragen

Crystal Reports scheint es vorzuziehen, Views für gespeicherte Procs zu verwenden, so dass Menschen, die viel schreiben, tendenziell viele Views verwenden

Ansichten sind auch beim Refactoring von Datenbanken sehr hilfreich. Sie können die Änderung oft ausblenden, damit der alte Code sie nicht sieht, indem Sie eine Ansicht erstellen. Lesen Sie über das Umgestalten von Datenbanken, um zu sehen, wie dies funktioniert, da dies eine sehr effektive Methode zum Umgestalten ist.

10
HLGEM

Der Hauptvorteil einer Ansicht gegenüber einer gespeicherten Prozedur besteht darin, dass Sie eine Ansicht genauso wie eine Tabelle verwenden können. Eine Sicht kann nämlich direkt in der FROM-Klausel einer Abfrage referenziert werden. Zum Beispiel SELECT * FROM dbo.name_of_view.

In fast jeder Hinsicht sind gespeicherte Prozeduren leistungsfähiger. Sie können Parameter übergeben, darunter out-Parameter, mit denen Sie effektiv mehrere Werte gleichzeitig zurückgeben können. Sie können Operationen SELECT, INSERT, UPDATE und DELETE usw. usw. ausführen.

Wenn Sie die Möglichkeit einer View zum Abfragen innerhalb der FROM-Klausel haben, aber auch Parameter übergeben können, gibt es eine Möglichkeit, dies zu tun. Es wird eine Tabellenwertfunktion genannt.

Hier ist ein ziemlich nützlicher Artikel zum Thema:

http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html

EDIT: Übrigens wirft diese Art die Frage auf, welchen Vorteil eine Ansicht gegenüber einer Tabellenwertfunktion hat. Ich habe keine wirklich gute Antwort darauf, aber ich stelle fest, dass die T-SQL-Syntax zum Erstellen einer Ansicht einfacher ist als für eine Tabellenwertfunktion, und Benutzer Ihrer Datenbank sind mit Ansichten möglicherweise besser vertraut.

7
devuxer

Es kann als guter "mittlerer Mann" zwischen Ihrem ORM und Ihren Tischen dienen.

Beispiel:

Wir hatten eine Personentabelle, in der wir die Struktur ändern mussten, sodass die Spalte SomeColumn in eine andere Tabelle verschoben wurde und eine Beziehung von Eins zu Vielen hatte.

Jedoch benutzte die Mehrheit des Systems, in Bezug auf die Person, die SomeColumn noch als eine einzige Sache, nicht viele Dinge. Wir haben eine Ansicht verwendet, um alle SomeColumns zusammenzuführen und in die Ansicht zu stellen, was gut funktioniert hat.

Dies funktionierte, weil sich die Datenschicht geändert hatte. Die Geschäftsanforderungen hatten sich jedoch nicht grundlegend geändert, sodass die Geschäftsobjekte nicht geändert werden mussten. Wenn sich die Geschäftsobjekte ändern müssten, glaube ich nicht, dass dies eine praktikable Lösung gewesen wäre, aber Ansichten sind definitiv ein guter Mittelpunkt.

5
Joseph

Hier sind zwei häufige Gründe:

Sie können es zur Sicherheit verwenden. Erteilen Sie keine Berechtigungen für die Haupttabelle, und erstellen Sie Ansichten, die den Spalten- oder Zeilenzugriff einschränken, und erteilen Sie den Benutzern Berechtigungen zum Anzeigen der Ansicht.

Sie können es zur Vereinfachung verwenden. Verbinden Sie einige Tabellen, die Sie in der Ansicht ständig zusammen verwenden. Dies kann Abfragen konsistenter und einfacher machen.

4
KM.

Dafür gibt es mehr als einen Grund. Manchmal werden häufige Join-Abfragen vereinfacht, da der Tabellenname einfach abgefragt werden kann, anstatt alle Joins auszuführen. 

Ein weiterer Grund ist, die Daten auf verschiedene Benutzer zu beschränken. So zum Beispiel:

Tabelle 1: Spalten - USER_ID; USERNAME; SSN

Admin-Benutzer können über Privilegien für die tatsächliche Tabelle verfügen. Benutzer, für die Sie keinen Zugriff haben möchten, um den SSN anzugeben, erstellen Sie eine Ansicht als 

 CREATE VIEW USERNAMES ALS SELECT user_id, Benutzername FROM Table1; 

Geben Sie ihnen dann Privs, um auf die Ansicht und nicht auf die Tabelle zuzugreifen.

3
RC.

Um sich auf bestimmte Daten zu konzentrieren Mit Ansichten können sich Benutzer auf bestimmte Daten konzentrieren, die sie interessieren, und auf die spezifischen Aufgaben, für die sie verantwortlich sind. Nicht benötigte Daten können aus der Ansicht entfernt werden. Dies erhöht auch die Sicherheit der Daten, da Benutzer nur die Daten sehen können, die in der Ansicht definiert sind, und nicht die Daten in der zugrunde liegenden Tabelle. Weitere Informationen zum Verwenden von Ansichten zu Sicherheitszwecken finden Sie unter Verwenden von Ansichten als Sicherheitsmechanismen.

Vereinfachen der Datenbearbeitung Ansichten können die Bearbeitung von Daten durch Benutzer vereinfachen. Sie können häufig verwendete Verknüpfungen, Projektionen, UNION-Abfragen und SELECT-Abfragen als Ansichten definieren, damit Benutzer nicht jedes Mal alle Bedingungen und Qualifikationen angeben müssen, wenn ein zusätzlicher Vorgang für diese Daten ausgeführt wird. Beispielsweise kann eine komplexe Abfrage, die für Berichtszwecke verwendet wird und Unterabfragen, äußere Verknüpfungen und Aggregationen zum Abrufen von Daten aus einer Gruppe von Tabellen ausführt, als Ansicht erstellt werden. Die Ansicht vereinfacht den Zugriff auf die Daten, da die zugrunde liegende Abfrage nicht jedes Mal geschrieben oder gesendet werden muss, wenn der Bericht erstellt wird. Stattdessen wird die Ansicht abgefragt. Weitere Informationen zum Bearbeiten von Daten.

Sie können auch benutzerdefinierte Inline-Funktionen erstellen, die logisch als parametrisierte Ansichten oder Ansichten mit Parametern in den Suchbedingungen der WHERE-Klausel arbeiten. Weitere Informationen finden Sie unter Benutzerdefinierte Inline-Funktionen.

So passen Sie Daten an Mit Ansichten können verschiedene Benutzer Daten auf unterschiedliche Weise anzeigen, auch wenn sie dieselben Daten gleichzeitig verwenden. Dies ist insbesondere dann von Vorteil, wenn Benutzer mit vielen verschiedenen Interessen und Qualifikationsstufen dieselbe Datenbank gemeinsam nutzen. Beispielsweise kann eine Ansicht erstellt werden, die nur die Daten der Kunden abruft, mit denen ein Kundenbetreuer zu tun hat. Die Ansicht kann anhand der Anmelde-ID des Kontomanagers, der die Ansicht verwendet, bestimmen, welche Daten abgerufen werden sollen.

Exportieren und Importieren von Daten Ansichten können zum Exportieren von Daten in andere Anwendungen verwendet werden. Sie können beispielsweise die Geschäfte und Verkaufstabellen in der Pubs-Datenbank verwenden, um Verkaufsdaten mit Microsoft® Excel zu analysieren. Dazu können Sie eine Ansicht erstellen, die auf den Filialen und Verkaufstabellen basiert. Sie können dann das Dienstprogramm bcp verwenden, um die von der Ansicht definierten Daten zu exportieren. Daten können auch mit dem Dienstprogramm bcp oder der Anweisung BULK INSERT aus Datendateien in bestimmte Ansichten importiert werden, sofern Zeilen mit der Anweisung INSERT in die Ansicht eingefügt werden können. Weitere Informationen zu den Einschränkungen beim Kopieren von Daten in Ansichten finden Sie unter INSERT. Weitere Informationen zum Verwenden des Dienstprogramms bcp und der Anweisung BULK INSERT zum Kopieren von Daten in und aus einer Ansicht finden Sie unter Kopieren in oder aus einer Ansicht.

So kombinieren Sie partitionierte Daten Der Transact-SQL UNION-Mengenoperator kann in einer Ansicht verwendet werden, um die Ergebnisse von zwei oder mehr Abfragen aus verschiedenen Tabellen zu einer einzigen zu kombinieren Ergebnismenge. Dies erscheint dem Benutzer als einzelne 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 aus der UNION dieser Tabellen eine Ansicht erstellt werden. Die Ansicht repräsentiert die Verkaufsdaten für beide Regionen. Um partitionierte Ansichten zu verwenden, erstellen Sie mehrere identische Tabellen und geben eine Einschränkung an, um den Datenbereich zu bestimmen, der jeder Tabelle hinzugefügt werden kann. Die Sicht wird dann unter Verwendung dieser Basistabellen erstellt. Wenn die Ansicht abgefragt wird, ermittelt SQL Server automatisch, welche Tabellen von der Abfrage betroffen sind, und verweist nur auf diese Tabellen. Wenn eine Abfrage beispielsweise angibt, dass nur Verkaufsdaten für den Bundesstaat Washington erforderlich sind, liest SQL Server nur die Tabelle, die die Verkaufsdaten für Washington enthält. Es wird nicht auf andere Tabellen zugegriffen.

Partitionierte Ansichten können auf Daten aus mehreren heterogenen Quellen basieren, z. B. Remoteservern, und nicht nur auf Tabellen in derselben Datenbank. Um beispielsweise Daten von verschiedenen Remoteservern zu kombinieren, auf denen jeweils Daten für eine andere Region Ihrer Organisation gespeichert sind, können Sie verteilte Abfragen erstellen, die Daten aus jeder Datenquelle abrufen, und anschließend eine Ansicht erstellen, die auf diesen verteilten Abfragen basiert. Bei allen Abfragen werden nur Daten aus den Tabellen auf den Remoteservern gelesen, die die von der Abfrage angeforderten Daten enthalten. Auf die anderen Server, auf die von den verteilten Abfragen in der Ansicht verwiesen wird, wird nicht zugegriffen.

Wenn Sie Daten über mehrere Tabellen oder mehrere Server hinweg partitionieren, können Abfragen, die nur auf einen Bruchteil der Daten zugreifen, schneller ausgeführt werden, da weniger Daten gescannt werden müssen. 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 das Neuerstellen von Indizes oder das Sichern einer Tabelle schneller ausgeführt werden. Bei Verwendung einer partitionierten Ansicht werden die Daten weiterhin als einzelne Tabelle angezeigt und können als solche abgefragt werden, ohne dass manuell auf die richtige zugrunde liegende Tabelle verwiesen werden muss.

Partitionierte Ansichten können aktualisiert werden, wenn eine der folgenden Bedingungen erfüllt ist: In der Ansicht ist ein INSTEAD OF-Trigger mit Logik zur Unterstützung der Anweisungen INSERT, UPDATE und DELETE definiert.

Sowohl die Anweisung view als auch die Anweisungen INSERT, UPDATE und DELETE befolgen die Regeln, die für aktualisierbare partitionierte Ansichten definiert sind. Weitere Informationen finden Sie unter Erstellen einer partitionierten Ansicht.

https://technet.Microsoft.com/en-us/library/aa214282 (v = sql.80) .aspx # sql: join

2
Shaharban T A

Im Allgemeinen gehe ich mit Ansichten, um das Leben zu erleichtern, um erweiterte Informationen von einer Entität zu erhalten, die in mehreren Tabellen gespeichert ist (viele Code-Joins zur Verbesserung der Lesbarkeit beseitigen) und manchmal, um Daten in mehreren Datenbanken gemeinsam zu nutzen oder Inserts einfacher lesbar zu machen.

2
Kris

So verwenden Sie eine Ansicht zusammen mit Berechtigungen zum Begrenzen der Spalten, die ein Benutzer in der Tabelle aktualisieren kann.

/* This creates the view, limiting user to only 2 columns from MyTestTable */
CREATE VIEW dbo.myTESTview 
WITH SCHEMABINDING AS
SELECT ID, Quantity FROM dbo.MyTestTable;

/* This uses the view to execute an update on the table MyTestTable */
UPDATE dbo.myTESTview
SET Quantity = 7
WHERE ID = 1
2

Ansichten können ein Glücksfall sein, wenn Sie Berichte für ältere Datenbanken erstellen. Insbesondere können Sie sinnvolle Tabellennamen anstelle von kryptischen 5-Buchstaben-Namen (wobei 2 davon ein gebräuchliches Präfix sind!) Oder Spaltennamen voller Abkürzungen verwenden, die zu dieser Zeit sicher sicher sinnvoll waren.

2
Jeff Hardy

Eine Besonderheit bei Ansichten ist, dass sie von Microsoft Access als Tabellen angezeigt werden: Wenn Sie ein Microsoft Access-Frontend mit ODBC an eine SQL-Datenbank anhängen, werden die Tabellen und Ansichten in der Liste der verfügbaren Tabellen angezeigt. Wenn Sie also komplizierte Berichte in MS Access vorbereiten, können Sie dem SQL-Server das Hinzufügen und Abfragen überlassen und Ihr Leben erheblich vereinfachen. Gleiches gilt für die Vorbereitung einer Abfrage in MS Excel.

1
t_menacher

Ich sehe eine gespeicherte Prozedur eher als eine Methode, die ich gegen meine Daten aufrufen kann, während mir eine Ansicht einen Mechanismus zum Erstellen einer synthetischen Version der Basisdaten bietet, gegen die Abfragen oder gespeicherte Prozeduren erstellt werden können. Ich erstelle eine Ansicht, wenn eine Vereinfachung oder Aggregation sinnvoll ist. Ich schreibe eine gespeicherte Prozedur, wenn ich einen ganz bestimmten Dienst bereitstellen möchte.

1
jacor

Ich erstelle xxx, das alle Beziehungen zwischen einer Haupttabelle (wie der Produkttabelle) und Referenztabellen (wie ProductType oder ProductDescriptionByLanguage) abbildet. Dadurch wird eine Ansicht erstellt, in der ich ein Produkt abrufen und alle Details aus den Fremdschlüsseln in die Beschreibung übersetzen kann. Dann kann ich mit einem ORM Objekte erstellen, um auf einfache Weise Raster, Kombinationsfelder usw. zu erstellen.

1
GRGodoi

Wenn ich eine Momentaufnahme einer Tabelle (n) und/oder view anzeigen möchte (schreibgeschützt)

1
vehomzzz

Dies beantwortet Ihre Frage nicht genau, aber ich dachte, es wäre wert, Materialized Views zu erwähnen. Meine Erfahrung ist hauptsächlich mit Oracle , aber angeblich ist der SQL-Server ziemlich ähnlich. 

Wir haben in unserer Architektur etwas Ähnliches verwendet, um XML-Leistungsprobleme zu beheben. In unseren Systemen werden viele Daten in einer Zeile als XML gespeichert, und Anwendungen müssen möglicherweise bestimmte Werte abfragen. Die Verarbeitung vieler XMLTypes und das Ausführen von XPaths über eine große Anzahl von Zeilen hat große Auswirkungen auf die Leistung. Daher verwenden wir eine Form materialisierter Ansichten, um die gewünschten XML-Knoten bei jeder Änderung der Basistabelle in eine relationale Tabelle zu extrahieren. Dies stellt effektiv eine physische Momentaufnahme der Abfrage zu einem Zeitpunkt bereit, im Gegensatz zu Standardansichten, bei denen die Abfrage bei Bedarf ausgeführt wird.

1

Ich habe nur etwa 10 Ansichten in meinen Produktionsdatenbanken. Ich benutze mehrere für Kolumnen, die ich ständig verwende. Ein Satz, den ich verwende, stammte aus 7 Tabellen, einige mit äußeren Joins, und anstatt neu zu schreiben, muss ich diese Ansicht nur in einem select aufrufen und einen oder zwei Joins erstellen. Für mich ist es nur eine Zeitersparnis.

1
Brian Spencer

Ich verwende gern Ansichten über gespeicherte Prozeduren, wenn ich nur eine Abfrage ausführen möchte. Ansichten können auch die Sicherheit vereinfachen, zum Einfügen/Aktualisieren mehrerer Tabellen und zum Snapshot/Materialisieren von Daten verwendet werden.

Ich habe materialisierte Ansichten für Suchvorgänge verwendet, die nicht in Echtzeit akkurat gehalten werden müssen.

1
MattH

Ansichten unterteilen auch sehr komplexe Konfigurationen und Tabellen in überschaubare Blöcke, die leicht abgefragt werden können. In unserer Datenbank ist unser gesamtes Tabellenverwaltungssystem in Ansichten aus einer großen Tabelle unterteilt.

1
Jim

Ich denke zuerst. Um die Komplexität von Query zu verbergen. Es eignet sich sehr gut für Ansichten. Wenn Datenbanktabellen normalisiert werden, nimmt sie zu. Jetzt ist das Abrufen von Daten sehr schwierig, wenn die Anzahl der Tabellen zunimmt.

0
AshutoshG

Aus Sicherheitsgründen: Erteilt jedem Benutzer die Berechtigung zum Zugriff auf die Datenbank nur über eine kleine Anzahl von Ansichten, die die spezifischen Daten enthalten, die der Benutzer oder die Benutzergruppe zum Anzeigen von Berechtigungen berechtigt, wodurch der Benutzerzugriff auf andere Daten eingeschränkt wird.

Einfachheit für Abfragen und Struktur : Eine Sicht kann Daten aus mehreren Tabellen zeichnen und eine einzelne Tabelle darstellen. Dies vereinfacht die Informationen und wandelt Mehrtabellenabfragen in Einzeltabellenabfragen für eine Ansicht um. Dadurch erhalten Benutzer eine spezifische Ansicht der Datenbankstruktur, die die Datenbank als eine Gruppe von virtuellen Tabellen darstellt, die für bestimmte Benutzer oder Benutzergruppen spezifisch sind.

Zum Erstellen einer konsistenten Datenbankstruktur : Ansichten zeigen ein konsistentes, unverändertes Abbild der Datenbankstruktur, selbst wenn zugrunde liegende Quellentabellen geändert werden.

0
Shivam Mishra

Wir erstellen eine Ansicht, um den Zugriff auf alle Zeilen/Spalten in einer Tabelle einzuschränken oder zu beschränken. Wenn der Eigentümer wünscht, dass nur bestimmte oder begrenzte Zeilen/Spalten freigegeben werden müssen, erstellt er eine Ansicht mit dieser Spalte.

0
Gyan Prakash

Betrachten Sie es als Refactoring Ihres Datenbankschemas.

0
quillbreaker