Was ist ein guter Grund, SQL-Ansichten zu verwenden?

98

Ich lese die SQL Server 2008-Bibel durch und gehe auf den Abschnitt Ansichten ein. Aber der Autor erklärt den Zweck von Ansichten wirklich nicht . Was ist eine gute Verwendung für Ansichten? Soll ich sie auf meiner Website verwenden und welche Vorteile bietet sie?

Luke101
quelle
Könnten Sie mir bitte die Datenbankdateien dieses Buches "SQL Server 2008 Bible" zur Verfügung stellen? Die Website des Autors ist tot und ich kann ihn nicht erreichen.

Antworten:

92

Eine andere Verwendung, die in keiner der vorherigen Antworten erwähnt wurde, ist die einfachere Bereitstellung von Änderungen an der Tabellenstruktur.

Angenommen, Sie möchten eine Tabelle ( T_OLD) mit Daten für aktive Benutzer zurückziehen und stattdessen eine neue Tabelle mit ähnlichen Daten (mit Namen T_NEW) verwenden, die jedoch Daten für aktive und inaktive Benutzer enthält, mit einer zusätzlichen Spalte active.

Wenn Ihre Systeme über unzählige Abfragen verfügen SELECT whatever FROM T_OLD WHERE whatever, haben Sie zwei Möglichkeiten für den Roll-out:

1) Cold Turkey - Ändern Sie die Datenbank und ändern, testen und veröffentlichen Sie gleichzeitig zahlreiche Codeteile, die diese Abfrage enthielten. Sehr schwer zu tun (oder sogar zu koordinieren), sehr riskant. Schlecht.

2) Schrittweise - die DB ändern , indem die Erstellung von T_NEWTabelle des Tropft T_OLDTisch und stattdessen eine Schaffung VIEW genannt T_OLDdass ahmt die T_OLDTabelle 100% ( zum Beispiel der Ansicht Abfrage ist SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Das würde Ihnen ermöglicht , Code zu vermeiden Freigabe , dass zur Zeit wählt aus T_OLDund führen Sie die Änderungen an Migrate - Code von T_OLDbis T_NEWzur freien Verfügung .

Dies ist ein einfaches Beispiel, da sind andere viel mehr involviert.

PS Auf der anderen Seite hätten Sie wahrscheinlich eine API für gespeicherte Prozeduren anstelle von direkten Abfragen von haben sollen T_OLD, aber das ist nicht immer der Fall.

DVK
quelle
3
Ich kannte den Begriff "API für gespeicherte Prozeduren" und die damit verbundenen Vor- und Nachteile nicht und fand diesen Artikel hilfreich: Codinghorror.com/blog/2005/05/…
Jeff Widman
Tut mir leid, dass ich zu spät zur Party komme, aber was ist mit der Leistung? Wenn ich Verknüpfungen für die ursprüngliche Tabelle benötigte und stattdessen der Ansicht beitrete, wird dann der beste Ausführungsplan verwendet?
Zikato
@ Zikato ja, wenn es eine indizierte Ansicht ist
LinkBerest
V Gute
Anzeige
47

(Kopiert aus dem ersten Tutorial, das in einer Google-Suche angezeigt wurde (Link jetzt tot), bietet aber alle Vorteile, die ich selbst manuell eingegeben hätte.)

Ansichten haben folgende Vorteile:

  • Sicherheit - Ansichten können Benutzern zugänglich gemacht werden, während die zugrunde liegenden Tabellen nicht direkt zugänglich sind. Auf diese Weise kann der DBA den Benutzern nur die Daten zur Verfügung stellen, die sie benötigen, während andere Daten in derselben Tabelle geschützt werden.
  • Einfachheit - Ansichten können verwendet werden, um komplexe Abfragen auszublenden und wiederzuverwenden.
  • Vereinfachung oder Erläuterung von Spaltennamen - Ansichten können verwendet werden, um Aliase für Spaltennamen bereitzustellen, damit diese einprägsamer und / oder aussagekräftiger werden.
  • Sprungbrett - Ansichten können ein Sprungbrett in einer "mehrstufigen" Abfrage sein. Sie können beispielsweise eine Ansicht einer Abfrage erstellen, in der die Anzahl der Verkäufe jedes Verkäufers gezählt wird. Sie können diese Ansicht dann abfragen, um die Vertriebsmitarbeiter nach der Anzahl der von ihnen getätigten Verkäufe zu gruppieren.
David
quelle
Kann ich Ihrer Liste zwei Ergänzungen vorschlagen, da mir Ihre Antwort gefällt und ich nicht viel Sinn darin sehe, eine weitere hinzuzufügen? Indizierte Ansichten können die Leistung steigern. Das Ausführen von Updates für Ansichten anstatt direkt für Tabellen kann ein höheres Vertrauen geben, dass Sie diese wichtige Produktionstabelle nicht falsch aktualisieren :)
David Hall,
Ein weiterer Punkt in Ihrer Liste: Die meisten Datenbankadministratoren möchten die Verwendung der Ansicht, da sie eine Ansicht optimieren können und meistens (nicht immer) alle Abfragen, die diese Ansicht verwenden, optimiert werden.
Nitin Midha
Dies ist die 99% Antwort in meinem Buch.
John Steedman
Übrigens @ David defekter Link
Manuel Jordan
Der letzte Punkt, können wir dafür keine temporäre Tabelle verwenden?
Jiechao Wang
16

