====== Views ======
===== Eigenschaften von Views =====
* Sie sind viertuelle Tabellen die spezielle Sichten auf die Datenbanktabellen darstellen
* Durch sie können Tabellen angezeigt oder (eingeschränkt) verändert werden
* Sie basieren auf anderen Views bzw. Tabellen
* Definition durch ein SELECT
* Speichern keine eigenen Daten
* Werden wie Tabellen behandelt
===== Vorteile =====
* Zugriffsbeschränkungen auf die Datenbank
* Ermöglichen einfache Abfragen (ohne JOIN, GROUP BY Funktionen und Subselects)
* Ermöglichen Datenunabhängigkeit (Name und Struktur der Tabellen werden hinfällig, Schnittstellenstandardisierung)
===== Syntax um einen View zu erzeugen =====
CREATE [OR REPLACE | FORCE] VIEW Viewname --Inhalt in [] kann geschrieben werden,
[(Spalte1, Spalte2, Spalte3, ...)] --| = soviel wie oder
AS SELECT ... FROM ...
[WITH CHECK OPTION [Constraintname]] --ebenfalls nicht zwingend notwendig
Wenn die Zeile mit den Spaltennamen weggelassen wird, bestimmt die SELECT-Klausel die Spaltennamen des Views.
=== Definition der Schlüsselwörter in Syntax ===
* OR REPLACE
* Views werden auch erzeugt, wenn bereits ein View mit gleichem Namen besteht (man erspart sich "DROP VIEW Viewname")
* FORCE
* Der View kann erzeugt werden obwohl es die Tabellen des SELECTs nicht gibt
* WITH CHECK OPTION
* Definiert, dass man nur Zeilen in den View einfügen bzw. updaten kann, die dieser auch darstellen kann
===== Restriktionen bei Datenänderungen =====
== DELETE ==
Ein DELETE ist verboten wenn das View-Select folgendes enthält:
* JOIN
* Gruppenfunktionen
* GROUP BY Klausel
* DISTINCT
== UPDATE ==
Ein UPDATE ist verboten, wenn:
* Ein DELETE verboten ist
* Es Spalten als Ausdrücke gibt (z.B. 12 * Gehalt oder 3*4)
== INSERT ==
Ein Insert ist verboten, wenn:
* Ein UPDATE verboten ist
* NOT NULL Spalten die nicht im View-Select enthalten sind (wenn es NOT NULL Spalten in der Tabelle gibt, aber nicht im View)
===== Löschen von Views =====
DROP VIEW Viewname