Wann sollte eine Ansicht anstelle einer Tabelle verwendet werden?


108

Wann sollte eine Ansicht tatsächlich über einer tatsächlichen Tabelle verwendet werden? Welche Gewinne sollte ich damit erwarten?

Was sind insgesamt die Vorteile einer Ansicht über einer Tabelle? Sollte ich die Tabelle nicht so gestalten, wie die Ansicht eigentlich aussehen sollte?

Antworten:


80

Oh, es gibt viele Unterschiede, die Sie berücksichtigen müssen

Ansichten zur Auswahl:

  1. Ansichten bieten Abstraktion über Tabellen. Sie können Felder in einer Ansicht einfach hinzufügen / entfernen, ohne das zugrunde liegende Schema zu ändern
  2. Ansichten können komplexe Verknüpfungen einfach modellieren.
  3. Ansichten können datenbankspezifische Inhalte vor Ihnen verbergen. Zum Beispiel, wenn Sie einige Überprüfungen mit der Oracles SYS_CONTEXT-Funktion oder vielen anderen Dingen durchführen müssen
  4. Sie können Ihre GRANTS problemlos direkt in Ansichten und nicht in den tatsächlichen Tabellen verwalten. Es ist einfacher zu verwalten, wenn Sie wissen, dass ein bestimmter Benutzer möglicherweise nur auf eine Ansicht zugreift.
  5. Ansichten können Ihnen bei der Abwärtskompatibilität helfen. Sie können das zugrunde liegende Schema ändern, aber die Ansichten können diese Fakten vor einem bestimmten Client verbergen.

Ansichten zum Einfügen / Aktualisieren:

  1. Sie können Sicherheitsprobleme mit Ansichten behandeln, indem Sie Funktionen wie die Oracle-Klausel "WITH CHECK OPTION" direkt in der Ansicht verwenden

Nachteile

  1. Sie verlieren Informationen über Beziehungen (Primärschlüssel, Fremdschlüssel)
  2. Es ist nicht offensichtlich, ob Sie eine Ansicht einfügen / aktualisieren können, da die Ansicht die zugrunde liegenden Verknüpfungen vor Ihnen verbirgt

3
Kurze Frage: Sind Ansichten "permanent" oder dauern sie nur das Leben der Sitzung? Grund, den ich frage: Wir haben ein System, das manchmal mitten in einem langen Codelauf ausfällt. Ich mildere dies, indem ich Teile des Codes in Zwischentabellen beiße, die Zwischenergebnisse speichern. Wenn das System vor Abschluss des Codes ausfällt, muss ich nur ab der zuletzt gespeicherten temporären Tabelle abholen. Ich könnte zur Verwendung von Ansichten wechseln, wenn sie dieselbe Beständigkeit bieten. Ansonsten mache ich einfach weiter und lasse die Temperaturen am Ende des Laufs fallen. Vielen Dank!
Ouonomos

8
@ouonomos: Eine normale Ansicht enthält keine Daten. Es ist nur eine gespeicherte SQL-Anweisung, dh eine Ansicht der zugrunde liegenden Daten. Einige Datenbanken (z. B. Oracle, PostgreSQL) unterstützen materialisierte Ansichten, in denen die "Ansicht" für einen schnelleren Zugriff vorübergehend in einer anderen Tabelle gespeichert wird. Dies geschieht, um den Lesezugriff zu beschleunigen, wenn die Ansicht komplex ist. Dies hilft Ihnen in Ihrem Fall jedoch nicht weiter, da eine materialisierte Ansicht immer noch eine Ansicht ist und keine Daten für sich. Ihr Ansatz ist wahrscheinlich in Ordnung.
Lukas Eder

44

Ansichten können:

  • Vereinfachen Sie eine komplexe Tabellenstruktur
  • Vereinfachen Sie Ihr Sicherheitsmodell, indem Sie vertrauliche Daten filtern und Berechtigungen auf einfachere Weise zuweisen können
  • Ermöglichen es Ihnen, die Logik und das Verhalten zu ändern, ohne die Ausgabestruktur zu ändern (die Ausgabe bleibt gleich, aber das zugrunde liegende SELECT kann sich erheblich ändern).
  • Steigern Sie die Leistung (SQL Server-indizierte Ansichten)
  • Bieten Sie eine spezifische Abfrageoptimierung mit der Ansicht an, die sonst möglicherweise schwer zu finden ist

