Warum erstellen Sie eine Ansicht in einer Datenbank?

267

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?

Medizinmann
quelle
Überprüfen Sie meine Antwort auf eine ähnliche Frage, hoffe es hilft!
Loukan ElKadi

Antworten:

464

Eine Ansicht bietet mehrere Vorteile.

1. Ansichten können die Komplexität verbergen

Wenn Sie eine Abfrage haben, für die mehrere Tabellen verknüpft werden müssen, oder komplexe Logik oder Berechnungen haben, können Sie diese gesamte Logik in eine Ansicht codieren und dann wie eine Tabelle aus der Ansicht auswählen.

2. Ansichten können als Sicherheitsmechanismus verwendet werden

Eine Ansicht kann bestimmte Spalten und / oder Zeilen aus einer Tabelle (oder Tabellen) auswählen und Berechtigungen für die Ansicht anstelle der zugrunde liegenden Tabellen festlegen. Auf diese Weise 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, die viel Code beschädigen würde, können Sie die Tabelle durch eine gleichnamige Ansicht ersetzen. Die Ansicht bietet genau das gleiche Schema wie die ursprüngliche Tabelle, während sich das tatsächliche Schema geändert hat. Auf diese Weise wird verhindert, dass der Legacy-Code, der auf die Tabelle verweist, beschädigt wird, sodass Sie den Legacy-Code nach Belieben ändern können.

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

Dave Carlile
quelle
84
Punkt 3 ist ein Grund, auf den noch niemand hingewiesen zu haben scheint
MedicineMan
2
Ich denke, Punkt 3 ist mehr eine Lücke als alles andere. Wenn Sie mit dem Aktualisieren des Legacy-Codes beginnen, müssen Sie nicht nur den Code hinter der Ansicht ändern, sondern auch den gesamten Code, der über der Ansicht erstellt wurde. Meine 2 Cent
super9
3
3 Ist wirklich die mächtigste Eigenschaft von Ansichten. Diese Hilfe bietet Unabhängigkeit von logischen Daten. Die Tatsache, dass Sie unabhängig von der zugrunde liegenden logischen Datenbank eine Schnittstelle zur Datenbank bereitstellen können, ist ein sehr leistungsfähiges Konzept.
Falaina
1
@ John diese entstandene technische Schuld muss früher oder später zurückgezahlt werden nein? In 10 Jahren ist es für den Ingenieur, der es vor 10 Jahren geschrieben hat, vielleicht nicht wichtig, aber für das Unternehmen ist es wichtig.
Super9
Das Ändern Ihrer Hauptdatenbank und aller davon abhängigen Datenbanken ist eine schlechte Wahl, da Sie sie möglicherweise in 10 Jahren benötigen. Technische Schulden sind nicht um jeden Preis zu vermeiden, nur wenn die erwarteten Kosten für die spätere Reparatur höher sind als die definitiven Kosten für die derzeitige Reparatur.
Mr. Boy
88

Unter anderem kann es zur Sicherheit verwendet werden. Wenn Sie eine "Kunden" -Tabelle haben, möchten Sie möglicherweise allen Vertriebsmitarbeitern Zugriff auf die Felder Name, Adresse, Postleitzahl usw. gewähren, nicht jedoch auf credit_card_number. Sie können eine Ansicht erstellen, die nur die Spalten enthält, auf die sie Zugriff benötigen, und ihnen dann Zugriff auf die Ansicht gewähren.

Graeme Perrow
quelle
interessant. Sicherheit ist eine gute Antwort. Welche "anderen Dinge" haben Sie im Sinn?
MedicineMan
13
Ich nahm an, dass die anderen Antworten auf diese Frage die "anderen Dinge" beschreiben würden. :-)
Graeme Perrow
Select name, address, zipcode from customerwürde nicht den Zweck erfüllen statt creating a view?
PPB
@PranavBilurkar Ja, wenn Sie die von den Benutzern ausgeführten Abfragen vollständig steuern. Wenn die Benutzer die Möglichkeit haben, ihre eigenen Abfragen auszuführen (über ein interaktives SQL-Programm oder das Schreiben eigener Skripte), können sie ausgeführt werden, select * from customerwodurch sie auf alles zugreifen können. Wenn Sie ihnen Zugriff auf die Ansicht und nicht auf die Tabelle gewähren, können sie nicht auf Felder zugreifen, die nicht in der Ansicht enthalten sind.
Graeme Perrow
38

