Zum Inhalt springen
SQL Anfänger 20 min

Datenbanken verstehen

Lerne die Grundlagen relationaler Datenbanken: Tabellen, Zeilen, Spalten, Primärschlüssel und Beziehungen - das Fundament für alle SQL-Kenntnisse.

Aktualisiert:

Bevor du SQL-Abfragen schreiben kannst, musst du verstehen, wie Datenbanken Daten organisieren. Stell dir eine Datenbank wie einen gut organisierten Aktenschrank vor - nur viel schneller und leistungsfaehiger.

Was ist eine relationale Datenbank?

Eine relationale Datenbank speichert Daten in Tabellen, die miteinander in Beziehung stehen. Das Wort “relational” kommt von diesen Beziehungen (Relationen) zwischen den Tabellen.

Tabellen - die Grundbausteine

Eine Tabelle ist wie eine Exceltabelle: Sie hat Spalten und Zeilen.

Tabelle: kunden
+----+----------------+---------------------+-----------+
| id | name           | email               | stadt     |
+----+----------------+---------------------+-----------+
|  1 | Anna Schmidt   | anna@example.com    | Berlin    |
|  2 | Max Mueller    | max@example.com     | Hamburg   |
|  3 | Lisa Weber     | lisa@example.com    | Muenchen  |
+----+----------------+---------------------+-----------+

Hier siehst du die wichtigsten Begriffe:

BegriffErklaerungBeispiel
TabelleEine Sammlung zusammengehoeriger Datenkunden
Spalte (Column)Eine bestimmte Eigenschaftname, email
Zeile (Row)Ein einzelner DatensatzAnna Schmidt mit allen Infos
FeldEin einzelner Wert'Berlin'

Primaerschluessel (Primary Key)

Jede Tabelle braucht eine Moeglichkeit, jeden Datensatz eindeutig zu identifizieren. Das macht der Primaerschluessel:

-- Die Spalte 'id' ist unser Primaerschluessel
CREATE TABLE kunden (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE,
    stadt TEXT
);

Der Primaerschluessel hat diese Regeln:

  • Er muss eindeutig sein (keine Duplikate)
  • Er darf nicht leer sein (NOT NULL)
  • Er aendert sich nie fuer einen Datensatz

Meistens wird dafuer eine automatisch hochzaehlende Nummer (ID) verwendet.

Beziehungen zwischen Tabellen

Das Besondere an relationalen Datenbanken ist, dass Tabellen miteinander verknuepft werden koennen. Schauen wir uns ein Beispiel an:

Unser Beispiel: Ein Online-Shop

Tabelle: kunden                    Tabelle: bestellungen
+----+---------------+--------+   +----+-----------+------------+--------+
| id | name          | stadt  |   | id | kunden_id | datum      | betrag |
+----+---------------+--------+   +----+-----------+------------+--------+
|  1 | Anna Schmidt  | Berlin |   |  1 |         1 | 2026-01-15 | 59.99  |
|  2 | Max Mueller   | Hamburg|   |  2 |         1 | 2026-02-20 | 129.50 |
|  3 | Lisa Weber    |Muenchen|   |  3 |         2 | 2026-03-01 | 45.00  |
+----+---------------+--------+   +----+-----------+------------+--------+

Die Spalte kunden_id in der Tabelle bestellungen verweist auf die id in der Tabelle kunden. Das nennt man einen Fremdschluessel (Foreign Key).

So koennen wir sehen:

  • Anna Schmidt (ID 1) hat zwei Bestellungen
  • Max Mueller (ID 2) hat eine Bestellung
  • Lisa Weber (ID 3) hat keine Bestellung

Arten von Beziehungen

Es gibt drei Arten von Beziehungen:

1:1 (Eins-zu-Eins)

Ein Datensatz in Tabelle A gehoert zu genau einem Datensatz in Tabelle B.

kunden (1) ←→ (1) kundenprofile

Beispiel: Jeder Kunde hat genau ein Profil.

1:N (Eins-zu-Viele)

Ein Datensatz in Tabelle A kann zu mehreren Datensaetzen in Tabelle B gehoeren.

kunden (1) ←→ (N) bestellungen

Beispiel: Ein Kunde kann viele Bestellungen haben, aber jede Bestellung gehoert zu genau einem Kunden.

N:M (Viele-zu-Viele)

Datensaetze in beiden Tabellen koennen mit mehreren Datensaetzen der anderen Tabelle verknuepft sein.

produkte (N) ←→ (M) kategorien

Beispiel: Ein Produkt kann in mehreren Kategorien sein, und eine Kategorie kann viele Produkte enthalten. Fuer diese Beziehung braucht man eine Zwischentabelle:

-- Zwischentabelle fuer N:M-Beziehung
CREATE TABLE produkt_kategorien (
    produkt_id INTEGER REFERENCES produkte(id),
    kategorie_id INTEGER REFERENCES kategorien(id),
    PRIMARY KEY (produkt_id, kategorie_id)
);

Normalisierung - Daten richtig organisieren

Normalisierung bedeutet, Daten so zu organisieren, dass keine unnoetigen Duplikate entstehen. Schauen wir uns an, warum das wichtig ist.

Schlecht: Alles in einer Tabelle

