Kapitel 1 von 8

Fortgeschritten · ~16 Min.

Datenbanken – Strukturiert speichern und abfragen

Lernziele

  • Das relationale Datenbankmodell mit Tabellen, Schlüsseln und Beziehungen erklären
  • Grundlegende SQL-Abfragen verstehen (SELECT, WHERE, JOIN)
  • Das ACID-Prinzip für Transaktionen kennen
  • Den Unterschied zwischen relationalen und NoSQL-Datenbanken einordnen

Vorwissen empfohlen: Datenstrukturen – Arrays, Listen und Bäume

Einführung

Jede App, jede Website, fast jede Software hat im Hintergrund eine Datenbank. Spotify speichert Millionen Songs und ihre Metadaten. Amazon verwaltet Millionen Bestellungen. Deine Schule hat eine Datenbank mit Schülern, Kursen und Noten.

Aber warum nicht einfach Dateien? Warum nicht eine Excel-Tabelle für alles?

Bei kleinen Mengen könnte das funktionieren. Aber bei Millionen Einträgen, gleichzeitigen Zugriffen von tausend Nutzern, und der Anforderung, dass keine Daten verloren gehen – da braucht man ein System, das dafür gebaut wurde: eine Datenbank mit einem Datenbankmanagementsystem (DBMS).

Grundidee

Eine Datenbank organisiert Daten strukturiert und ermöglicht:

  • Schnelles Finden spezifischer Daten (Abfragen)
  • Gleichzeitigen Zugriff vieler Nutzer ohne Konflikte
  • Sicherheit gegen Datenverlust (Transaktionen)
  • Konsistenz (keine widersprüchlichen Daten)

Das meistverbreitete Modell ist das relationale Modell: Daten werden in Tabellen gespeichert, die durch Schlüssel miteinander verbunden sind.

Erklärung

Das relationale Modell

Eine relationale Datenbank besteht aus Tabellen (auch: Relationen). Jede Tabelle hat:

  • Spalten (Attribute): Die Art der Daten (z. B. Name, Alter, Email).
  • Zeilen (Tupel): Einzelne Datensätze (z. B. ein Nutzer).

Beispiel: Tabelle Schueler

IDNameKlasseGeburtsjahr
1Anna Meier11a2007
2Tom Braun12b2006
3Lisa Schmidt11a2007

Primärschlüssel und Fremdschlüssel

Der Primärschlüssel (Primary Key) ist ein eindeutiges Feld in einer Tabelle, das jeden Datensatz identifiziert. In der Tabelle Schueler ist ID der Primärschlüssel – keine zwei Schüler haben dieselbe ID.

Der Fremdschlüssel (Foreign Key) ist ein Feld in einer Tabelle, das auf den Primärschlüssel einer anderen Tabelle verweist. Damit werden Tabellen verknüpft.

Beispiel: Tabelle Noten

NoteIDSchuelerIDFachNote
11Mathematik2
21Deutsch3
32Mathematik1

SchuelerID in Noten ist ein Fremdschlüssel, der auf ID in Schueler verweist. So weiß die Datenbank: Der Eintrag mit NoteID 1 (Mathematik, Note 2) gehört zu Anna Meier.

Der Fremdschlüssel verweist auf den Primärschlüssel – so verknüpft ein JOIN die passenden Zeilen beider Tabellen.

SQL: Structured Query Language

SQL ist die Sprache, mit der man mit relationalen Datenbanken kommuniziert.

SELECT – Daten abfragen:

SELECT Name, Klasse
FROM Schueler
WHERE Klasse = '11a';

Ergebnis: Anna Meier (11a), Lisa Schmidt (11a).

WHERE – filtern:

SELECT Name
FROM Schueler
WHERE Geburtsjahr < 2007;

Ergebnis: Tom Braun.

JOIN – Tabellen verknüpfen: Um die Noten von Anna Meier zu bekommen, muss man die Tabellen Schueler und Noten verbinden:

SELECT Schueler.Name, Noten.Fach, Noten.Note
FROM Schueler
JOIN Noten ON Schueler.ID = Noten.SchuelerID
WHERE Schueler.Name = 'Anna Meier';

Ergebnis: Anna Meier | Mathematik | 2 und Anna Meier | Deutsch | 3.

