Datenbanken verstehen
Lerne die Grundlagen relationaler Datenbanken: Tabellen, Zeilen, Spalten, Primärschlüssel und Beziehungen - das Fundament für alle SQL-Kenntnisse.
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:
| Begriff | Erklaerung | Beispiel |
|---|---|---|
| Tabelle | Eine Sammlung zusammengehoeriger Daten | kunden |
| Spalte (Column) | Eine bestimmte Eigenschaft | name, email |
| Zeile (Row) | Ein einzelner Datensatz | Anna Schmidt mit allen Infos |
| Feld | Ein 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:
| Kategorie | Befehle | Zweck |
|---|---|---|
| DQL (Data Query Language) | SELECT | Daten abfragen |
| DML (Data Manipulation Language) | INSERT, UPDATE, DELETE | Daten veraendern |
| DDL (Data Definition Language) | CREATE, ALTER, DROP | Struktur definieren |
| DCL (Data Control Language) | GRANT, REVOKE | Rechte verwalten |
| TCL (Transaction Control Language) | COMMIT, ROLLBACK | Transaktionen 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
- Zeichne ein ER-Modell: Erstelle ein einfaches Diagramm fuer eine Bibliothek mit den Tabellen
buecher,autorenundausleihen. - Identifiziere Beziehungen: Welche Beziehungsart besteht zwischen
schuelerundklassen? Und zwischenschuelerundfaecher? - 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.