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:

book_lendings = ⟨ isbn, person_id, lending_date, return_date⟩

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.

Abbildung 7-1. In MS Access repräsentiert eine Beziehung zwischen zwei Tabellen eine Fremdschlüssel-Abhängigkeit
???

Zusammenfassung

Die folgende Tabelle führt die wichtigsten Tabellen-Integritätsbedingungen auf.

IntegritätsbedingungSQL
Obligatorische WerteNOT NULL
Eindeutigkeitsbeschränkung / Schlüssel / KennungUNIQUE
Primärschlüssel / Standard-Kennung (ein Schlüssel mit obligatorischen Werten)PRIMARY KEY
FremdschlüsselREFERENCES <table>