Dreiwertige Logik

Bei den relationalen Datenbanksystemen? können Spalten auch leer sein. Dieser Umstand wird umgangsprachliche als "NULL" bezeichnet, da vom DBMS ein IS NULL-Operator zur Verfügung steht, um solche leeren Spalten in Bedingung explizit behandeln zu können.

Diese leeren Spalten (NULL) führen dann bei der Auswertung von Suchbedingungen dazu, dass eine dreiwertige Logik erforderlich wird, die neben TRUE und FALSE auch noch den Wahrheitswert UNKNOWN kennt. UNKNOWN tritt dann auf, wenn eine leere Spalte oder Variable, die NULL ist, mit einem anderen Wert verglichen wird. Diese Aussage gilt für alle Operatoren von Suchbedingungen mit Ausnahme von IS NULL und EXISTS. Diese dreiwertige Logik ist unter anderem bei SQL, Oracle und PL/SQL zu finden.

Daraus ergeben sich die folgenden Wahrheitstabellen für die booleschen Operatoren:

Wahrheitstabelle des AND-Operators

ANDTRUEFALSEUNKNOWN
TRUETRUEFALSEUNKNOWN
FALSEFALSEFALSEFALSE
UNKNOWNUNKNOWNFALSEUNKNOWN

Wahrheitstabelle des OR-Operators

ORTRUEFALSEUNKNOWN
TRUETRUETRUETRUE
FALSETRUEFALSEUNKNOWN
UNKNOWNTRUEUNKNOWNUNKNOWN

Wahrheitstabelle des NOT-Operators

NOTTRUEFALSEUNKNOWN
 FALSETRUEUNKNOWN

Die Ausführungsreihenfolge ist priorisiert, erst NOT dann AND und als letztes OR. Im Zweifelsfall empfiehlt es sich, immer Klammern "(", ")" zu setzen.

Eine zentrale Rolle spielt die dreiwertige Logik bei der Auswertung der Suchbedingung für SELECT-Anfragen, bei den Datenmanipulationen (INSERT, UPDATE, DELETE?) sowie bei den CONSTRAINTS. Diesbezüglich ist eine Besonderheit zu beachten. Werden Bedingungen bei SELECT-Anfragen oder Datenmanipulationen zu TRUE ausgewertet, so wird der zugehörige Datensatz in die Ergebnismenge aufgenommen, bei FALSE oder UNKNOWN nicht. Hingegen wird bei der Integritätsprüfung mittels CONSTRAINTS UNKNOWN wie TRUE behandelt und ein Fehler nur im Falle von FALSE als Ergebnis der Auswertung der Bedingung erkannt. Kurz gesagt: Bei der Integritätsprüfung wird UNKNOWN wie TRUE gehandhabt, sonst wie FALSE.

Quellen:

  • Quellen/Standards in http://www.wiscorp.com/SQLStandards.html und http://www.jcc.com/sql.htm
  • 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
  • Adams, Ralf: "SQL - Eine Einführung mit vertiefenden Exkursen", Hanser, München, 2012, ISBN 978-3-446-43200-0
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
  • 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
  • Sieben, Jürgen: "Oracle® SQL - Das umfassende Handbuch", Galileo Press, 2012, ISBN 978-3-8362-1875-7
  • Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2

Kategorie:: Aktive Datenbanken, Oracle-PL-SQL, SQL, D