Und Sie sollten keine Tabellen entwerfen, die mit Ansichten übereinstimmen . Ihr Basismodell sollte sich mit dem effizienten Speichern und Abrufen der Daten befassen. Ansichten sind teilweise ein Werkzeug, mit dem Sie die Komplexität eines effizienten, normalisierten Modells verringern können, indem Sie diese Komplexität abstrahieren können.

Die Frage "Was sind die Vorteile einer Ansicht gegenüber einer Tabelle?" Ist kein guter Vergleich. Sie können nicht ohne Tabellen gehen, aber Sie können ohne Ansichten verzichten. Sie existieren jeweils aus einem ganz anderen Grund. Tabellen sind das konkrete Modell und Ansichten sind eine abstrahierte Ansicht.


1
+1 Ansichten sind teilweise ein Werkzeug, das die Komplexität eines effizienten, normalisierten Modells verringert, indem Sie diese Komplexität abstrahieren können.
Metdos

34

Ansichten sind akzeptabel, wenn Sie sicherstellen müssen, dass jedes Mal komplexe Logik befolgt wird. Zum Beispiel haben wir eine Ansicht, die die Rohdaten erstellt, die für die gesamte Finanzberichterstattung benötigt werden. Wenn alle Berichte diese Ansicht verwenden, arbeiten alle mit demselben Datensatz, anstatt dass ein Bericht einen Satz von Verknüpfungen verwendet und ein anderer vergisst, einen zu verwenden, der unterschiedliche Ergebnisse liefert.

Ansichten sind akzeptabel, wenn Sie Benutzer auf eine bestimmte Teilmenge von Daten beschränken möchten. Wenn Sie beispielsweise keine Datensätze löschen, sondern nur den aktuellen als aktiv und die älteren Versionen als inaktiv markieren, möchten Sie, dass in einer Ansicht nur die aktiven Datensätze ausgewählt werden. Dies verhindert, dass Benutzer vergessen, die where-Klausel in die Abfrage aufzunehmen, und schlechte Ergebnisse erhalten.

Mithilfe von Ansichten kann sichergestellt werden, dass Benutzer nur auf eine Reihe von Datensätzen zugreifen können. Beispielsweise kann eine Ansicht der Tabellen für einen bestimmten Client und keine Sicherheitsrechte für die Tabellen bedeuten, dass die Benutzer für diesen Client immer nur die Daten sehen können für diesen Kunden.

Ansichten sind beim Refactoring von Datenbanken sehr hilfreich.

Ansichten sind nicht akzeptabel, wenn Sie Ansichten zum Aufrufen von Ansichten verwenden, was zu einer schrecklichen Leistung führen kann (zumindest in SQL Server). Wir haben fast einen Multimillionen-Dollar-Kunden verloren, weil sich jemand dafür entschieden hat, die Datenbank so zu abstrahieren, und die Leistung war horrend und es kam häufig zu Zeitüberschreitungen. Wir mussten auch für das Update bezahlen, nicht für den Kunden, da das Leistungsproblem vollständig unsere Schuld war. Wenn Ansichten Ansichten aufrufen, müssen sie die zugrunde liegende Ansicht vollständig generieren. Ich habe dies gesehen, wo die Ansicht eine Ansicht aufgerufen hat, die eine Ansicht aufgerufen hat, und so viele Millionen Datensätze generiert wurden, um die drei zu sehen, die der Benutzer letztendlich benötigte. Ich erinnere mich, dass eine dieser Ansichten 8 Minuten dauerte, um eine einfache Zählung (*) der Datensätze durchzuführen. Ansichten, die Ansichten aufrufen, sind eine äußerst schlechte Idee.

