Postgres Foreign Key Constraint Tutorial

Einführung

Wenn Sie mit Daten in PostgreSQL arbeiten, ist es wichtig zu wissen, wie Sie Fremdschlüssel verwenden. Ein Fremdschlüssel ist eine bestimmte Art von SQL-Einschränkung, die dazu dient, die referenzielle Integrität zwischen zwei Tabellen aufrechtzuerhalten. Einfach ausgedrückt ist ein Fremdschlüssel eine Spalte oder ein Satz von Spalten, die eine Verbindung zwischen Daten in zwei Tabellen herstellen. Der Fremdschlüssel für eine Tabelle verweist auf den Primärschlüssel für die andere Tabelle, wodurch eine Beziehung zwischen den Tabellen hergestellt wird. In diesem Artikel erklären wir Ihnen, wie Sie einen Postgres-Fremdschlüssel erstellen und einige Anwendungsbeispiele betrachten.

Voraussetzungen

Während wir mit diesem Tutorial fortfahren, werden wir mit Tabellen arbeiten, die eine Fremdschlüsselbeziehung haben, also müssen Sie sicherstellen, dass sowohl Postgres als auch seine psql Befehlszeilenschnittstelle installiert sind. Sie müssen auch zwei Tabellen haben, die diese Einschränkung für eine ihrer jeweiligen Spalten gemeinsam nutzen.

Stellen Sie sicher, dass Sie Zugriff auf psql haben

Mit dem Befehl psql -Vkönnen Sie überprüfen, ob psql und Postgres installiert sind und ordnungsgemäß funktionieren. Verwenden Sie den Befehl psql, um eine Verbindung zu Postgres herzustellen und die Befehlszeilenschnittstelle aufzurufen.

HINWEIS: Wenn Sie einen Fehler mit der Meldung psql: FATAL: role "linux" does not exist erhalten, versucht Postgres wahrscheinlich, den Benutzernamen Ihres Systems zu verwenden, um eine Verbindung mit psql herzustellen. Um dies zu beheben, verwenden Sie den Befehl sudo -u postgres -i, um Ihren Benutzernamen auf postgres zu ändern, und versuchen Sie dann erneut, auf psql zuzugreifen.

Screenshot der PSQL-Version und Rolle "linux" existiert nicht Fehler für Postgres

Tabellen für den Fremdschlüssel erstellen

Als erstes erstellen wir eine Datenbank mit der psql Befehlszeilenschnittstelle:

Wir können unsere PostgreSQL-Datenbank mit der unten gezeigten grundlegenden Befehlssyntax erstellen:

1
DATENBANK db_name ERSTELLEN;

Hier ein Beispiel:

1
DATENBANK testdb ERSTELLEN;

Wir können auch eine Tabelle erstellen, die als „Mutter“ -Tabelle dient, oder eine Tabelle, die eine Beziehung zu anderen Tabellen hat. Wir würden die unten gezeigte grundlegende Syntax verwenden:

1
TABELLE ERSTELLEN TABELLENNAME (SPALTENNAME + DATENTYP + EINSCHRÄNKUNG )

Für die Zwecke dieses Tutorials erstellen wir eine Tabelle mit dem Namen price mit einem Primärschlüssel id:

1
TABELLE ERSTELLEN Preis (id INT PRIMÄRSCHLÜSSEL, Preis REAL);

Im nächsten Abschnitt erstellen wir eine weitere Tabelle, die eine Fremdschlüsselbeziehung zur Spalte id der Preistabelle aufweist.

Verwenden der Fremdschlüsseleinschränkung

Wie bereits erwähnt, verweist eine FOREIGN KEY -Einschränkung auf den Primärschlüssel in einer anderen Tabelle. Wir können mehrere Fremdschlüssel in einer Tabelle haben; Jeder Schlüssel hängt von seiner Beziehung zu einer anderen Tabelle ab.

Um eine Tabelle mit einer FOREIGN KEY -Einschränkung zu erstellen, müssen Sie auf die andere Tabelle verweisen. Schauen wir uns folgendes Beispiel an:

1
2
3
4
5
TABELLE ERSTELLEN cars(
car_id INT NOT NULL,
price INT VERWEIST AUF price (id), entsprechend
NAMENSTEXT,
MARKENTEXT);

