Ich versuche nur, eine allgemeine Vorstellung davon zu bekommen, wofür Ansichten in RDBMS verwendet werden. Das heißt, ich weiß, was eine Ansicht ist und wie man eine macht. Ich weiß auch, wofür ich sie in der Vergangenheit verwendet habe.
Aber ich möchte sicherstellen, dass ich genau verstehe, wofür eine Ansicht nützlich ist und wofür eine Ansicht nicht nützlich sein sollte. Genauer:
- Wofür ist eine Ansicht nützlich?
- Gibt es Situationen, in denen es verlockend ist, eine Ansicht zu verwenden, wenn Sie keine verwenden sollten?
- Warum sollten Sie eine Ansicht anstelle einer Tabellenwertfunktion verwenden oder umgekehrt?
- Gibt es Umstände, unter denen eine Ansicht nützlich sein könnte, die auf den ersten Blick nicht erkennbar sind?
(Und fürs Protokoll: Einige dieser Fragen sind absichtlich naiv. Dies ist teilweise eine Konzeptprüfung.)
sql
views
rdbms-agnostic
Jason Baker
quelle
quelle
Antworten:
1) Wofür ist eine Ansicht nützlich?
2) Gibt es Situationen, in denen es verlockend ist, eine Ansicht zu verwenden, wenn Sie keine verwenden sollten?
3) Warum sollten Sie eine Ansicht anstelle einer Tabellenfunktion verwenden oder umgekehrt?
4) Gibt es Umstände, unter denen eine Ansicht nützlich sein könnte, die auf den ersten Blick nicht erkennbar sind?
quelle
In gewisser Weise ist eine Ansicht wie eine Schnittstelle. Sie können die zugrunde liegende Tabellenstruktur beliebig ändern, aber die Ansicht bietet eine Möglichkeit, dass sich der Code nicht ändern muss.
Ansichten sind eine gute Möglichkeit, Autoren etwas einfach zu melden. Wenn Ihre Geschäftsbenutzer über Crystal Reports auf die Daten zugreifen möchten, können Sie ihnen in ihrem Konto einige Ansichten geben, die die Daten vereinfachen - möglicherweise sogar für sie denormalisieren.
quelle
Ansichten können verwendet werden, um Sicherheit zu bieten (dh Benutzer können auf Ansichten zugreifen, die nur auf bestimmte Spalten in einer Tabelle zugreifen), Ansichten können zusätzliche Sicherheit für Aktualisierungen, Einfügungen usw. bieten. Ansichten bieten auch eine Möglichkeit, Spaltennamen zu aliasen (wie dies auch der Fall ist) sp's), aber Ansichten sind eher eine Isolation von der eigentlichen Tabelle.
quelle
In gewissem Sinne denormalisieren Ansichten. Eine Denormalisierung ist manchmal erforderlich, um Daten aussagekräftiger bereitzustellen. Dies tun ohnehin viele Anwendungen durch Domänenmodellierung in ihren Objekten. Sie helfen dabei, die Daten so darzustellen, dass sie der Perspektive eines Unternehmens besser entsprechen.
quelle
Zusätzlich zu den Angaben der anderen können Ansichten auch nützlich sein, um komplexere SQL-Abfragen aus der Anwendung zu entfernen.
Als Beispiel, anstatt in einer Anwendung Folgendes zu tun:
Sie könnten das zu einer Ansicht abstrahieren:
und im App-Code einfach:
Auch wenn sich die Datenstrukturen jemals ändern, müssen Sie den App-Code nicht ändern, neu kompilieren und erneut bereitstellen. Sie würden einfach die Ansicht in der Datenbank ändern.
quelle
Ansichten verbergen die Datenbankkomplexität. Sie sind aus vielen Gründen großartig und in vielen Situationen nützlich. Wenn Sie jedoch Benutzer haben, die ihre eigenen Abfragen und Berichte schreiben dürfen, können Sie sie als Schutz verwenden, um sicherzustellen, dass sie nicht schlecht gestaltet sind Abfragen mit fiesen kartesischen Joins, die Ihren Datenbankserver herunterfahren.
quelle
Das OP fragte, ob es Situationen gäbe, in denen es möglicherweise verlockend wäre, eine Ansicht zu verwenden, aber dies ist nicht angemessen.
Was Sie nicht für eine Ansicht verwenden möchten, ist ein Ersatz für komplexe Verknüpfungen. Das heißt, lassen Sie sich nicht von Ihrer prozeduralen Programmiergewohnheit, ein Problem in kleinere Teile zu zerlegen, dazu führen, dass Sie mehrere Ansichten verwenden, die zusammengefügt sind, anstatt einer größeren Verknüpfung. Dies beeinträchtigt die Effizienz des Datenbankmoduls, da im Wesentlichen mehrere separate Abfragen statt einer größeren ausgeführt werden.
Angenommen, Sie müssen die Tabellen A, B, C und D miteinander verbinden. Sie könnten versucht sein, eine Ansicht aus den Tabellen A und B und eine Ansicht aus C & D zu erstellen und dann die beiden Ansichten miteinander zu verbinden. Es ist viel besser, A, B, C und D in einer Abfrage zu verbinden.
quelle
Ansichten können Daten zentralisieren oder konsolidieren. Wo ich bin, haben wir eine Reihe verschiedener Datenbanken auf verschiedenen Verbindungsservern. Jede Datenbank enthält Daten für eine andere Anwendung. Einige dieser Datenbanken enthalten Informationen, die für eine Reihe verschiedener Anwendungen relevant sind. Unter diesen Umständen erstellen wir eine Ansicht in der Datenbank dieser Anwendung, in der nur Daten aus der Datenbank abgerufen werden, in der die Daten tatsächlich gespeichert sind, damit die von uns geschriebenen Abfragen nicht so aussehen, als würden sie verschiedene Datenbanken durchlaufen.
quelle
Die bisherigen Antworten sind korrekt - Ansichten sind gut für die Bereitstellung von Sicherheit, Denormalisierung (obwohl es auf diesem Weg viel Schmerz gibt, wenn sie falsch gemacht werden), Datenmodellabstraktion usw.
Darüber hinaus werden häufig Ansichten verwendet, um Geschäftslogik zu implementieren (ein abgelaufener Benutzer ist ein Benutzer, der sich in den letzten 40 Tagen nicht angemeldet hat).
quelle
Ansichten speichern viele wiederholte komplexe JOIN-Anweisungen in Ihren SQL-Skripten. Sie können einfach ein komplexes JOIN in einer Ansicht kapseln und es bei Bedarf in Ihrer SELECT-Anweisung aufrufen. Dies ist manchmal praktisch, unkompliziert und einfacher als das Schreiben der Join-Anweisungen in jeder Abfrage.
quelle
Eine Ansicht ist einfach eine gespeicherte Anweisung mit dem Namen SELECT. Stellen Sie sich Ansichten wie Bibliotheksfunktionen vor.
quelle
Ich wollte die Verwendung von Ansichten für die Berichterstellung hervorheben. Häufig besteht ein Konflikt zwischen der Normalisierung der Datenbanktabellen zur Beschleunigung der Leistung, insbesondere beim Bearbeiten und Einfügen von Daten (OLTP-Verwendungen), und der Denormalisierung, um die Anzahl der Tabellenverknüpfungen für Abfragen für die Berichterstellung und Analyse (OLAP-Verwendungen) zu verringern. OLTP gewinnt notwendigerweise normalerweise, weil die Dateneingabe eine optimale Leistung haben muss. Das Erstellen von Ansichten für eine optimale Berichtsleistung kann daher dazu beitragen, beide Benutzerklassen (Dateneingabe und Berichtsbetrachter) zufrieden zu stellen.
quelle
Ich erinnere mich an eine sehr lange SELECT, an der mehrere UNIONs beteiligt waren. Jede UNION enthielt eine Verknüpfung zu einer Preistabelle, die von einem SELECT erstellt wurde, der selbst ziemlich lang und schwer zu verstehen war. Ich denke, es wäre eine gute Idee gewesen, eine Ansicht zu haben, um die Preistabelle zu erstellen. Dies hätte die Gesamtauswahl um etwa die Hälfte verkürzt.
Ich weiß nicht, ob die Datenbank die Ansicht einmal auswerten würde oder jedes Mal, wenn in aufgerufen wurde. Weiß jemand? In diesem Fall würde die Verwendung einer Ansicht die Leistung verbessern.
quelle
Immer wenn Sie [my_interface]! = [User_interface] benötigen.
Beispiel:
TABELLE A:
ANSICHT für TABELLE A:
Auf diese Weise können Sie die ID vor dem Kunden verbergen und die Informationen gleichzeitig in einen ausführlicheren Namen umbenennen.
Die Ansicht verwendet den zugrunde liegenden Index für die Primärschlüssel-ID, sodass Sie keinen Leistungsverlust sehen, sondern nur eine bessere Abstraktion der ausgewählten Abfrage.
quelle