2009-03-10 29 views
27

Diese Frage bezieht sich auf Datenbankansichten, nicht materialisierte-Ansichten.Wann Datenbankansichten verwenden und wann nicht?

Vorteile:

  • Vereinfachung Abfrage.
  • Vermeiden Sie wiederholte Joins bei Mehrfachabfragen.
  • Vermeiden Sie magische Zahlen.

Nachteile:

  • Hiding realen Abfragen (können Sie schließt sich wiederholen).

Was noch?

+0

[hier] [1] ist eine andere Antwort Ich denke, es [1] nützlich sein wird: http://stackoverflow.com/questions/1278521/why-do-you-create- Ein-Blick-in-einer-Datenbank – saman

Antwort

11

Vorteile: Hier können Sie die zugrunde liegenden Datenstrukturen ändern, ohne die Abfragen betreffen Anwendungen verwenden (solange Ihre Ansicht, die die Datenstrukturen verbergen kann)

7

Ansichten ziemlich genial sind, wenn Sie nicht ganz das Vertrauen in Party sendet Anfragen an Ihre Datenbank. Ein gutes Beispiel könnte sein, dass Sie eine Sicht auf Tabellen für einen Auftragnehmer erstellen, so dass sie nur die Zeilen sehen können, die zu ihrem Projekt gehören.

11

Sicherheit. Erteilen Sie den Benutzern Zugriff auf eine Ansicht, die die zurückgegebenen Spalten sehen können.

0

Ich benutzte sie die ganze Zeit, jetzt selten. Allerdings mache ich meinen gesamten Datenzugriff über gespeicherte Prozeduren, so dass die Nützlichkeit einer Ansicht etwas geringer ist, da der SP die Komplexität der Verknüpfung dort verbergen kann, wo sie benötigt wird.

Ich würde immer noch in Betracht ziehen, eine Ansicht zu verwenden, wenn eine von vielen Tabellen eine besonders komplizierte hatte, von der ich dann viele SPs auf der Oberseite bauen musste, aber um ehrlich zu sein, kann ich an nichts denken, das ich habe in der Produktion jetzt.

Das andere Szenario würde ich verwenden würde eine wo meine Benutzer Zugriff auf die Datenbank für die Erstellung ihrer eigenen Berichte haben, und ich wollte die zugrunde liegende Komplexität für sie verbergen.

3

Jetzt, da SQL Server common table expressions hat, finde ich weniger Ansichten. Wenn ich eine Ansicht erstelle, ist es normalerweise für eine normalisierte Hierarchie, die in vielen Abfragen verwendet werden kann, nicht etwas, das eine Abfrage ersetzt.

Zum Beispiel Region, Markt und Stadt können drei normalisierte Tabellen (Schneeflocke) sein. 90% meiner Abfragen benötigen diese Daten. Daher erstelle ich eine Ansicht. Die Ansicht ersetzt niemals eine einzelne Abfrage, sondern macht alle anderen Abfragen einfach und DRY.

4

Obwohl Ansichten Komplexität und mehrere Joins verbergen können, ist dies eine Komplexität, die im SP ohnehin vorhanden wäre.

Wenn der SP optimiert sein könnte, sollte die Ansicht optimiert werden, was zu einer höheren Leistung aller SPs führt, die diese Ansicht treffen.

Ansichten sind unglaublich mächtig und nützlich für einen Grund, der über allen anderen sehr guten Gründen herausragt. Sie reduzieren die Code-Duplizierung. Das ist in den meisten Fällen das Endergebnis. Wenn eine Abfrage an drei oder mehr Stellen verwendet wird, vereinfacht eine Ansicht Ihre Änderungen drastisch, wenn sich das Schema oder die Abfrageparameter ändern.

Ich musste einmal 22 gespeicherte Prozeduren bearbeiten, um einige Abfragelogik zu ändern. Wenn die ursprüngliche Architektur Ansichten verwendet hätte, hätte ich nur drei Änderungen gehabt.

1

Ich musste einige Male Ansichten verwenden, um seltsame Joins und Gruppierungen nach Alias ​​zu machen.

Durch seltsame Joins, meine ich die Auswahl einer Liste von verschiedenen Daten und dann äußere Verknüpfung sie zurück zu der Tabelle, aus der sie kamen, um leere Einträge für leere Tage zu erhalten. Ich konnte keinen anderen Weg finden, es zu tun.

Wie bei der Gruppierung nach Aliasen scheint es von der Komplexität der Formel innerhalb des Alias ​​zu abhängen. Wenn der Alias ​​keine tatsächlichen Spalten oder Spalten referenzierte, die bereits gruppiert wurden, war alles in Ordnung, aber Aliase für Spalten, die nicht in der Gruppierung enthalten waren, waren Wurffehler.

Ich erinnere mich daran, irgendwo während meiner Universitätszeit gelesen oder gehört zu haben, dass die Auswahl aus einer Ansicht schneller war als die Auswahl aus einer Reihe verbundener Tabellen, aber ich weiß nicht, ob das stimmt.

Ein letzter Vorteil der Verwendung einer Ansicht: Pivot-Tabellen in Excel. Ich glaube nicht, dass es eine Möglichkeit gibt, Tabellen zu verbinden, oder zumindest nicht in der Benutzeroberfläche des Assistenten. Es könnte möglich sein, Joins in Microsoft Query durchzuführen, aber ich habe es noch nicht versucht, weil mir der Gedanke gerade gekommen ist.