Beachten Sie, dass die Tabelle cars einen Fremdschlüssel enthält, der auf die Tabelle price verweist. Dies bedeutet, dass die Werte der Fremdschlüsselspalte (n) in der Tabelle „child“ als Referenz aus der Tabelle „mother“ stammen.

Um die Details einer Tabelle anzuzeigen, verwenden Sie den Befehl \d gefolgt vom Tabellennamen:

1
2
3
4
5
6
7
8
9
TABELLE „öffentlich.autos“
SPALTE / TYP / Sortierung / NULLBAR / STANDARD
——–+———+———–+———-+———
car_id / INTEGER / / NOT NULL /
Preis / INTEGER | / /
name / text / / /
Marke / text / / /
Fremdschlüsseleinschränkungen:
„cars_price_fkey“ FREMDSCHLÜSSEL (Preis) REFERENZEN Preis (id)

Wir könnten die Fremdschlüsseleinschränkung auch deklarieren, indem wir die Schlüsselwörter FOREIGN KEY und explizit verwenden, wenn wir den Spaltennamen in unserem Befehl CREATE TABLE deklarieren:

1
2
3
4
5
6
7
8
TABELLE ERSTELLEN cars(
car_id NOT NULL,
Preis INT,
NAMENSTEXT,
MARKENTEXT
PRIMÄRSCHLÜSSEL (car_id),
FREMDSCHLÜSSEL (Preis), Preis (id);
);

An diesem Punkt fragen Sie sich vielleicht, was passieren würde, wenn Sie versehentlich einen Datensatz in der Tabelle cars gelöscht hätten — würden Sie eine Fehlermeldung erhalten? Tatsächlich können Sie mit Postgres den Datensatz nur löschen, wenn auch der Datensatz der anderen entsprechenden Tabelle gelöscht wird.

Sie können eine der folgenden Optionen – NO ACTION,DELETE CASCADE und DELETE RESTRICT — verwenden, um zu entscheiden, was passieren soll, wenn ein Datensatz gelöscht wird, der mit einer anderen Tabelle verknüpft ist.

Das folgende Beispiel zeigt die DELETE RESTRICT-Einschränkung, die auf eine Tabelle angewendet wird:

1
2
3
4
5
TABELLE ERSTELLEN cars(
car_id INT NOT NULL,
price INT REFERENCES price (id) ON DELETE),
NAMENSTEXT,
MARKENTEXT);

HINWEIS: Mit dieser Einschränkung können Sie keine Zeile löschen, es sei denn, alle verknüpften Werte werden entfernt oder die Einschränkung selbst wird entfernt.

Das nächste Beispiel zeigt die DELETE CASCADE -Einschränkung in Aktion:

1
2
3
4
5
TABELLE ERSTELLEN cars(
car_id INT NOT NULL,
price INT REFERENZEN price (id) BEIM LÖSCHEN),
NAMENSTEXT,
MARKENTEXT);

HINWEIS: Mit der Einschränkung DELETE CASCADE können Sie einen übergeordneten Datensatz löschen, es ist jedoch wichtig zu beachten, dass auch der entsprechende untergeordnete Datensatz gelöscht wird. Das Löschen in Kaskaden wird für die Verwendung in der Produktion nicht empfohlen, da es zu einfach ist, Zeilen in einer anderen Tabelle unbeabsichtigt zu löschen.

Die Option NO ACTION ist eine Standardaktion in PostgreSQL, die einen Fehler anzeigt, wenn eine der beiden oben genannten Einschränkungen nicht angegeben ist.

Fazit

In einer relationalen Datenbank ist es üblich, dass Daten in verschiedenen Tabellen bestimmte Verknüpfungen oder Beziehungen aufweisen. Eine Fremdschlüsseleinschränkung bietet eine effektive Möglichkeit, die referenzielle Integrität dieser Daten zu schützen und sicherzustellen, dass Daten nicht aus einer Tabelle gelöscht werden, wenn eine Beziehung zu Daten in einer anderen Tabelle besteht. Dieses Tutorial bietet einen Überblick über die Funktionsweise eines Postgres-Fremdschlüssels und Beispiele für die Verwendung dieser Einschränkung auf verschiedene Arten. Mit diesen Beispielen als Leitfaden können Sie Fremdschlüsselbeziehungen in Ihrer eigenen PostgreSQL-Datenbank implementieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.