3 Relationale Datenbanken

3.1 Eine Einführung

Relationale Datenbanken sind heute der am weitesten verbreitete Datenbanktyp. Sie basieren auf dem von E.F. Codd in den 1970er Jahren entwickelten relationalen Modell, das Daten in Tabellen organisiert und diese über Beziehungen (Relationen) miteinander verknüpft.

3.1.1 Abgrenzung zu anderen Datenbanken

Im Vergleich zu anderen Datenbanktypen zeichnen sich relationale Datenbanken durch folgende Merkmale aus:

Im Gegensatz dazu gibt es andere Datenbanktypen wie:

3.1.2 Tabelle, Zeile und Spalte

In einer relationalen Datenbank werden alle Daten in Tabellen organisiert. Eine Tabelle besteht aus Zeilen (auch Datensätze oder Tupel genannt) und Spalten (auch Attribute oder Felder genannt).

Beispiel einer Kundentabelle:

+----+-----------+------------+---------+
| ID | Vorname   | Nachname   | Ort     |
+----+-----------+------------+---------+
| 1  | Max       | Mustermann | Berlin  |
| 2  | Erika     | Musterfrau | Hamburg |
| 3  | Hans      | Schmidt    | München |
+----+-----------+------------+---------+

Wichtige Eigenschaften von Tabellen sind:

3.1.3 Schlüssel, Primärschlüssel und Fremdschlüssel

Schlüssel sind ein zentrales Konzept in relationalen Datenbanken. Sie dienen der eindeutigen Identifizierung von Datensätzen und der Verknüpfung von Tabellen.

Primärschlüssel:

Beispiel für die Definition eines Primärschlüssels in SQL:

CREATE TABLE Kunden (
    KundenID INT PRIMARY KEY,
    Vorname VARCHAR(50),
    Nachname VARCHAR(50)
);

Fremdschlüssel:

Beispiel für die Definition eines Fremdschlüssels in SQL:

CREATE TABLE Bestellungen (
    BestellID INT PRIMARY KEY,
    KundenID INT,
    Datum DATE,
    FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID)
);

3.1.4 Kardinalitäten und ER-Modell

Kardinalitäten beschreiben die Art und die Anzahl der Beziehungen zwischen Tabellen. Sie geben an, wie viele Datensätze der einen Tabelle mit wie vielen Datensätzen der anderen Tabelle verknüpft sein können.

Man unterscheidet folgende Kardinalitäten:

3.1.4.1 1:1-Beziehung

Eine 1:1-Beziehung liegt vor, wenn ein Datensatz der ersten Tabelle mit maximal einem Datensatz der zweiten Tabelle verknüpft ist und umgekehrt.

Beispiel: Ein Mitarbeiter hat höchstens einen Firmenwagen, und ein Firmenwagen ist höchstens einem Mitarbeiter zugeordnet.

CREATE TABLE Mitarbeiter (
    MitarbeiterID INT PRIMARY KEY,
    Name VARCHAR(100)
);

CREATE TABLE Firmenwagen (
    WagenID INT PRIMARY KEY,
    Kennzeichen VARCHAR(10),  
    MitarbeiterID INT UNIQUE,
    FOREIGN KEY (MitarbeiterID) REFERENCES Mitarbeiter(MitarbeiterID)
);

Die Kardinalität kann weiter spezifiziert werden:

3.1.4.2 1:n-Beziehung

Eine 1:n-Beziehung liegt vor, wenn ein Datensatz der ersten Tabelle mit mehreren Datensätzen der zweiten Tabelle verknüpft sein kann, aber jeder Datensatz der zweiten Tabelle nur mit maximal einem Datensatz der ersten Tabelle verknüpft ist.

Beispiel: Ein Kunde kann mehrere Bestellungen aufgeben, aber jede Bestellung gehört zu genau einem Kunden.

CREATE TABLE Kunden (
    KundenID INT PRIMARY KEY,
    Name VARCHAR(100)
);

CREATE TABLE Bestellungen (
    BestellID INT PRIMARY KEY,
    KundenID INT,
    Datum DATE,
    FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID)
);

3.1.4.3 n:m-Beziehung

Eine n:m-Beziehung liegt vor, wenn mehrere Datensätze der ersten Tabelle mit mehreren Datensätzen der zweiten Tabelle verknüpft sein können und umgekehrt.

