Sichtänderungen mit INSTEAD OF TRIGGERN
Bei dieser Problematik geht es nicht um die Änderungen an der Sichtdefinition (Spalten, Anfrage, ...) sondern um die Problematik der nicht änderbaren Sichten, die auch als View-Updating-Problem bekannt ist. Falls sich keine automatischen Transformationen der Manipulationen von Daten der Sicht in Manipulationen der zugrunde liegenden Tabellendaten finden lassen, oder wenn Änderungsoperationen auf Sichten nicht erlaubt sind, so können für konkrete Anwendungen von Entwicklern programmierte Trigger die gewünschten Transformationen vornehmen. Dazu bietet Oracle die INSTEAD-OF-TRIGGER an und der SQL-Standard leider gar nichts. Ihren ersten Einsatz fanden im Oracle8-System
Zudem werden die INSTEAD-OF-TRIGGER bei Oracle dazu eingesetzt, die Transformation von Objektsichten auf relationale Tabellen abzubilden. Dafür werden aus Tabellen strukturierte Objektklassen zusammengesetzt. Wenn derartige Objektsichten den Übergang zu objektorientierter Softwarestrukturierung ebnen sollen, treten folgende Probleme auf:
- Methoden sind für den Objekttyp definiert (nicht für die Objektsicht). Um den Typ aber wiederverwendbar zu machen, sollte eine Methodenimplementierung unabhängig von der Sichtdefinition sein.
- In einer relationalen Datenbank können die Methoden eines Objekttyps nur als Ersatz für die SQL-Statements INSERT, UPDATE und DELETE dienen, wenn diese wiederum auf derartige Anweisungen auf den Basisrelationen zugreifen können.
INSTEAD-OF-TRIGGER erlauben, dass die generischen SQL-Statements INSERT, UPDATE und DELETE auch für Objektsichten möglich sind. Dabei sind jedoch folgende Besonderheiten zu beachten:
- INSTEAD-OF-TRIGGER arbeiten datensatzorientiert und bei Objektsichten einzelobjektorientiert.
- Mittels eines :NEW-Präfix wird auf die Parameter eines mit INSERT eingefügten Objekts zugegriffen. Beim Ändern gilt dies entsprechend für :NEW und :OLD und beim Löschen für :OLD.
Zusammenfassend können Instead-of-Trigger in folgenden Fällen sinnvoll eingesetzt werden:
- Bei Sichten für den Zugriffsschutz.
- Zur Ergänzung von NOT NULL-Spalten der Tabellen mit Werten, die in der Sicht nicht angezeigt werden.
- Wenn z.B. bestimmte Benutzer nur bestimmte Werte innerhalb vorgegebener Grenzen verändern dürfen - Stichwort Datenkonsistenz.
- Wenn eine Änderung in der Tabellenstruktur durch eine Sicht verborgen bzw. verkapselt werden soll (Transparenz von Schemaänderungen).
- Die aufgeführten Objektsichten können ausschließlich über Instead-of-Trigger manipuliert werden.
Quellen:
- Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
- Türker, Can/Saake, Gunter: "Objektrelationale Datenbanken", dpunkt-verlag, Heidelberg, 2006, ISBN 3-89864-190-2