Referentielle Integrität
Datenbanken modellieren einen Ausschnitt aus der realen Welt. Sie sollten so definiert und organisiert werden, dass sie diesen Ausschnitt mit seinen Eigenschaften und Beziehungen wiedergeben. Fremdschlüssel geben uns die Möglichkeit, Beziehungen zwischen Tabellen auf die Datenbankstruktur abzubilden. So entsteht ein Geflecht von hierarchisch geordneten Tabellen, das die realen Verhältnisse modelliert.
Ein Beispiel: Sie wollen Kunden- und Rechnungsdaten verwalten und haben für beide Entitäten je eine Tabelle. Als Primärschlüssel der Kundentabelle definieren Sie die kunden_id, die Sie in der Rechnungstabelle als Fremdschlüssel referenzieren.
CREATE TABLE kunden (
kunden_id SERIAL PRIMARY KEY,
name varchar(30),
...
);
CREATE TABLE rechnungen (
rechng_id SERIAL PRIMARY KEY,
rechn_date timestamp,
...
kunde INTEGER NOT NULL,
FOREIGN KEY (kunde) REFERENCES kunden (kunden_id)
);
Wenn Sie nun eine Rechnung für einen Kunden anlegen möchten, der noch nicht in der Kundentabelle existiert, meldet PostgreSQL eine Verletzung der referentiellen Integrität und die Aktion wird abgebrochen. Genauso können Sie keinen Kunden löschen, wenn es zu ihm noch eine Rechnung in der Rechnungstabelle gibt.
PostgreSQL übernimmt diese Kontrolle der Abhängigkeiten und bietet verschiedene Optionen, wie im Falle von Aktualisierungen oder Löschungen mit abhängigen Datensätzen verfahren werden soll. Zum Beispiel kann man sie ebenfalls löschen oder auf Standardwerte zurücksetzen.