Eine Ansicht ist eine Kapselung einer Abfrage. Abfragen, die in Ansichten umgewandelt werden, sind in der Regel kompliziert und können daher als Ansicht zur Wiederverwendung gespeichert werden.

Andrew Hare
quelle
Sie möchten also eine Ansicht erstellen, wenn Sie eine komplizierte Abfrage haben? Wie kompliziert ist eine Abfrage, wie hoch ist der Schwellenwert? Was bringt es Ihnen, eine Ansicht daraus zu machen?
MedicineMan
4
Wie kompliziert eine persönliche Entscheidung wirklich ist, gibt es keine festgelegte Schwelle. Sie verwenden häufig eine Ansicht, wenn Sie beispielsweise die Logik nicht in mehreren Anwendungen oder an verschiedenen Stellen in Ihrer Anwendung duplizieren möchten. Indem Sie eine Ansicht erstellen, verbergen Sie diese Logik und können sie problemlos freigeben.
Chris Cameron-Mills
1
Können Sie nicht dasselbe mit einer gespeicherten Prozedur tun, die eine Auswahl hat? Habe ich fälschlicherweise an gespeicherte Prozeduren gedacht, um komplexe Abfragelogik zu speichern? Sollten komplexe Abfragen in Ansichten anstelle von gespeicherten Prozeduren durchgeführt werden? Was ist der Vorteil einer gespeicherten Prozedur hier?
MedicineMan
2
@MedicineMan - Eine gespeicherte Prozedur gibt eine Ergebnismenge zurück, während eine Ansicht eine virtuelle Tabelle darstellt, die Sie als Tabelle in anderen Abfragen verwenden können.
Andrew Hare
1
Ich denke, dieser Punkt zwischen Ergebnismenge und virtueller Tabelle scheint ein wichtiger Punkt zu sein, den ich nicht verstanden habe.
MedicineMan
28

Normalerweise erstelle ich Ansichten, um Daten zu de-normalisieren und / oder zu aggregieren, die häufig für Berichtszwecke verwendet werden.

BEARBEITEN

