Datenmodellierung: Wann JSONB die Normalisierung übertrifft
Entscheiden Sie zwischen einer JSONB-Spalte und einer separaten Tabelle – flexible Attribute oder striktes Schema.
Datenmodellierung: Wann JSONB die Normalisierung übertrifft ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Die Entscheidung
Für jedes Datenelement, das Sie speichern könnten: Spalte oder JSONB-Schlüssel? Die Antwort bestimmt das Schema-Design, die Abfrageperformance und die Wartbarkeit.
Wann Spalten die bessere Wahl sind
Verwenden Sie echte Spalten, wenn Daten:
- bekannt und stabil sind
- häufig mit Indizes abgefragt werden
- durch CHECK- oder FK-Constraints validiert werden
- für Berichte verwendet oder verknüpft werden
Wann JSONB die bessere Wahl ist
Verwenden Sie JSONB, wenn:
- die Struktur je Zeile variiert (mandantendefinierte Felder, Plugin-Metadaten)
- sich das Schema schnell weiterentwickelt (Migrationen vermeiden)
- ganze Dokumente üblicherweise gelesen oder geschrieben werden
- undurchsichtige Nutzdaten gespeichert werden (Webhook-Inhalte)
Das hybride Muster
Das Beste aus beiden Welten: strukturierte Spalten für den stabilen Kern, JSONB für den variablen Rest:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
data JSONB NOT NULL DEFAULT '{}'::JSONB
);Die EAV-Falle
Das klassische „Entity-Attribute-Value“-Modell – eine Tabelle mit Zeilen aus (Schlüssel, Wert) – war früher die einzige Möglichkeit für dünn besetzte Daten. JSONB ersetzt EAV durch eine einzelne Dokumentspalte:
-- Old EAV:
CREATE TABLE user_attrs (
user_id BIGINT,
attr TEXT,
val TEXT
);
-- Modern:
ALTER TABLE users ADD COLUMN attrs JSONB NOT NULL DEFAULT '{}';
-- JSONB queries are faster and easier than the EAV joins.Migrationsstrategie
Eine Spalte zu einer stark ausgelasteten Tabelle hinzufügen → 5 Minuten Ausfallzeit bei einer großen Tabelle. Mit JSONB ist das Hinzufügen eines Feldes lediglich eine Änderung am Anwendungscode.
Constraints für JSONB
Fügen Sie CHECK-Constraints hinzu, um eine Mindeststruktur durchzusetzen:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type'),
ADD CONSTRAINT type_is_string CHECK (jsonb_typeof(data->'type') = 'string');Häufig verwendete Felder in Spalten übernehmen
Wenn ein JSONB-Feld häufig abgefragt wird, übernehmen Sie es in eine echte Spalte. Ein UPDATE-Skript sowie ein neuer Index und eine neue Spalte machen es schnell.
JSONB-Patch-Operationen
Ein einzelnes Feld aktualisieren:
UPDATE users
SET attrs = jsonb_set(attrs, '{plan}', '"pro"')
WHERE id = 1;Geldbeträge nicht in JSONB speichern
Finanzielle Werte benötigen exakte NUMERIC-Typen und Constraints. Verwenden Sie dafür immer echte Spalten.
Wann JSONB Nachteile bringt
Wenn Sie in jeder Abfrage denselben JSONB-Schlüssel extrahieren und umwandeln, ist das ein Zeichen dafür, dass er eine eigene Spalte sein sollte. Die kumulierten Kosten von (data->>'k')::INT über Millionen von Zeilen summieren sich.
Schema dokumentieren
JSONB-Spalten lassen sich leicht beschreiben, aber schwer dokumentieren. Pflegen Sie ein externes Schema (JSON Schema, Anwendungscode), damit alle Beteiligten wissen, was sie erwarten können.
Zusammenfassung
JSONB ist ein leistungsfähiges Werkzeug – verwenden Sie es für die variablen Teile und echte Spalten für den stabilen Kern. Übernehmen Sie häufig verwendete Felder in eigene Spalten, sobald sich entsprechende Muster herausbilden.
Kurzer Check
Sie speichern Audit-Ereignisse. Der Ereignistyp ist immer vorhanden; einige Ereignisse enthalten ein Array aus "actors", dessen Struktur variiert. Wie modellieren Sie das?
Lerne SQL mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 46
- Lektionen
- 183
Häufig gestellte Fragen
Ist die Lektion „Datenmodellierung: Wann JSONB die Normalisierung übertrifft“ kostenlos?
Ja — der vollständige Text von „Datenmodellierung: Wann JSONB die Normalisierung übertrifft“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Datenmodellierung: Wann JSONB die Normalisierung übertrifft“?
Entscheiden Sie zwischen einer JSONB-Spalte und einer separaten Tabelle – flexible Attribute oder striktes Schema. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Datenmodellierung: Wann JSONB die Normalisierung übertrifft“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- JSONB vs. JSON: Wann Sie welches verwenden
- Pfadoperatoren: -> ->> @>
- JSONB mit GIN indizieren
- Datenmodellierung: Wann JSONB die Normalisierung übertrifft