Sobes.tech
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:

  1. Wird der Primärschlüssel in der "Elterntabelle" (Parent) definiert. Der Primärschlüssel identifiziert jeden Eintrag eindeutig.
  2. In der "Kindtabelle" (Child) wird eine Spalte (oder eine Gruppe von Spalten) erstellt, die als Fremdschlüssel dient.
  3. Diese Spalte in der "Kindtabelle" wird mit dem Primärschlüssel der "Elterntabelle" verbunden.
  4. 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)
);