ASSERTION

Assertions sind schon seit SQL-92 ein Teil des Integritätssicherungskonzepts des SQL-Standards, dessen anderer Teil die CONSTRAINTS darstellen. Sie sind eigenständige Datenbankobjekte, mit denen sich semantische Restriktionen an ein oder mehrere Tabellen formulieren lassen. Dies ist möglich weil sie auch eine SELECT-Abfrage enthalten dürfen. Sie ähneln einem CHECK-Constraint und sind aber leider bislang primär ein Konzept des SQL-Standards und in vielen realen DB-Systeme nicht implementiert (auch nicht bei Oracle). Aufgrund der zugelassenen SELECT-Abfragen sind mit Assertions semantisch wesentlich umfangreichere Bedingungen an eine Relation/Tabellen formulierbar als mit CHECK-Constraints. Als Prüfungszeitpunkte sind hier wie auch bei den CONSTRAINTS IMMEDIATE und auch DEFERRED vorgesehen.

Soll das Konzept der Assertions simuliert werden, so muss derzeit auf selbstprogrammierte Lösungen mittels TRIGGERN ausgewichen werden. Damit ließe sich dann zumindest zum IMMEDIATE-Prüfungszeitpunkt prüfen. Der DEFERRED-Zeitpunkt ist derzeit nicht programmierbar mit TRIGGERN .

Beispiel:

  -- Diese Assertion legt die Bedingung fest, dass es gilt keine OTeile in der Strukturtabelle gibt, 
  -- die nicht vom Typ Baugruppe oder Artikel sind.
 CREATE ASSERTION Oberteil_ass
    CHECK (NOT EXISTS (SELECT * FROM Struktur
                       WHERE OTeil NOT IN (SELECT TNr FROM Teile
                                           WHERE Typ IN ('Baugruppe', 'Artikel'))));

  -- Wollte man diese Anforderung mit einem CHECK-Constraint lösen, 
  -- dann müßte man aufgrund der fehlenden Möglichkeit einer Anfrage an eine andere Tabelle
  -- hier z.B. die Typ-Information der Teile mit in der Struktur-Tabelle speichern. 
  -- Ein beachtlicher Mehraufwand und die Problme der redundaten Datenhaltung. 
  -- Oder eben einen Trigger programmieren, der die Prüfung vornimmt. 

Quellen:

  • INCITS/ISO/IEC 9075-1-2008. Part 1 "SQL/Framework", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • INCITS/ISO/IEC 9075-1-2008. Part 2 "SQL/Foundation", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2

Kategorien: SQL, A