Datensichten - Views

Aus Informatik
Wechseln zu: Navigation, Suche

Aufbau, Sinn und Funktion

  • Virtuelle Tabelle, d.h. sie existiert nicht physikalisch (bzw. wirklich), sondern nur für den Benutzer
  • Durch SQL-Befehle lassen sich die Daten individuell für den Benutzer zusammenstellen
  • Änderungen der Basis-Tabellen spiegeln sich in der Datensicht wieder
  • Mehrere Benutzer -> unterschiedliche Datensichten --> trotzdem selbe Basisdaten
  • Datensichten gehören zur externen Ebene der Datenbank (3 Schichtenmodell)
  • Datensicht sorgt für logische Datenunabhängigkeit: Benutzer kann Daten sinnvoll ändern, ohne die Struktur der Datenbank zu kennen.
  • Zusammenführung verschiedener Tabellen (z.B.: Name, Anschrift, Auftragsnummer) und Berechnungen werden durchgeführt (z.B. Rechnungsbeträge).


Klauseln

Create View

Syntax (SQL-92-Standard)

  CREATE VIEW viewname [(spaltenliste)] AS
    Select ...
    FROM ...
    .
    .
    .
  [WITH [CASCADED | LOCAL] CHECK OPTION]
  • Zusatz WITH CHECK OPTION: Sicherstellen, dass Ergebnisse einer Update-Operation mit der Datensicht übereinstimmen.
  • ORDER-BY-Klausel nicht zulässig (nach SQL-92-Standard), jedoch in MySQL möglich.

CHECK OPTION

SQL macht es möglich, widersprüchliche Änderungen an der Datensicht zu verhindern

'''Beispiel:'''
  CREATE VIEW kunden_kayhude_check AS
    SELECT kundennr, strasse, ...
    FROM kunde							
    WHERE ort= Kayhude
  WITH [CASCADED | LOCAL] CHECK OPTION

CASCADED: Aktualisierung und Abhängigkeit in allen untergeordneten Views

LOCAL: Aktualisierung und Abhängigkeit nur in diesem View

Verhalten von Datensichten bei Abfragen

Views kann man wie real existieriende, im Speicher abgelegte Tabellen behandeln. Die Abfrage geschieht mit der SELECT Klausel :

  SELECT *
  FROM viewname

Datenmanipulation an Datensichten

Manipulationen sind nach festgesetzten Regeln (SQL-92) möglich. Daten einfügen:

  INSERT INTO kundenadr(kundennr, name, strasse, plz, ort)
  VALUES (201, Odenwald, Moorweg 2, 12345, Kusemuckel)

Problem: Attribut „Status“ nicht definiert --> Fehlermeldung

Selektion:

  CREATE VIEW kunden_kayhude AS	
  SELECT kundennr, strasse, plz, ort
  FROM kunde
  WHERE ort = Kayhude

Update:

  UPDATE kunden_kayhude	
  SET ort = Kusemuckel  
  WHERE kunden_nr = 102

Problem: Der Kunde 102 scheint in dem View nicht mehr zu sein, existiert jedoch noch in der Datenbasis.

Änderbarkeit von Daten über Views

Eingeschränkt nach SQL-92-Standard - MEIST NICHT FÜR MySQL GÜLTIG!

  • Datensicht basiert auf einer Tabelle.
  • Keine Produkte, UNION und Verbunde.
  • Ebenso keine GROUP-BY und Aggregatfunktionen.
  • In Projektionsangabe kein DISTINCT.
  • Keine virtuellen Spalten und Keine doppelten Spalten.
  • Eventuelle Unterabfragen dürfen sich nicht auf dieselbe Tabelle beziehen wie die Hauptabfrage
  • DELETE und UPDATE sind nicht zulässig
  • Problem von INSERT und UPDATE: Benutzer weiß meistens nicht, wieso seine Eingaben zu Fehlern führen (optionale und obligatorische Attribute, Gültigkeitsklauseln...)