Der JOIN kombiniert Zeilen beider Tabellen, wenn der Fremdschlüssel dem Primärschlüssel entspricht.

Normalisierung

Normalisierung ist das Prinzip, Redundanz in einer Datenbank zu vermeiden und Konsistenz zu sichern.

Schlechtes Design (nicht normalisiert):

SchuelerIDNameFachNoteLehrerName
1Anna MeierMathematik2Dr. Müller
1Anna MeierDeutsch3Fr. Schmidt

Problem: Wenn Anna Meier ihren Namen ändert, muss man in jeder Zeile aktualisieren. Wenn Dr. Müller die Schule verlässt – wo ist das gespeichert?

Normalisiert: Schüler, Fächer, Lehrer und Noten in eigenen Tabellen, verknüpft durch Fremdschlüssel.

Normalisierung folgt formalen Regeln (1. bis 3. Normalform) – das Ziel ist, jeden Sachverhalt an genau einer Stelle zu speichern.

ACID: Eigenschaften von Transaktionen

Eine Transaktion ist eine Folge von Datenbankoperationen, die als Einheit behandelt wird. Das ACID-Prinzip garantiert:

A – Atomarität: Entweder alle Operationen einer Transaktion werden durchgeführt oder keine. Wenn du Geld überweist (Konto A um 100 € reduzieren, Konto B um 100 € erhöhen) und mitten in der Transaktion der Strom ausfällt – dann wird alles rückgängig gemacht. Das Geld verschwindet nicht einfach.

C – Konsistenz: Die Datenbank bleibt in einem gültigen Zustand. Regeln (z. B. „ein Konto darf nicht negativ werden”) werden nie verletzt.

I – Isolation: Gleichzeitig laufende Transaktionen sehen sich nicht gegenseitig. Sie laufen so ab, als wären sie nacheinander ausgeführt worden.

D – Dauerhaftigkeit: Wenn eine Transaktion abgeschlossen ist, bleiben ihre Änderungen dauerhaft – auch bei Systemabsturz.

NoSQL

Nicht alle Daten passen gut in Tabellen. Für manche Anwendungen gibt es NoSQL-Datenbanken:

  • Dokumentendatenbanken (MongoDB): Speichern JSON-ähnliche Dokumente. Gut für variable Strukturen.
  • Key-Value-Stores (Redis): Schnelle Schlüssel-Wert-Paare. Gut für Caches.
  • Spaltenorientierte DBs (Cassandra): Gut für sehr große Mengen an Schreiboperationen.
  • Graphdatenbanken (Neo4j): Gut für stark vernetzte Daten (Social Networks).

Wann NoSQL? Bei sehr großen Datenmengen, die horizontal skaliert werden müssen (viele Server), bei flexiblen Schemata, oder wenn ACID weniger wichtig ist als Geschwindigkeit und Skalierbarkeit.

Nachteil: Oft schwächere Konsistenzgarantien, keine standardisierte Abfragesprache.

Beispiel aus dem Alltag

Webshop (Amazon):

Drei Tabellen: Kunden, Bestellungen, Produkte. Ein Kauf ist eine Transaktion: Produkt aus Lager abziehen + Bestellung anlegen + Zahlung buchen – alles atomar. Wenn die Zahlung fehlschlägt, wird die Bestellung nicht angelegt und das Produkt nicht abgezogen.

Schulverwaltung:

Tabellen: Schueler, Kurse, Lehrer, Noten, Stundenplan. JOINs erlauben Abfragen wie „Alle Schüler mit Note unter 4 in Mathematik in der 11. Klasse” – über mehrere Tabellen verknüpft.

Spotify:

Songs, Künstler, Alben, Playlisten, Nutzer – relationale Daten. Empfehlungen, Streaming-Statistiken, Echtzeit-Daten – dafür nutzt Spotify zusätzlich NoSQL-Lösungen. Oft kombinieren große Systeme beide Ansätze.

Anwendung

Entwirf ein einfaches Datenbankschema für eine Schulbibliothek:

  1. Welche Tabellen brauchst du? (Mindestens: Bücher, Ausleihen, Schüler)
  2. Welche Felder hat jede Tabelle? Was ist der Primärschlüssel?
  3. Welche Fremdschlüssel verbinden die Tabellen?
  4. Schreibe eine SQL-Abfrage: „Welche Bücher hat Anna Meier gerade ausgeliehen?”

