7.2. Integrity Constraints
TO BE TRANSLATED...
Die einfachste Art von Integritätsbedingungen sind Attributbeschränkungen. Wenn sie im Kontext eines Attributs definiert sind, legen sie die zulässigen Werte für dieses Attribut fest.
Obligatorische Werte
In einer SQL-Tabellendefinition kann die Integritätsbedingung obligatorische Werte für ein Attribut mit Hilfe der Angabe NOT NULL
vereinbart werden. Beispielsweise wird in folgender Tabellendefinition das Attribut title
als obligatorisch deklariert:
1 2 3 4 5 | CREATE TABLE books { isbn TEXT(10) PRIMARY KEY, title TEXT(80) NOT NULL edition INTEGER } |
Da ein Primärschlüssel immer obligatorisch ist, gibt es in dieser Tabellendefinition zwei obligatorische Attribute (isbn
und title
) sowie ein optionales Attribut (edition
).
Schlüssel
Eine wichtige Art von Attributbeschränkung sind Eindeutigkeitsbeschränkungen bzw. Schlüsseldefinitionen, die verlangen, dass es nicht mehr als eine Tabellenzeile mit einem bestimmten Wert für das Schlüsselattribut (bzw. die Schlüsselattribute) geben darf.
Im vorhergehenden Abschnitt wurde bereits erklärt, dass jede Entitätstabelle mindestens einen Schlüssel haben sollte, der in einer SQL-Tabellendefinition mit PRIMARY KEY
als Primärschlüssel deklariert wird. Wenn es weitere Schlüssel gibt, werden sie mit UNIQUE ausgezeichnet, wie in folgendem Beispiel, wo es außer dem (Primär-)Schlüssel isbn
für Entitäten vom Typ books noch einen zweiten Schlüssel doi
gibt, der einen Digital Object Identifier (DOI) repräsentiert:
1 2 3 4 5 6 | CREATE TABLE books { isbn TEXT(10) PRIMARY KEY, title TEXT(80) NOT NULL, doi TEXT(50) UNIQUE, edition INTEGER } |
Es ist zu beachten, dass ein Primärschlüssel-Attribut, wie isbn
, nicht nur eindeutig, sondern auch obligatorisch ist, also für jede Tabellenzeile einen eindeutigen Wert haben muss. Beide Integritätsbedingungen, eindeutige Werte und obligatorische Werte, werden durch die SQL-Angabe PRIMARY KEY
impliziert. Dies ist bei einfachen, mit UNIQUE
definierten Schlüsseln nicht der Fall: sie können auch optional sein, also zulassen, dass es Tabellenzeilen ohne Wert gibt, wie es z.B. bei dem Attribut doi
der Tabelle books der Fall ist.
Ein Schlüssel kann auch aus mehreren Attributen zusammengesetzt sein. Zum Beispiel wird in folgendem Tabellenschema ein aus den Attributen isbn
und lending_date
zusammengesetzter Primärschlüssel definiert:
Ein zusammengesetzter Schlüssel muss eine minimale Menge von Attributen sein, deren Wertekombination eindeutig ist. Deswegen ist z.B. die Attributmenge isbn
, person_id
, lending_date
, obwohl eindeutig, kein Schlüssel.
Fremdschlüssel und Referentielle Integrität
Tabellenzeilen einer Tabelle B können in einer Tabelle A mit Hilfe eines Attributs referenziert werden, das Werte für den Primärschlüssel von B enthält. Ein solches Attribut ist ein Fremdschlüssel-Attribut, das in SQL mit Hilfe der Angabe REFERENCES
vereinbart wird, wie in folgender Tabellendefinition zu sehen ist, in der die Tabelle books Zeilen der Tabelle publishers referenziert (nämlich für jeden books-Datensatz den zugehörigen publishers-Datensatz).
1 2 3 4 5 6 7 8 9 | CREATE TABLE books { isbn TEXT(10) PRIMARY KEY, title TEXT(80) NOT NULL, publisher TEXT(30) REFERENCES publishers } CREATE TABLE publishers { name TEXT(20) PRIMARY KEY, address TEXT(80) NOT NULL } |
Wenn ein Fremdschlüssel sich auf einen zusammengesetzten Schlüssel bezieht, kann er nicht in einer Spaltendefinition, sondern muss in einer separaten FOREIGN-KEY-Klausel deklariert werden.
Der Begriff Referentielle Integrität drückt aus, dass es für jeden Fremdschlüsselwert einen korrespondierenden Schlüsselwert in der referenzierten Tabelle geben muss. Ein SQL-DBMS überprüft automatisch für alle Fremdschlüssel die Referentielle Integrität. Das impliziert, dass man z.B. keinen neuen Datensatz in die Tabelle books einfügen kann, wenn nicht zuvor ein entsprechender publishers-Datensatz angelegt wurde.
Fremdschlüssel repräsentieren Abhängigkeitsbeziehungen zwischen Tabellen (Fremdschlüssel-Abhängigkeiten), die In MS Access als Tabellen-Beziehungen definiert und visualisiert werden können. Dazu öffnet man ein Registerblatt Beziehungen, indem man in [Datenbanktools] auf die Option Beziehungen klickt. Dann fügt man beide Tabellen, books und publishers, hinzu und definiert die Fremdschlüssel-Abhängigkeit zwischen dem Attribut books.publisher und der Tabelle publishers, indem man das Attribut mit der Maus auswählt und auf das Primärschlüsselattribut name der Tabelle publishers zieht. Dadurch entsteht eine Verbindungslinie, die von MS Access automatisch mit dem Beziehungs-Funktionalitätstyp many-to-one versehen wird, indem das Linienende bei books mit dem Symbol ∞ und bei publishers mit 1 annotiert wird, wie in Abbildung 7-1 zu sehen.
Zusammenfassung
Die folgende Tabelle führt die wichtigsten Tabellen-Integritätsbedingungen auf.
Integritätsbedingung | SQL |
---|---|
Obligatorische Werte | NOT NULL |
Eindeutigkeitsbeschränkung / Schlüssel / Kennung | UNIQUE |
Primärschlüssel / Standard-Kennung (ein Schlüssel mit obligatorischen Werten) | PRIMARY KEY |
Fremdschlüssel | REFERENCES <table> |