Premium

Views

Gut entworfene Anwendungen stellen in der Regel eine offene Schnittstelle bereit und verbergen die Implementierungsdetails, sodass Änderungen am Design vorgenommen werden können, ohne die Endnutzer zu beeinträchtigen.

Beim Entwurf deiner Datenbank kannst du ein ähnliches Ergebnis erzielen, indem du die Tabellen abschirmst und den Zugriff auf die Daten nur über eine Reihe von Views erlaubst.

In diesem Artikel schauen wir uns an, was Views sind, wie sie erstellt werden und wofür sie nützlich sein können.

Was ist eine View

Eine View ist ein Datenbankobjekt, das das Ergebnis einer per SELECT definierten Abfrage zum Zeitpunkt des Zugriffs auf die View darstellt.

Views werden manchmal als „virtuelle Tabellen“ bezeichnet. Das liegt daran, dass eine View für den Nutzer wie eine Tabelle aussieht, tatsächlich aber keine Daten speichert, sondern sie zum Zeitpunkt des Zugriffs aus anderen Tabellen holt.

Ändern sich die Daten in der zugrundeliegenden Tabelle, bekommt der Nutzer beim Zugriff auf die View, die diese Tabelle verwendet, die aktuellen Daten. Views cachen die Ergebnisse der Tabellenabfrage während ihrer Arbeit nicht.

Beispiel für das Erstellen einer View

Als einfaches Beispiel: Nehmen wir an, du möchtest die E-Mail-Adressen in der Nutzertabelle (Users) teilweise verbergen.

Das kann zum Beispiel nützlich sein, wenn die Richtlinien deines Unternehmens es nicht allen erlauben, vertrauliche Informationen über Nutzer zu verwenden. Anstatt also direkten Zugriff auf die Tabelle Users zu erlauben, definierst du eine View mit dem Namen ViewUsers und verlangst, dass alle sie für den Zugriff auf die Nutzerdaten verwenden.

Hier ist ein Beispiel für die Definition dieser View:

MySQL 8.1
CREATE VIEW ViewUsers AS
    SELECT id,
           name,
           CONCAT(SUBSTR(email, 1, 2), '****', SUBSTR(email, -4)) AS email
FROM Users;

Hier ist ein Beispiel für die Definition dieser View:

MySQL 8.1
CREATE VIEW ViewUsers AS
    SELECT id,
           name,
           CONCAT(SUBSTR(email, 1, 2), '****', RIGHT(email, 4)) AS email
FROM Users;

Eine View sieht in einer SQL-Abfrage aus wie eine normale Tabelle und wird auch so verwendet:

MySQL 8.1
SELECT * FROM ViewUsers;
idnameemail
1Bruce Willisba****.com
2George Clooneyte****.com
3Kevin Costnerme****.com
4Donald Sutherlandra****.net
5Jennifer Lopezba****.com
6Ray Liottajd****.net
7Samuel L. Jacksonmo****.com
8Nikole Kidmanok****.com
9Alan Rickmanka****.net
10Kurt Russellga****.com
11Harrison Fordko****.com
12Russell Crowegl****.net
13Steve Martinne****.com
14Michael Cainedm****.com
15Angelina Joliech****.net
16Mel Gibsonro****o.ca
17Michael Douglasti****.com
18John Travoltawa****.com
19Sylvester Stalloneko****.com
20Tommy Lee Jonessz****.com
21Catherine Zeta-Jonesfl****.com
22Antonio Banderassa****.net
23Kim Basingerja****.net
24Sam Neillcl****.com
25Hideo Kojimaad****.org
26ClINT Eastwoodfr****.net
27Brad Pittke****.net
28Johnny Deppcg****o.ca
29Pierce Brosnantr****.com
30Sean Conneryjs****.com
31Bruce Williske****.com
32Mullah Omarjg****.com
33Vasanta Robertaro****.com

Wenn du wissen willst, welche Spalten in der View verfügbar sind, kannst du den Befehl DESCRIBE nutzen:

MySQL 8.1
DESCRIBE ViewUsers;
FieldTypeNullKeyDefaultExtra
idintNO<NULL>
namevarchar(32)NO<NULL>
emailvarchar(38)YES<NULL>

Wenn du wissen willst, welche Spalten in der View verfügbar sind, kannst du eine Abfrage auf information_schema ausführen:

MySQL 8.1
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'viewusers';

Allgemeine Syntax einer View

MySQL 8.1
CREATE [OR REPLACE]
VIEW view_name [(view_spalten_namen)]
AS select_ausdruck

OR REPLACE — wird dieser optionale Parameter verwendet und existiert bereits eine View mit diesem Namen, wird die alte View gelöscht und eine neue erstellt. Andernfalls tritt beim Versuch, eine View mit einem bereits existierenden Namen anzulegen, ein Fehler auf.

MySQL 8.1
CREATE [OR REPLACE] VIEW view_name [(view_spalten_namen)]
AS select_ausdruck

OR REPLACE — wird dieser optionale Parameter verwendet und existiert bereits eine View mit diesem Namen, wird die alte View gelöscht und eine neue erstellt. Andernfalls tritt beim Versuch, eine View mit einem bereits existierenden Namen anzulegen, ein Fehler auf.

Wofür Views nützlich sind

Vereinfachung komplexer Abfragen

Views werden eingesetzt, um komplexe Abfragen zu vereinfachen und eine Abstraktion zwischen Nutzer und Datenbank zu schaffen. Sie können die Komplexität der Datenstruktur verbergen und eine vereinfachte Schnittstelle für den Datenzugriff bereitstellen.

Verbesserung der Performance

Das Erstellen von Views, die komplexe Abfragen kapseln, kann dabei helfen, die Ausführung dieser Abfragen zu optimieren. Das kann zu einer schnelleren Ausführung der Abfragen und einer Verbesserung der Gesamt-Performance der Datenbank führen.

Das Erstellen von Views, die komplexe Abfragen kapseln, kann dabei helfen, die Ausführung dieser Abfragen zu optimieren. PostgreSQL unterstützt materialisierte Views (MATERIALIZED VIEW), die die Ergebnisse einer Abfrage physisch speichern und regelmäßig aktualisiert werden, was die Performance bei komplexen Abfragen erheblich verbessern kann.

Sicherstellung der Sicherheit

Views können verwendet werden, um die Sicherheit vertraulicher Daten zu gewährleisten. Indem man Views erstellt, die den Zugriff auf bestimmte Spalten oder Zeilen einschränken, können Administratoren den Zugriff auf sensible Informationen begrenzen. Das hilft sicherzustellen, dass nur autorisierte Nutzer Zugriff auf vertrauliche Daten haben.

Fazit

Views sind ein wichtiges Werkzeug in SQL, mit dem sich komplexe Abfragen vereinfachen, der Datenzugriff standardisieren, die Performance verbessern und die Datensicherheit gewährleisten lassen.

Lass uns prüfen, wie gut du das Thema verstanden hast: Wähle die richtige Aussage zur Frage „Was ist eine View in der Datenbank?“