Junior
Wie werden die Beziehungen zwischen Tabellen in relationalen Datenbanken eingerichtet?
sobes.tech KI
Antwort von AI
In relationalen Datenbanken werden die Beziehungen zwischen Tabellen mithilfe von Fremdschlüsseln (Foreign Keys) eingerichtet.
Ein Fremdschlüssel ist eine Spalte oder eine Gruppe von Spalten in einer Tabelle, die auf den Primärschlüssel (Primary Key) einer anderen Tabelle verweist. Er stellt eine logische Verbindung zwischen den Einträgen in zwei Tabellen her.
Bei der Einrichtung der Beziehung:
- Wird der Primärschlüssel in der "Elterntabelle" (Parent) definiert. Der Primärschlüssel identifiziert jeden Eintrag eindeutig.
- In der "Kindtabelle" (Child) wird eine Spalte (oder eine Gruppe von Spalten) erstellt, die als Fremdschlüssel dient.
- Diese Spalte in der "Kindtabelle" wird mit dem Primärschlüssel der "Elterntabelle" verbunden.
- Es werden Datenintegritätsbeschränkungen (Constraints) festgelegt:
- REFERENCES: Gibt an, auf welche Tabelle und Spalte (Primärschlüssel) sich der Fremdschlüssel bezieht.
- ON UPDATE behavior: Bestimmt, was mit den Einträgen in der Kindtabelle passiert, wenn der Primärschlüssel in der Elterntabelle geändert wird. Die Optionen sind:
CASCADE: Änderungen werden in alle abhängigen Einträgen übernommen.SET NULL: Die Werte des Fremdschlüssels in der Kindtabelle werden auf NULL gesetzt.RESTRICT: Die Änderung wird verboten, wenn abhängige Einträge existieren.NO ACTION: Ähnlich wie RESTRICT in den meisten DBMS.SET DEFAULT: Die Werte des Fremdschlüssels werden auf den Standardwert gesetzt.
- ON DELETE behavior: Bestimmt, was mit den Einträgen in der Kindtabelle passiert, wenn Einträge in der Elterntabelle gelöscht werden. Die Optionen sind die gleichen wie bei
ON UPDATE.
Beispiel für SQL-Syntax zum Erstellen einer Beziehung:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY, -- Primärschlüssel in der Tabelle Customer
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, -- Fremdschlüssel, der auf customer_id in der Tabelle Customers verweist
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE -- Bei Änderung von customer_id in Customers wird auch in Orders aktualisiert
ON DELETE CASCADE -- Beim Löschen eines Customers werden auch die zugehörigen Orders gelöscht
);
Arten von Beziehungen zwischen Tabellen:
| Beziehungstyp | Beschreibung | Beispiel |
|---|---|---|
| Eins-zu-Eins (1:1) | Ein Eintrag in der ersten Tabelle entspricht genau einem Eintrag in der zweiten Tabelle und umgekehrt. Selten in relationalen Datenbanken. | Nutzer und sein Profil. |
| Eins-zu-Viele (1:N) | Ein Eintrag in der ersten Tabelle entspricht mehreren Einträgen in der zweiten, aber jeder Eintrag in der zweiten entspricht nur einem in der ersten. | Kunde und seine Bestellungen. |
| Viele-zu-Viele (N:M) | Mehrere Einträge in der ersten Tabelle entsprechen mehreren in der zweiten, und umgekehrt. Wird durch eine Zwischentabelle (Verbindungstabelle) realisiert. | Produkte und Kategorien. |
Für die Many-to-Many-Beziehung wird eine dritte Tabelle erstellt, die Fremdschlüssel zu beiden zu verbindenden Tabellen enthält.
CREATE TABLE Products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255)
);
CREATE TABLE Categories (
category_id INT PRIMARY KEY,
category_name VARCHAR(255)
);
CREATE TABLE ProductCategories ( -- Verbindungstabelle
product_id INT,
category_id INT,
PRIMARY KEY (product_id, category_id), -- Zusammengesetzter Primärschlüssel
FOREIGN KEY (product_id) REFERENCES Products(product_id),
FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);