💡 1. Warum Constraints (Integritätsbedingungen)?
Ohne Einschränkungen könnte jede Anwendung fehlerhafte Daten wie negative Altersangaben, doppelte E-Mail-Adressen oder leere Pflichtfelder in die Datenbank schreiben. Constraints garantieren die Konsistenz direkt auf Datenbankebene!
CREATE TABLE bank_kunden (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kunden_nr TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
kunden_alter INTEGER NOT NULL CHECK (kunden_alter >= 18),
bonitaets_score INTEGER NOT NULL DEFAULT 500 CHECK (bonitaets_score BETWEEN 100 AND 1000),
status TEXT NOT NULL DEFAULT 'aktiv' CHECK (status IN ('aktiv', 'verifiziert', 'gesperrt')),
registriert_am TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);
🛡️ 2. Die CHECK-Klausel & Wertebereiche
Mit CHECK kannst du beliebige boolesche Ausdrücke als Wächter für jede neu eingefügte oder geänderte Zeile definieren:
- Wertebereich:
CHECK (kunden_alter >= 18) - Intervall:
CHECK (score BETWEEN 100 AND 1000) - Erlaubte Wertemenge (Enum):
CHECK (status IN ('aktiv', 'inaktiv', 'gesperrt')) - Kreditlimit / Saldo:
CHECK (saldo >= -500.0)
🚪 Didaktische Analogie: Die Türsteher der Datenbank
Jeder Constraint ist ein spezialisierter Türsteher: NOT NULL lässt niemanden ohne Ausweis hinein, UNIQUE verbannt Zwillings-Klone, CHECK (kunden_alter >= 18) prüft den Jugendschutz und DEFAULT spendiert jedem Gast automatisch ein Begrüßungsgetränk, falls er keines bestellt hat!
📑 3. Cheat-Sheet: SQL Constraints
| Constraint | Syntax-Beispiel | Beschreibung |
|---|---|---|
PRIMARY KEY |
id INTEGER PRIMARY KEY |
Eindeutiger Identifikator für jede Zeile |
NOT NULL |
name TEXT NOT NULL |
Verbietet NULL / leere Werte |
UNIQUE |
email TEXT UNIQUE |
Verhindert doppelte Werte in der Spalte |
DEFAULT |
saldo REAL DEFAULT 0.0 |
Automatische Belegung bei Fehlen |
CHECK |
CHECK (saldo >= -500.0) |
Validierungsregel für Werte |