Einführung
Schlüssel sind ein wichtiger Bestandteil von Datenbankmanagementsystemen (DBMS) wie SQL. Sie helfen dabei, die Datenintegrität sicherzustellen und Beziehungen zwischen Tabellen herzustellen. Unter den verschiedenen SQL-Schlüsseln ist der Fremdschlüssel das, was die relationale Struktur der Datenbank aufrechterhält. Er verknüpft verschiedene Datenpunkte über Tabellen hinweg, um einen reibungslosen Datenbankbetrieb zu gewährleisten. In diesem Artikel erfahren Sie, wie Fremdschlüssel funktionieren, welche Vorteile ihre Verwendung bietet und wie Sie sie in Ihrem DBMS verwenden können.
Wenn Sie gerade erst mit SQL beginnen, hilft Ihnen der folgende Leitfaden für Anfänger: SQL für Information Science: Ein Leitfaden für Anfänger
Überblick
- Verstehen Sie, was ein Fremdschlüssel in DBMS ist.
- Verstehen Sie, wie Fremdschlüssel funktionieren.
- Lernen Sie anhand praktischer Beispiele, Fremdschlüssel in SQL zu erstellen und zu verwenden.
- Kennen Sie die Vorteile der Verwendung von Fremdschlüsseln.
Was ist ein Fremdschlüssel?
Ein Fremdschlüssel verbindet Datenpunkte aus verschiedenen Tabellen in einer Datenbank. Im Grunde handelt es sich dabei um eine Spalte oder eine Gruppe von Spalten in einer Tabelle, die eine Verknüpfung zu den Daten in einer anderen Tabelle bereitstellt. Er verweist auf die Primärschlüssel der anderen Tabelle, um eine Beziehung zwischen den beiden herzustellen. Diese Verbindung ist notwendig, um die referenzielle Integrität sicherzustellen, d. h. um sicherzustellen, dass die Daten in einer Tabelle genau mit den Daten in einer anderen Tabelle übereinstimmen.
So funktionieren Fremdschlüssel
Eine Fremdschlüsseleinschränkung stellt sicher, dass der Wert in der Fremdschlüsselspalte mit einem vorhandenen Wert in der Primärschlüsselspalte der referenzierten Tabelle übereinstimmen muss. Diese Beziehung ähnelt einer Eltern-Variety-Beziehung in der Programmierung, bei der der Fremdschlüssel (Variety) auf den Primärschlüssel (Eltern) verweist.
Beispiel:
Stellen Sie sich eine Datenbank mit den folgenden Tabellen vor:
customers
Tisch mit user_id
als Primärschlüssel.orders
Tisch mit order_no
als Primärschlüssel und user_id
als Fremdschlüssel, der auf die user_id
im customers
Tisch.
Diese Beziehung stellt sicher, dass jede Bestellung einem gültigen Benutzer zugeordnet ist.
Erstellen und Verwenden von Fremdschlüsseln
Fremdschlüssel können während der Erstellung einer Tabelle definiert oder später mit der Anweisung ALTER TABLE hinzugefügt werden.
Erstellen eines Fremdschlüssels
CREATE TABLE orders (
order_no INT PRIMARY KEY,
user_id INT,
product_sku INT,
FOREIGN KEY (user_id) REFERENCES customers(user_id),
FOREIGN KEY (product_sku) REFERENCES books(product_sku)
);
In diesem Beispiel user_id
im orders
Tabelle verweist auf die user_id
in der Benutzertabelle, und product_sku verweist auf product_sku in der Büchertabelle.
Hinzufügen eines Fremdschlüssels mit ALTER TABLE
ALTER TABLE orders
ADD FOREIGN KEY (user_id) REFERENCES customers(user_id);
Vorteile der Verwendung von Fremdschlüsseln
- Datenintegrität: Fremdschlüssel stellen sicher, dass die Verweise zwischen Tabellen konsistent bleiben und somit die Datenintegrität gewahrt wird.
- Datenkonsistenz: Sie verhindern das Einfügen ungültiger Daten in die Fremdschlüsselspalte und stellen so die Datenkonsistenz sicher.
- Effiziente Abfrageverarbeitung: Fremdschlüssel optimieren die Abfrageverarbeitung durch Indizierung der Daten, um den Abruf verwandter Daten zu verbessern.
- Datensicherheit: Sie erhöhen die Datensicherheit, indem sie unbefugte Änderungen oder Löschungen wichtiger Daten verhindern.
- Datenbankwartung: Bei Datenbankoperationen helfen Fremdschlüssel dabei, die Integrität und Konsistenz der Daten aufrechtzuerhalten.
Referenzielle Aktionen
Beim Definieren von Fremdschlüsseln können verschiedene Aktionen zum Umgang mit Aktualisierungen und Löschungen angegeben werden:
- KASKADE: Aktualisiert oder löscht automatisch die zugehörigen Zeilen in der untergeordneten Tabelle, wenn Sie die referenzierte Zeile in der übergeordneten Tabelle löschen oder aktualisieren.
- SET NULL: Setzt die Fremdschlüsselspalte auf NULL, wenn Sie die referenzierte Zeile löschen.
- STANDARD FESTLEGEN: Setzt die Fremdschlüsselspalte auf ihren Standardwert, wenn Sie die referenzierte Zeile löschen oder aktualisieren.
- BESCHRÄNKEN: Verhindert das Löschen oder Aktualisieren der referenzierten Zeile, wenn darauf von einer anderen Zeile verwiesen wird.
- KEINE AKTION: Ähnlich wie RESTRICT, ermöglicht jedoch die Fortsetzung des Vorgangs, sofern keine Verletzungen der referenziellen Integrität auftreten.
Beispiel:
CREATE TABLE orders (
order_no INT PRIMARY KEY,
user_id INT,
product_sku INT,
FOREIGN KEY (user_id) REFERENCES customers(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (product_sku) REFERENCES books(product_sku) ON DELETE SET NULL ON UPDATE
CASCADE
);
Praktische Anwendung
Um Fremdschlüssel in Aktion zu sehen, berücksichtigen Sie die folgenden Schritte zum Erstellen einer Datenbank und von Tabellen sowie zum Herstellen von Beziehungen mithilfe von MySQL:
Datenbank erstellen
CREATE DATABASE Bookstore;
USE Bookstore;
Erstellen von Tabellen mit Fremdschlüsseln
CREATE TABLE customers (user_id INT PRIMARY KEY,
identify VARCHAR(50)
);
CREATE TABLE books (
product_sku INT PRIMARY KEY,
title VARCHAR(100)
);
CREATE TABLE orders (
order_no INT PRIMARY KEY,
user_id INT,
product_sku INT,
FOREIGN KEY (user_id) REFERENCES customers(user_id),
FOREIGN KEY (product_sku) REFERENCES books(product_sku)
);
Umgang mit Aktualisierungen und Löschungen
DELETE FROM customers WHERE user_id = 1;
— Dadurch werden alle mit der Benutzer-ID 1 verbundenen Bestellungen gelöscht, wenn ON DELETE CASCADE angegeben ist.
Abschluss
Fremdschlüssel sind in DBMS wie SQL wichtig. Sie helfen dabei, die Datenintegrität und -konsistenz zwischen den Tabellen in der Datenbank aufrechtzuerhalten. Sie spielen eine wichtige Rolle bei der Verwaltung komplexer Beziehungen innerhalb einer Datenbank, indem sie Tabellen verknüpfen und Einschränkungen durchsetzen. Das Verständnis und die effektive Implementierung von Fremdschlüsseln kann das Datenbankdesign und den Datenbankbetrieb erheblich verbessern. Dies würde wiederum zu robusteren und zuverlässigeren Anwendungen führen.
Erfahren Sie mehr: SQL: Ein umfassender Leitfaden von den Grundlagen bis zum fortgeschrittenen Niveau
Häufig gestellte Fragen
A. Ein Fremdschlüssel in SQL verknüpft eine Spalte oder eine Gruppe von Spalten in einer Tabelle mit dem Primärschlüssel oder einem eindeutigen Schlüssel in einer anderen Tabelle. Er stellt eine Beziehung zwischen den beiden Tabellen her und gewährleistet durch die Durchsetzung referenzieller Einschränkungen die Datenintegrität und -konsistenz.
A. Fremdschlüssel sind für die Aufrechterhaltung der Datenintegrität zwischen verknüpften Tabellen in einer Datenbank unerlässlich. Sie verhindern Aktionen, die die Beziehungen zwischen Tabellen stören könnten, und stellen sicher, dass jeder Verweis auf eine Zeile in einer Tabelle einer gültigen Zeile in einer anderen Tabelle entspricht.
A. Um einen Fremdschlüssel in SQL zu erstellen, müssen Sie ihn entweder beim Erstellen einer Tabelle oder später mit einer ALTER TABLE-Anweisung definieren. Beispiel:CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
CustomerID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (CustomerID) REFERENCES Clients(CustomerID)
);
In diesem Snippet CustomerID
im Orders
Tabelle ist ein Fremdschlüssel, der auf die CustomerID
in der Clients
Tabelle, die Bestellungen bestimmten Kunden zuordnet.
A. Wenn eine referenzierte Zeile aktualisiert oder gelöscht wird, können verschiedene Aktionen angegeben werden, um die Datenintegrität sicherzustellen:
KASKADE: Aktualisiert oder löscht automatisch die zugehörigen Zeilen in der untergeordneten Tabelle.
SET NULL: Setzt die Fremdschlüsselspalte auf NULL, wenn Sie die referenzierte Zeile löschen.
STANDARD FESTLEGEN: Setzt die Fremdschlüsselspalte auf einen Standardwert, wenn Sie die referenzierte Zeile löschen.
BESCHRÄNKEN oder KEINE AKTION: Verhindert das Löschen oder Aktualisieren der referenzierten Zeile, wenn in der untergeordneten Tabelle übereinstimmende Zeilen vorhanden sind. Durch Ablehnung des Vorgangs wird die referenzielle Integrität effektiv aufrechterhalten.
A. Ja, ein Fremdschlüssel kann auf eine andere Spalte in derselben Tabelle verweisen. Diese Artwork von Fremdschlüssel wird als selbstreferenzierender Fremdschlüssel bezeichnet. Er ist für hierarchische Datenstrukturen sehr nützlich. Beispiel:CREATE TABLE Staff (
EmployeeID int PRIMARY KEY,
ManagerID int,
FOREIGN KEY (ManagerID) REFERENCES Staff(EmployeeID)
);
Hier das ManagerID
in der Staff
Tabelle verweist auf die EmployeeID
in derselben Tabelle, sodass jeder Mitarbeiter mit seinem Supervisor verknüpft werden kann.