Beispiel: Ein Student kann mehrere Kurse belegen, und ein Kurs kann von mehreren Studenten belegt werden.

In relationalen Datenbanken können n:m-Beziehungen nicht direkt abgebildet werden. Stattdessen verwendet man eine Zwischentabelle, die die Beziehung auflöst:

CREATE TABLE Studenten (
    MatrNr INT PRIMARY KEY,
    Name VARCHAR(100)
);

CREATE TABLE Kurse (
    KursNr INT PRIMARY KEY,
    Titel VARCHAR(100)
);

CREATE TABLE Belegungen (
    MatrNr INT,
    KursNr INT,
    PRIMARY KEY (MatrNr, KursNr),
    FOREIGN KEY (MatrNr) REFERENCES Studenten(MatrNr),  
    FOREIGN KEY (KursNr) REFERENCES Kurse(KursNr)
);

Die Kardinalitäten werden oft in einem ER-Diagramm (Entity-Relationship-Diagramm) visualisiert. Dabei werden Entitäten (Tabellen) als Rechtecke und Beziehungen als Rauten dargestellt, die mit Linien verbunden sind. An den Linien werden die Kardinalitäten notiert.

3.1.5 Referentielle Integrität

Die referentielle Integrität ist ein Konzept, das die Konsistenz zwischen verknüpften Tabellen sicherstellt. Sie garantiert, dass Fremdschlüssel immer auf existierende Primärschlüssel verweisen und dass beim Löschen oder Ändern von referenzierten Datensätzen die Konsistenz gewahrt bleibt.

Das Datenbanksystem überwacht die referentielle Integrität automatisch, wenn Fremdschlüssel definiert sind. Dabei gibt es verschiedene Möglichkeiten, wie sich das System beim Löschen oder Ändern von referenzierten Datensätzen verhalten kann:

Verhalten beim Löschen eines referenzierten Datensatzes:

Verhalten beim Ändern eines referenzierten Schlüssels:

Das gewünschte Verhalten kann bei der Definition des Fremdschlüssels festgelegt werden, z.B.:

CREATE TABLE Bestellungen (
    BestellID INT PRIMARY KEY,
    KundenID INT,
    Datum DATE,
    FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID) ON DELETE CASCADE ON UPDATE CASCADE
);

3.1.6 Normalisierung und Normalformen

Die Normalisierung ist ein Prozess, bei dem eine Datenbank in eine strukturierte Form gebracht wird, die Redundanz und Inkonsistenz vermeidet. Dazu werden die Daten in mehrere Tabellen aufgeteilt, die über Beziehungen miteinander verknüpft sind.

Die Normalisierung folgt bestimmten Regeln, den sogenannten Normalformen. Die wichtigsten sind:

3.1.6.1 Erste Normalform (1NF)

Beispiel für eine Tabelle, die nicht in 1NF ist:

+----+------------------+---------------------------+
| ID | Name             | Telefonnummern            |
+----+------------------+---------------------------+
| 1  | Max Mustermann   | 030-1234567, 0171-1234567 |
| 2  | Erika Musterfrau | 040-7654321               |
+----+------------------+---------------------------+

In der ersten Normalform sieht die Tabelle so aus:

+----+------------------+--------------+
| ID | Name             | Telefon      |
+----+------------------+--------------+
| 1  | Max Mustermann   | 030-1234567  |
| 1  | Max Mustermann   | 0171-1234567 |
| 2  | Erika Musterfrau | 040-7654321  |
+----+------------------+--------------+

3.1.6.2 Zweite Normalform (2NF)

3.1.6.3 Dritte Normalform (3NF)

Die Normalformen bauen aufeinander auf, d.h. eine Tabelle in 3NF ist automatisch auch in 2NF und 1NF.

Ziel der Normalisierung ist es, Anomalien bei Einfüge-, Lösch- und Änderungsoperationen zu vermeiden, die Datenintegrität zu wahren und Redundanzen zu minimieren. Allerdings kann eine zu starke Normalisierung auch zu komplexen Abfragen und Performanzeinbußen führen. In der Praxis wird meist ein Kompromiss zwischen Normalität und Effizienz angestrebt, oft die 3NF.