Typische Fehler

Alles in eine Tabelle: Das führt zu Redundanz und Anomalien. Normalisierung sorgt dafür, dass jeder Sachverhalt einmal gespeichert ist.

Fremdschlüssel ignorieren: Ohne Fremdschlüsselconstraints kann eine Note für einen nicht existierenden Schüler gespeichert werden – die Datenbank bleibt inkonsistent.

Transaktionen vergessen: Wer mehrere Operationen ohne Transaktion ausführt, riskiert inkonsistente Zustände bei Fehlern oder gleichzeitigen Zugriffen.

NoSQL für alles: NoSQL ist keine Verbesserung von SQL – es ist eine Alternative für andere Anwendungsfälle. Für strukturierte, konsistente Daten mit komplexen Beziehungen ist relationales SQL oft besser.

Zusammenfassung

  • Relationale Datenbanken organisieren Daten in Tabellen, die durch Primär- und Fremdschlüssel verknüpft sind
  • SQL ermöglicht Abfragen (SELECT, WHERE), Filterung und Tabellenverknüpfung (JOIN)
  • Normalisierung vermeidet Redundanz und sichert Konsistenz
  • ACID garantiert Atomarität, Konsistenz, Isolation und Dauerhaftigkeit von Transaktionen
  • NoSQL-Datenbanken (Dokument, Key-Value, Spalten, Graph) sind Alternativen für spezifische Anwendungsfälle mit anderen Anforderungen
  • Große Systeme kombinieren oft relationale und NoSQL-Datenbanken je nach Anwendungsfall

Quiz

Frage 1: Was ist der Unterschied zwischen Primärschlüssel und Fremdschlüssel?

Antwort anzeigen

Der Primärschlüssel ist ein eindeutiges Feld in einer Tabelle, das jeden Datensatz identifiziert – kein zwei Einträge haben denselben Primärschlüssel. Der Fremdschlüssel ist ein Feld in einer Tabelle, das auf den Primärschlüssel einer anderen Tabelle verweist. Er stellt die Beziehung zwischen Tabellen her: z. B. verweist SchuelerID in der Noten-Tabelle auf die ID in der Schüler-Tabelle.

Frage 2: Was macht ein JOIN in SQL – und warum braucht man ihn?

Antwort anzeigen

Ein JOIN verknüpft zwei Tabellen basierend auf einer gemeinsamen Spalte (meist Fremd- und Primärschlüssel). Damit kann man Daten aus mehreren Tabellen in einem Ergebnis zusammenführen. Ohne JOIN müsste man für jede Abfrage über mehrere Tabellen viele separate Abfragen machen und die Ergebnisse manuell zusammensetzen. JOIN macht das in einer einzigen Abfrage.

Frage 3: Was bedeutet das „A” in ACID – und warum ist es wichtig bei Banküberweisungen?

Antwort anzeigen

Das „A” steht für Atomarität: Alle Operationen einer Transaktion werden entweder vollständig ausgeführt oder gar nicht. Bei einer Banküberweisung gibt es zwei Schritte: Betrag von Konto A abziehen und Konto B gutschreiben. Wenn nach dem ersten Schritt der Strom ausfällt, sorgt Atomarität dafür, dass der erste Schritt rückgängig gemacht wird – das Geld verschwindet nicht einfach.

Frage 4: Wann sollte man NoSQL statt einer relationalen Datenbank verwenden?

Antwort anzeigen

NoSQL ist vorteilhaft bei: sehr großen Datenmengen, die über viele Server verteilt werden müssen (horizontale Skalierung); flexiblen oder sich häufig ändernden Datenstrukturen; Anwendungen, die extreme Schreib- oder Lesegeschwindigkeit brauchen; stark vernetzten Daten (Graphdatenbanken). Relational ist besser bei: klar strukturierten, konsistenten Daten; komplexen Beziehungen; Anforderungen an starke ACID-Garantien.

Schlüsselwörter

  • datenbank
  • tabelle
  • primärschlüssel
  • fremdschlüssel
  • sql
  • join
  • transaktion
  • normalisierung
  • nosql
  • acid