Ansichten sind oft eine schlechte Idee, um Datensätze zu aktualisieren, da Sie normalerweise nur Felder aus derselben Tabelle aktualisieren können (auch dies ist SQL Server, andere Datenbanken können variieren). In diesem Fall ist es sinnvoller, die Tabellen trotzdem direkt zu aktualisieren, damit Sie wissen, welche Felder verfügbar sind.


1
Ich wusste nicht, dass es ein Leistungsproblem mit der Ansicht gibt, die die Ansicht aufruft. Das scheint seltsam. Wird das vom Abfrageoptimierer nicht richtig gehandhabt? Welche Version von SQL Server wurde in Ihrem Fall verwendet?
Patrick Honorez

7

Ansichten sind praktisch, wenn Sie aus mehreren Tabellen auswählen oder nur eine Teilmenge einer Tabelle abrufen müssen.

Sie sollten Ihre Tabellen so gestalten, dass Ihre Datenbank gut normalisiert ist (minimale Duplizierung). Dies kann das Abfragen etwas erschweren.

Ansichten sind eine gewisse Trennung, sodass Sie die Daten in den Tabellen anders anzeigen können als sie gespeichert sind.


7

Es ist üblich, Verknüpfungen in einer Ansicht auszublenden, um dem Benutzer ein stärker denormalisiertes Datenmodell zu präsentieren. Andere Verwendungszwecke umfassen Sicherheit (z. B. durch Ausblenden bestimmter Spalten und / oder Zeilen) oder Leistung (bei materialisierten Ansichten).


6

Sie sollten Ihre Tabelle OHNE Berücksichtigung der Ansichten entwerfen.
Neben dem Speichern von Verknüpfungen und Bedingungen haben Ansichten einen Leistungsvorteil: SQL Server kann seinen Ausführungsplan in der Ansicht berechnen und speichern und ihn daher schneller als "on the fly" SQL-Anweisungen machen.
Die Ansicht kann auch Ihre Arbeit hinsichtlich des Benutzerzugriffs auf Feldebene erleichtern.


5

Wie der Name schon sagt, ist eine Ansicht unveränderlich. Dies liegt daran, dass eine Ansicht nichts anderes als eine virtuelle Tabelle ist, die aus einer in der Datenbank gespeicherten Abfrage erstellt wurde. Aus diesem Grund haben Sie einige Eigenschaften von Ansichten:

  • Sie können nur eine Teilmenge der Daten anzeigen
  • Sie können mehrere Tabellen zu einer einzigen Ansicht zusammenfügen
  • Sie können Daten in einer Ansicht aggregieren (Anzahl auswählen).
  • view enthält keine Daten, sie benötigen keinen Tabellenbereich, da es sich um virtuelle Aggregationen zugrunde liegender Tabellen handelt

Es gibt also eine Unmenge von Anwendungsfällen, für die Ansichten besser geeignet sind als Tabellen. Denken Sie nur daran, nur aktive Benutzer auf einer Website anzuzeigen. Eine Ansicht wäre besser, da Sie nur eine Teilmenge der Daten bearbeiten, die sich tatsächlich in Ihrer Datenbank befinden (aktive und inaktive Benutzer).

Schauen Sie sich diesen Artikel an

hoffe das hat geholfen ..


2

Laut Wikipedia ,

Ansichten können gegenüber Tabellen viele Vorteile bieten:

  • Ansichten können eine Teilmenge der in einer Tabelle enthaltenen Daten darstellen .
  • Ansichten können den Grad der Exposition der zugrunde liegenden Tabellen gegenüber der Außenwelt begrenzen : Ein bestimmter Benutzer hat möglicherweise die Berechtigung, die Ansicht abzufragen, während ihm der Zugriff auf den Rest der Basistabelle verweigert wird.

  • Ansichten können mehrere Tabellen zu einer einzigen virtuellen Tabelle verbinden und vereinfachen .

  • 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.

  • 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.

  • Ansichten benötigen nur sehr wenig Speicherplatz . Die Datenbank enthält nur die Definition einer Ansicht, keine Kopie aller darin enthaltenen Daten.

  • Ansichten können abhängig von der verwendeten SQL-Engine zusätzliche Sicherheit bieten .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.