Einige Gründe aus Wikipedia :

Ansichten können Vorteile gegenüber Tabellen bieten:

  1. Ansichten können eine Teilmenge der in einer Tabelle enthaltenen Daten darstellen
  2. Ansichten können mehrere Tabellen zu einer einzigen virtuellen Tabelle verbinden und vereinfachen
  3. Ansichten können als aggregierte Tabellen fungieren , in denen das Datenbankmodul Daten (Summe, Durchschnitt usw.) aggregiert und die berechneten Ergebnisse als Teil der Daten darstellt
  4. Ansichten können die Komplexität von Daten verbergen . Beispielsweise könnte eine Ansicht als Sales2000 oder Sales2001 angezeigt werden, wodurch die eigentliche zugrunde liegende Tabelle transparent partitioniert wird
  5. Ansichten benötigen nur sehr wenig Speicherplatz . Die Datenbank enthält nur die Definition einer Ansicht, keine Kopie aller darin enthaltenen Daten
  6. Abhängig von der verwendeten SQL-Engine können Ansichten zusätzliche Sicherheit bieten
  7. Ansichten können den Grad der Exposition einer Tabelle oder von Tabellen gegenüber der Außenwelt begrenzen
user210748
quelle
14

VIEWS können als wiederverwendbare Abschnitte von SELECT / CODE verwendet werden, die in anderen Auswahlen / Abfragen enthalten sein können, die verbunden werden sollen, und verschiedene Filter verwenden, ohne dass jedes Mal die gesamte SELECT neu erstellt werden muss.

Dadurch wird die Logik auch an einem einzigen Ort platziert, sodass Sie sie nicht in der gesamten Codebasis ändern müssen.

Schau es dir an

Auswahl zwischen gespeicherten Prozeduren, Funktionen, Ansichten, Triggern und Inline-SQL

Das Schöne an einer Ansicht ist, dass sie in den meisten Situationen wie eine Tabelle verwendet werden kann, aber im Gegensatz zu einer Tabelle sehr komplexe Berechnungen und häufig verwendete Verknüpfungen enthalten kann. Es kann auch so ziemlich jedes Objekt in der Datenbank verwenden, außer gespeicherte Prozeduren. Ansichten sind am nützlichsten, wenn Sie immer denselben Tabellensatz verbinden müssen, z. B. eine Bestellung mit einem Bestelldetail, um zusammenfassende Berechnungsfelder usw. zu erhalten.

Adriaan Stander
quelle
6
Seien Sie dabei sehr vorsichtig. Wenn Sie Ansichten verwenden, die andere Ansichten aufrufen, können Sie ein großes Leistungsproblem verursachen.
HLGEM
10

Eine Ansicht ist eine Abstraktionsschicht und macht genau das, was eine gute Abstraktionsschicht tut, einschließlich der Kapselung des Datenbankschemas und des Schutzes vor den Folgen der Änderung interner Implementierungsdetails.

Es ist eine Schnittstelle.

dkretz
quelle
1
Solange Sie keine Ansichten auf Ansichten zur weiteren Abstraktion stapeln.
HLGEM
Ich glaube, ich habe jede Art von Mehrebenenabstraktion in relationalen Datenbanken effektiv abgelehnt. Und ich rufe gespeicherte Prozeduren auch nicht von gespeicherten Prozeduren auf. :)
dkretz
3

Hier ist eine sehr häufige Verwendung der Verwendung von Ansichten, um eine Entität durch bestimmte Kriterien einzuschränken.

Tabelle: USERS enthält alle Benutzer

