Architekturentscheidung · ADR-003

Normalisierte Tabellen vor JSONB in PostgreSQL

Kern-Entitäten werden normalisiert modelliert, mit Constraints und Fremdschlüsseln. JSONB wird gezielt für tatsächlich schemalose oder selten abgefragte Randdaten eingesetzt.

Was ist das? · Architekturentscheidung

Eine dokumentierte Architekturentscheidung im ADR-Format — Kontext, geprüfte Optionen, Begründung und Konsequenzen. Eine konkrete Entscheidung, kein allgemeiner Leitfaden. Zur Übersicht

Status
Angenommen
Kennung
ADR-003
Überprüfung
Zu prüfen bei signifikanten Änderungen an Abfragemustern oder Datenvolumen.

Kontext

PostgreSQL bietet mit JSONB flexible, schemalose Speicherung. Für strukturierte Daten stellt sich die Frage: normalisierte Tabellen oder JSONB-Spalten?

Problem

JSONB ist verlockend flexibel, verlagert aber Struktur und Integrität aus der Datenbank in den Anwendungscode. Normalisierte Tabellen erzwingen Struktur, sind aber weniger flexibel bei häufigen Schemaänderungen.

Optionen

Was wir geprüft haben.

  1. A

    Normalisierte Tabellen

    Struktur, Constraints und Indizes in der DB; klare Beziehungen.

  2. B

    JSONB-Spalten

    Flexibel und schemalos — Integrität liegt im Code.

  3. C

    Gemischt

    Normalisiert für Kern-Entitäten, JSONB für echte Randdaten.

Entscheidung

Was wir entschieden haben.

Kern-Entitäten werden normalisiert modelliert, mit Constraints und Fremdschlüsseln. JSONB wird gezielt für tatsächlich schemalose oder selten abgefragte Randdaten eingesetzt.

Warum diese Entscheidung

Datenintegrität gehört in die Datenbank, nicht in verstreute Anwendungslogik. Normalisierte Strukturen sind abfragbar, indizierbar und selbstdokumentierend. JSONB ist dort richtig, wo die Struktur echt variabel ist — nicht als Abkürzung um Modellierung herum.

Konsequenzen

  • Schemaänderungen an Kern-Entitäten erfordern Migrationen — bewusst, versioniert, nachvollziehbar.
  • Häufig abgefragte JSONB-Felder brauchen gezielte Indizes (GIN) und eine dokumentierte erwartete Form.
  • Die Grenze zwischen Kern- und Randdaten ist eine Entwurfsentscheidung, die begründet wird.

Verworfene Alternativen

  • JSONB als DefaultVerlagert Integrität in den Code und erschwert Abfragen und Migration.
  • Normalisierung um jeden PreisErzwingt Struktur auch dort, wo Daten echt schemalos sind.
Weiterlesen

Verwandte Themen.

Leitfäden, Entscheidungen, Leistungen und Arbeiten, die mit dieser Seite zusammenhängen.

Vor einer ähnlichen Entscheidung?

Wir treffen sie nicht aus dem Bauch. Über Entscheidungen in Ihrem System sprechen Sie direkt mit der Geschäftsführung.