+----+---------------+--------+------------+--------+--------------+
| id | kundenname    | stadt  | datum      | betrag | produktname  |
+----+---------------+--------+------------+--------+--------------+
|  1 | Anna Schmidt  | Berlin | 2026-01-15 | 59.99  | T-Shirt      |
|  2 | Anna Schmidt  | Berlin | 2026-02-20 | 129.50 | Jacke        |
|  3 | Max Mueller   | Hamburg| 2026-03-01 | 45.00  | T-Shirt      |
+----+---------------+--------+------------+--------+--------------+

Probleme:

  • “Anna Schmidt” und “Berlin” werden doppelt gespeichert
  • Wenn Anna umzieht, muessen mehrere Zeilen geaendert werden
  • Fehleranfaellig: Was, wenn in einer Zeile “Berlin” und in einer anderen “berlin” steht?

Gut: Aufgeteilt in Tabellen

kunden:                         bestellungen:
+----+---------------+--------+ +----+-----------+------------+--------+
| id | name          | stadt  | | id | kunden_id | datum      | betrag |
+----+---------------+--------+ +----+-----------+------------+--------+
|  1 | Anna Schmidt  | Berlin | |  1 |         1 | 2026-01-15 |  59.99 |
|  2 | Max Mueller   | Hamburg| |  2 |         1 | 2026-02-20 | 129.50 |
+----+---------------+--------+ |  3 |         2 | 2026-03-01 |  45.00 |
                                 +----+-----------+------------+--------+

Vorteile:

  • Jede Information existiert nur einmal
  • Aenderungen muessen nur an einer Stelle gemacht werden
  • Konsistente Daten

SQL-Befehle im Ueberblick

SQL-Befehle werden in Kategorien unterteilt:

KategorieBefehleZweck
DQL (Data Query Language)SELECTDaten abfragen
DML (Data Manipulation Language)INSERT, UPDATE, DELETEDaten veraendern
DDL (Data Definition Language)CREATE, ALTER, DROPStruktur definieren
DCL (Data Control Language)GRANT, REVOKERechte verwalten
TCL (Transaction Control Language)COMMIT, ROLLBACKTransaktionen steuern

Keine Sorge, du musst die Abkuerzungen nicht auswendig lernen. Wichtig ist nur zu wissen, dass SQL verschiedene Aufgabenbereiche abdeckt.

Das Entity-Relationship-Modell

Bevor man eine Datenbank baut, erstellt man ein ER-Modell (Entity-Relationship-Modell). Das ist ein Diagramm, das zeigt, welche Tabellen es gibt und wie sie zusammenhaengen.

Fuer unseren Online-Shop sieht das vereinfacht so aus:

[kunden] 1 ──── N [bestellungen] N ──── N [produkte]
   │                    │                     │
   └── id               ├── id               └── id
   └── name             ├── kunden_id        └── name
   └── email            ├── datum            └── preis
   └── stadt            └── betrag           └── kategorie

Datenbank-Management-Systeme (DBMS)

Ein DBMS ist die Software, die deine Datenbank verwaltet. Du kommunizierst mit dem DBMS ueber SQL:

Du (SQL-Abfrage) → DBMS → Datenbank → DBMS → Ergebnis

Fuer Anfaenger empfehlen wir:

  • SQLite: Perfekt zum Starten - kein Server, keine Installation, laeuft ueberall
  • PostgreSQL: Die beste Open-Source-Datenbank fuer den professionellen Einsatz

Was kommt als Naechstes?

Im naechsten Tutorial richten wir deine SQL-Umgebung ein. Du installierst entweder SQLite oder PostgreSQL und bist danach bereit, deine ersten Abfragen zu schreiben.

Zusammenfassung

  • Relationale Datenbanken speichern Daten in Tabellen mit Spalten und Zeilen
  • Jede Tabelle hat einen Primaerschluessel zur eindeutigen Identifikation
  • Tabellen werden ueber Fremdschluessel miteinander verknuepft
  • Es gibt 1:1, 1:N und N:M Beziehungen
  • Normalisierung vermeidet Datenduplikate und sorgt fuer Konsistenz
  • SQL hat verschiedene Befehlskategorien: DQL, DML, DDL, DCL und TCL

Uebungen

  1. Zeichne ein ER-Modell: Erstelle ein einfaches Diagramm fuer eine Bibliothek mit den Tabellen buecher, autoren und ausleihen.
  2. Identifiziere Beziehungen: Welche Beziehungsart besteht zwischen schueler und klassen? Und zwischen schueler und faecher?
  3. Normalisierung: Schau dir diese Tabelle an und ueberlege, wie du sie in mehrere Tabellen aufteilen wuerdest:
+----+----------+--------+-------------+----------------+
| id | schueler | klasse | klassenraum | klassenlehrer  |
+----+----------+--------+-------------+----------------+
|  1 | Tim      | 10a    | Raum 201    | Frau Mueller   |
|  2 | Sara     | 10a    | Raum 201    | Frau Mueller   |
|  3 | Lena     | 10b    | Raum 205    | Herr Schmidt   |
+----+----------+--------+-------------+----------------+

Pro-Tipp: Denke bei jeder Tabelle an die Frage: “Kann ich jeden Datensatz eindeutig identifizieren?” Wenn nein, fehlt dir ein guter Primaerschluessel. Eine automatisch hochzaehlende ID ist fast immer die sicherste Wahl.

Zurück zum SQL Kurs