Ansicht: ACTIVE_USERS enthält alle Benutzer mit Ausnahme derjenigen, die gesperrt, gesperrt, auf ihre Aktivierung warten und keine Kriterien erfüllen, die Sie möglicherweise in Zukunft als Teil der aktiven Anforderungen definieren. Dies macht es unnötig, Zeilen aus Ihrer USERS-Tabelle zu löschen, falls Sie dies nicht möchten, da ACTIVE_USERS die unerwünschten Zeilen immer ausblenden kann.

Auf diese Weise können Sie die Tabelle auf Ihren Benutzerverwaltungsseiten verwenden, der Rest der Anwendung kann jedoch ACTIVE_USERS verwenden, da diese möglicherweise die einzigen Benutzer sind, die Prozesse ausführen und auf Daten zugreifen / diese ändern können sollten.

Nefsu
quelle
2

Mit Ansichten können Sie Daten aus mehreren verschiedenen Tabellen kombinieren und formatieren (Felder kombinieren, aussagekräftigere Feldnamen angeben usw.), um es für Endbenutzer einfacher zu machen. Sie sind eine Abstraktion des Datenbankmodells. Sie können auch verwendet werden, um Benutzern Zugriff auf die Daten in der Tabelle zu gewähren, ohne ihnen direkten Zugriff auf die Tabelle selbst zu gewähren.

TLiebe
quelle
2

Hier sind einige von vielen Gründen, warum Ansicht anstelle von Tabelle direkt verwendet wird

  • Einfachheit - Ansichten können verwendet werden, um komplexe Abfragen auszublenden.
  • Sicherheit - Ansicht kann einige wichtige Informationen vor dem Endbenutzer verbergen, indem eine Ansicht für einige ausgewählte Spalten erstellt wird
  • Sicherheit - Sichere Tabelle zum Ändern der Struktur mithilfe von VIEW.
  • Redundanz - Reduzieren Sie redundanten Code in allen Prozeduren / Abfragen mithilfe einer gemeinsamen Ansicht.
  • Berechnung - Alle Berechnungen können einmal in der Ansichtsabfrage durchgeführt werden.
  • Bedeutungsvoller Name - Die Tabelle kann einen Namen für eine ID wie tbl_org_emp_id haben, der einen Alias ​​wie [Mitarbeiternummer] oder einen aussagekräftigen Namen haben kann.

Von imexploring.com

Ali Adravi
quelle
1

Eine kleine Liste häufiger Gründe / Verwendungen:

  • Verwenden Sie sie, um das Format oder das Aussehen von Daten zu ändern (dh Sie können einen Vor- und Nachnamen zusammenfügen).

    Führen Sie Berechnungen oder andere Suchvorgänge für Daten durch

    Daten denormalisieren (Daten aus mehreren Tabellen an einer Stelle extrahieren)

Slugster
quelle
-6

Die Ansichten sind böse! Vermeiden Sie sie nach Möglichkeit und verwenden Sie sie nur aus dem von DVK genannten Grund - temporäre Datenmigration.

Sie sollten verstehen, dass es in einer Datenbank mit 100 Tabellen schwierig ist, sich den Zweck jeder Tabelle zu merken. Wenn Sie hier weitere 300 Aufrufe hinzufügen, wird dies zu einem völligen Durcheinander. Dann verwenden die "Ansichtsliebhaber" in der Regel verschachtelte Ansichten und dann die verschachtelten Ansichten in gespeicherten Prozeduren. Ich persönlich arbeite jetzt mit einer Datenbank, in der Ansichten viermal in der Tiefe verschachtelt sind! Um eine einfachste Logik einer gespeicherten Prozedur zu verstehen, muss ich zuerst alle Ansichten durchgehen.

Dan
quelle
8
-1 Die Aussichten sind gut. Sie können böse werden, wenn Sie sie unangemessen verwenden - aber das gilt für alles.
NullUserException
1
Ansichten können böse sein, wenn sie schlecht verwendet werden. Menschen, die sie am häufigsten schlecht verwenden, scheinen diejenigen zu sein, die sie verwenden, um Dinge zu abstrahieren, und dann, wie Sie sagen, Ansichten aufrufen, die Ansichten aufrufen, die Ansichten aufrufen, bis zu dem Punkt, an dem Sie möglicherweise 10 Millionen Rekorde materialisieren müssen, bevor Sie ein Ergebnis zurückgeben Satz von 3. Ansichten, die Tabellen direkt aufrufen, können sehr nützlich sein.
HLGEM
@HGLEM Gibt es eine Möglichkeit, Ansichtsaufrufe von anderen Ansichten einzuschränken?
Igor Soloydenko