Zur Ausarbeitung, wenn ich eine Datenbank hätte, in der einige der Entitäten Person, Firma, Rolle, Eigentümertyp, Reihenfolge, Bestelldetails, Adresse und Telefon waren, in der die Personentabelle sowohl Mitarbeiter als auch Kontakte sowie die Adresse und gespeichert hat In Telefontabellen wurden Telefonnummern für Personen und Unternehmen gespeichert, und das Entwicklungsteam wurde beauftragt, Berichte zu erstellen (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 de-normalisieren, sodass eine stärker integrierte Ansicht (kein Wortspiel beabsichtigt) der realen Entitäten verfügbar ist. Einige der Vorteile könnten sein:

  1. Reduzierung der Redundanz beim Schreiben von Abfragen
  2. Festlegung eines Standards für verbundene Unternehmen
  3. Bereitstellung von Möglichkeiten zur Bewertung und Maximierung der Leistung für komplexe Berechnungen und Verknüpfungen (z. B. Indizierung in Schemabound-Ansichten in MSSQL)
  4. Daten für Teammitglieder und Nichtentwickler zugänglicher und intuitiver machen.
cmsjr
quelle
1
Können Sie das näher erläutern? Ihre Antwort wird ziemlich
MedicineMan
11

Mehrere Gründe: Wenn Sie komplizierte Verknüpfungen haben, ist es manchmal am besten, eine Ansicht zu haben, damit bei jedem Zugriff die Verknüpfungen immer korrekt sind und die Entwickler sich nicht alle Tabellen merken müssen, die sie möglicherweise benötigen. In der Regel ist dies für eine Finanzanwendung der Fall, bei der es äußerst wichtig ist, 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 Ansicht verwenden, ihnen nur Zugriff auf die Ansicht und nicht auf die zugrunde liegenden Tabellen gewähren und dann die Ansicht abfragen

Crystal Reports scheint es vorzuziehen, Ansichten für gespeicherte Prozesse zu verwenden, daher verwenden Personen, die viel Bericht schreiben, häufig viele Ansichten

Ansichten sind auch beim Refactoring von Datenbanken sehr nützlich. Sie können die Änderung häufig ausblenden, damit der alte Code sie nicht sieht, indem Sie eine Ansicht erstellen. Lesen Sie weiter, wie Sie Datenbanken umgestalten, um zu sehen, wie dies funktioniert, da dies eine sehr leistungsstarke Methode zum Umgestalten ist.

HLGEM
quelle
7

Der einzige Hauptvorteil einer Ansicht gegenüber einer gespeicherten Prozedur besteht darin, dass Sie eine Ansicht genauso verwenden können wie eine Tabelle. Auf eine Ansicht kann nämlich direkt in der FROMKlausel einer Abfrage verwiesen werden. ZB , SELECT * FROM dbo.name_of_view.

In fast jeder anderen Hinsicht sind gespeicherte Prozeduren leistungsfähiger. Sie können in den Parametern, einschließlich geben outParameter , die Sie effektiv ermöglichen gleichzeitig mehrere Werte zurückgeben, können Sie tun SELECT, INSERT, UPDATE, und DELETEOperationen, etc. etc.

Wenn Sie möchten, dass eine Ansicht innerhalb der FROMKlausel abfragen kann , aber auch Parameter übergeben möchten, gibt es auch 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: Diese Art wirft übrigens die Frage auf, welchen Vorteil eine Ansicht gegenüber einer Funktion mit Tabellenwert hat. Ich habe keine wirklich gute Antwort darauf, aber ich werde feststellen, dass die T-SQL-Syntax zum Erstellen einer Ansicht einfacher ist als für eine Funktion mit Tabellenwert, und Benutzer Ihrer Datenbank möglicherweise besser mit Ansichten vertraut sind.

Devuxer
quelle
+1 als eine der wenigen Antworten, um das Problem gespeicherter Prozeduren gegen SELECT-Anweisungen zu lösen. Sie haben Recht, das Problem der Tabellenfunktionen anzusprechen. Grundsätzlich ist die Leistung von View wahrscheinlich besser als die von Funktionen, da sie dieselbe Engine verwenden. Beim Wechsel von SQL zu trabsactionalem SQL (dh PL / SQL) ist (zumindest in Oracle) ein Overhead zu zahlen. Aber alle anderen Dinge - Sicherheit, Kapselung usw. - gelten gleichermaßen für Prozeduren oder Funktionen wie für Ansichten.
APC
Abhängig von der Struktur der Ansicht können einige Ansichten indiziert werden. Dies ist eine große Verbesserung gegenüber Funktionen mit Tabellenwerten.
HLGEM
6

Es kann als guter "Mittelsmann" zwischen Ihrem ORM und Ihren Tischen fungieren.

Beispiel:

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

Die Mehrheit des Systems in Bezug auf die Person verwendete die SomeColumn jedoch immer noch als eine einzige Sache, nicht als viele Dinge. Wir haben eine Ansicht verwendet, um alle SomeColumns zusammenzuführen und in die Ansicht einzufügen, was gut funktioniert hat.

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

Joseph
quelle
1
interessant. In Ihrem Fall ist es fast wie eine Schnittstelle zu den Tabellen.
MedicineMan
5

Konzentrieren auf bestimmte Daten Mit Ansichten können sich Benutzer auf bestimmte Daten konzentrieren, die sie interessieren, und auf die spezifischen Aufgaben, für die sie verantwortlich sind. Unnötige Daten können nicht angezeigt 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 für Sicherheitszwecke finden Sie unter Verwenden von Ansichten als Sicherheitsmechanismen.

Vereinfachen der Datenmanipulation Ansichten können die Manipulation 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 als Ansicht erstellt werden, 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. 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. Die Ansicht wird stattdessen abgefragt. Weitere Informationen zum Bearbeiten von Daten.

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

Anpassen von Datenansichten ermöglichen es verschiedenen Benutzern, Daten auf unterschiedliche Weise anzuzeigen, selbst wenn sie dieselben Daten gleichzeitig verwenden. Dies ist besonders vorteilhaft, wenn Benutzer mit vielen unterschiedlichen Interessen und Fähigkeiten dieselbe Datenbank verwenden. Beispielsweise kann eine Ansicht erstellt werden, die nur die Daten für die Kunden abruft, mit denen ein Account Manager 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. Beispielsweise möchten Sie möglicherweise die Geschäfte und Verkaufstabellen in der Pubs-Datenbank verwenden, um Verkaufsdaten mit Microsoft® Excel zu analysieren. Zu diesem Zweck können Sie eine Ansicht basierend auf den Filialen und Verkaufstabellen erstellen. Sie können dann das Dienstprogramm bcp verwenden, um die in 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 EINFÜGEN. Weitere Informationen zur Verwendung 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.

Partitionierte Daten kombinieren Der Transact-SQL UNION-Mengenoperator kann in einer Ansicht verwendet werden, um die Ergebnisse von zwei oder mehr Abfragen aus separaten Tabellen in einer einzigen Ergebnismenge zu kombinieren. Dies erscheint dem Benutzer als eine 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 Ansicht 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. Zum Beispiel, Wenn in einer Abfrage angegeben wird, dass nur Verkaufsdaten für den Bundesstaat Washington erforderlich sind, 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. 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 Ihres Unternehmens 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 die verteilten Abfragen in der Ansicht verweisen, wird nicht zugegriffen.

Wenn Sie Daten auf mehrere Tabellen oder mehrere Server verteilen, können Abfragen, die nur auf einen Bruchteil der Daten zugreifen, schneller ausgeführt werden, da weniger Daten gescannt werden müssen. Befinden sich die Tabellen auf verschiedenen Servern oder auf einem Computer mit mehreren Prozessoren, 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 definiert, die die Anweisungen INSERT, UPDATE und DELETE unterstützt.

Sowohl die Ansicht als auch die Anweisungen INSERT, UPDATE und DELETE folgen den 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

Shaharban TA
quelle
5

Hier sind zwei häufige Gründe:

Sie können es aus Sicherheitsgründen verwenden. Gewähren Sie keine Berechtigungen für die Haupttabelle und erstellen Sie Ansichten, die den Zugriff auf Spalten oder Zeilen einschränken, und erteilen Sie Benutzern Berechtigungen zum Anzeigen der Ansicht.

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

KM.
quelle
3

Es gibt mehr als einen Grund dafür. Manchmal sind allgemeine Join-Abfragen einfach, da nur ein Tabellenname abgefragt werden kann, anstatt alle Joins durchzuführen.

Ein weiterer Grund besteht darin, die Daten auf verschiedene Benutzer zu beschränken. Also zum Beispiel:

Tabelle 1: Spalten - USER_ID; USERNAME; SSN

Administratorbenutzer können Berechtigungen für die eigentliche Tabelle haben, aber Benutzer, auf die Sie keinen Zugriff haben möchten, um beispielsweise die SSN anzugeben, erstellen Sie eine Ansicht als

CREATE VIEW USERNAMES AS SELECT user_id, Benutzername FROM Table1;

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

RC.
quelle
2

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

Jeff Hardy
quelle
2

Im Allgemeinen gehe ich mit Ansichten, um das Leben zu vereinfachen, erweiterte Details von einer Entität zu erhalten, die über mehrere Tabellen gespeichert ist (eliminieren Sie viele Verknüpfungen im Code, um die Lesbarkeit zu verbessern) und manchmal, um Daten über mehrere Datenbanken zu teilen oder sogar um Einfügungen leichter lesbar zu machen.

Kris
quelle
2

Hier erfahren Sie, wie Sie eine Ansicht zusammen mit Berechtigungen verwenden, um die Spalten einzuschränken, 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
SQL Dave Florida
quelle
1

Wenn ich einen Schnappschuss einer Tabelle (n) und / oder einer Ansicht (schreibgeschützt) anzeigen möchte

vehomzzz
quelle
1
Was meinst du mit einem "Schnappschuss einer Tabelle"? Wann oder warum möchten Sie das tun?
MedicineMan
Es gibt viele Szenarien; Angenommen, Sie möchten eine komplexe Abfrage / Speicher-Prozedur für eine Tabelle ausführen, ohne die Tabelle zu beeinflussen und zu unterstreichen. Sie erstellen eine Ansicht (eine schreibgeschützte Darstellung)
vehomzzz
Wenn Sie also eine komplexe Abfragespeicherprozedur ausführen möchten, können Sie dann nicht schreibgeschützt auf die Ansicht zugreifen? Ich habe wirklich nicht die Datenbankerfahrung, um zu verstehen, wovon Sie hier sprechen. Könnten Sie ein detailliertes Beispiel ausarbeiten oder liefern?
MedicineMan
1

Ich verwende gerne Ansichten über gespeicherte Prozeduren, wenn ich nur eine Abfrage ausführe. Ansichten können auch die Sicherheit vereinfachen, Einfügungen / Aktualisierungen in mehrere Tabellen vereinfachen und Daten aufnehmen / materialisieren (eine Abfrage mit langer Laufzeit ausführen und die Ergebnisse zwischengespeichert halten).

Ich habe materialisierte Ansichten für Sehnsuchtsabfragen verwendet, die nicht in Echtzeit korrekt gehalten werden müssen.

MattH
quelle
Wenn Sie eine Abfrage ausführen, im Gegensatz zu? Warum? Dieser Punkt macht nicht ganz Sinn
MedicineMan
Wenn Sie eine Ansicht verwenden, wissen Sie, dass Sie nur eine DML-Operation ausführen. Wenn Sie einen SP aufrufen, wissen Sie nicht, was sonst noch passiert, bevor Sie Ihre Daten erhalten. Das Aufrufen einer Cache-Funktion gibt möglicherweise das zwischengespeicherte Dataset zurück, bedeutet jedoch nicht, dass Sie den SP so aufrufen sollten, wie Sie die Daten benötigen. Es vereinfacht die API zu den Daten IMO
MattH
1

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

Jim
quelle
1

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 SQL-Server ziemlich ähnlich.

Wir haben in unserer Architektur etwas Ähnliches verwendet, um XML-Leistungsprobleme zu beheben. Unsere Systeme sind mit vielen Daten ausgestattet, die als XML in einer Zeile gespeichert sind, und Anwendungen müssen möglicherweise bestimmte Werte darin abfragen. Die Verarbeitung vieler XMLTypes und das Ausführen von XPaths über eine große Anzahl von Zeilen hinweg hat einen großen Einfluss auf die Leistung. Daher verwenden wir eine Form von materialisierten Ansichten, um die gewünschten XML-Knoten bei jeder Änderung der Basistabelle in eine relationale Tabelle zu extrahieren. Dies liefert effektiv einen physischen Schnappschuss der Abfrage zu einem bestimmten Zeitpunkt im Gegensatz zu Standardansichten, die ihre Abfrage bei Bedarf ausführen würden.

Chris Cameron-Mills
quelle
1

Ich sehe eine gespeicherte Prozedur eher als eine Methode, die ich für meine Daten aufrufen kann, während eine Ansicht für mich einen Mechanismus zum Erstellen einer synthetischen Version der Basisdaten bietet, anhand derer Abfragen oder gespeicherte Prozeduren erstellt werden können. Ich werde eine Ansicht erstellen, wenn eine Vereinfachung oder Aggregation sinnvoll ist. Ich werde eine gespeicherte Prozedur schreiben, wenn ich einen ganz bestimmten Service bereitstellen möchte.

jacor
quelle
Können Sie Beispiele für kleine Dienstleistungen nennen
MedicineMan
1

Eine merkwürdige Sache bei Ansichten ist, dass sie von Microsoft Access als Tabellen angezeigt werden: Wenn Sie ein Microsoft Access-Frontend mithilfe von 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 erstellen, können Sie den SQL Server das Beitreten und Abfragen durchführen lassen und Ihr Leben erheblich vereinfachen. Das Gleiche gilt für die Vorbereitung einer Abfrage in MS Excel.


quelle
1

Ich habe nur ungefähr 10 Ansichten in meinen Produktionsdatenbanken. Ich benutze mehrere für Spalten, die ich ständig benutze. Ein Satz, den ich verwende, stammt aus 7 Tabellen, einige mit äußeren Verknüpfungen, und anstatt ihn ständig neu zu schreiben, muss ich diese Ansicht nur in einer Auswahl aufrufen und eine oder zwei Verknüpfungen erstellen. Für mich ist es nur eine Zeitersparnis.

Brian Spencer
quelle
Verzeihen Sie mir, wenn dies außerhalb des Rahmens der Frage liegt, aber mehrere Personen dies erwähnt haben - erleiden Sie dafür keine Leistungsstrafe?
MedicineMan
Überhaupt nicht. SQL Server-Optimierer zeigen genau den gleichen Plan zur Auswahl von * aus der Ansicht wie für die SQL-Verknüpfungen, die der Ansicht entsprechen
Brian Spencer
1

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

GRGodoi
quelle
0

Stellen Sie sich das als Refactoring Ihres Datenbankschemas vor.

Federkielbrecher
quelle
0

Ich denke zuerst. Um die Komplexität der Abfrage zu verbergen. Es ist sehr gut für Ansichten geeignet. Wie beim Normalisieren von Datenbanktabellen zunimmt. Das Abrufen von Daten ist jetzt sehr schwierig, wenn die Anzahl der Tabellen zunimmt. Die beste Vorgehensweise ist das Folgen von Ansichten. Wenn ich falsch liege, korrigieren Sie mich.

AshutoshG
quelle
Wenn Sie es googeln, hätten Sie eine sehr klare Information für diese Frage.
Chella
0

Wir erstellen eine Ansicht, um den Zugriff auf alle Zeilen / Spalten in einer Tabelle einzuschränken oder einzuschränken. Wenn der Eigentümer möchte, dass nur bestimmte oder begrenzte Zeilen / Spalten gemeinsam genutzt werden müssen, erstellt er eine Ansicht mit diesen Spalten.

Gyan Prakash
quelle
Dies ist nur ein Grund, warum Sie eine Ansicht verwenden sollten / könnten.
Alexander
0

Aus Sicherheitsgründen: Erteilt jedem Benutzer die Berechtigung, nur über eine kleine Anzahl von Ansichten auf die Datenbank zuzugreifen, die die spezifischen Daten enthalten, zu deren Anzeige der Benutzer oder die Benutzergruppe berechtigt ist, wodurch der Benutzerzugriff auf andere Daten eingeschränkt wird.

Einfachheit für Abfragen und Struktur : Eine Ansicht kann Daten aus mehreren Tabellen zeichnen und eine einzelne Tabelle darstellen, wodurch die Informationen vereinfacht werden und Abfragen mit mehreren Tabellen in Abfragen mit einer Tabelle für eine Ansicht umgewandelt werden. Außerdem erhalten Benutzer eine spezifische Ansicht der Datenbankstruktur und können diese präsentieren Die Datenbank als eine Reihe von virtuellen Tabellen, die für bestimmte Benutzer oder Benutzergruppen spezifisch sind.

So erstellen Sie eine konsistente Datenbankstruktur : Ansichten zeigen ein konsistentes, unverändertes Bild der Datenbankstruktur, auch wenn zugrunde liegende Quelltabellen geändert werden.

Shivam Mishra
quelle