Datensichten - Views
Aus Informatik
Version vom 15. November 2011, 16:55 Uhr von Ingo Höpping (Diskussion | Beiträge) (→Datenmanipulation an Datensichten)
Inhaltsverzeichnis
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...)