Skip to content

ADR-0044: Type-specific kind hierarchy

  • Status: accepted
  • Datum: 2026-09-02
  • Phase: Web Schema-CMS
  • Bezug: ADR-0041, ADR-0028

Kontext

ADR-0041 behandelt jedes Kind gleich: Felder live erben, Elternteil ohne Datensätze, Kind anlegen bei bestehenden Records → 409. QGIS kennt keine Feldvererbung; Layergruppen sind nur der Baum. Datenobjekte und Features brauchen weiter Spezialisierung mit geerbten Feldern — aber Nutzer müssen bestehende Datensätze umziehen oder bewusst löschen können, statt blockiert zu werden.

Entscheidung

  1. Datenobjekt und Feature: ein Kind erbt Typ und Felder (resolve-on-read, unverändert ADR-0028). Das Elternteil wird abstrakt (keine neuen Records/GIS-Inserts).
  2. Bestehende Instanzen: ein Kind anlegen, während das Elternteil Records oder geo_objects hat, verlangt parent_instances: transfer (Zeilen auf das neue Kind, kind_code / kind) oder delete (Records inkl. Hybrid-Cleanup, alle GIS-Zeilen dieses Kinds). Fehlt die Wahl → 409.
  3. Layer (bis ADR-0045): parent_code war nur die Hierarchiestufe (QGIS-Gruppe). Superseeded: ADR-0045 — heutiges Layer erbt Felder; Gruppe hat keine Felder.
  4. Promote (ADR-0028): Feature erbt weiter live; Layer-Promote kopiert Felder. Dieselbe Instanz-Wahl gilt, wenn die Quelle schon Zeilen hat.
  5. API: EntityKindOut.has_instances; eine Stufe bleibt (ADR-0041).
Gate Recommendation Why it fits here Rejected alternative and why
Datenobjekt/Feature Live-Inherit, Eltern abstrakt, Transfer oder Löschen Felder bleiben eine Quelle; bestehende Zeilen nicht still verwerfen 409 belassen — blockiert den Bedienweg
Layer-Felder Default keine; Schalter kopiert QGIS-Layer sind unabhängig Live-Inherit auch für Layer — Drift zur QGIS-Analogie
Transfer-Ziel Immer das neu angelegte Kind Ein Schritt, Felder passen Aufteilen auf mehrere Kinder — kein UI dafür

Begründung (für dieses Setup)

Wenige Kinds; Resolve-on-read bleibt billig für Datenobjekt/Feature. Layer-Kopie ist einmalig und vermeidet eine zweite Vererbungsregel. GIS-Zeilen teilen geo_objects.kind — ein Update des Codes reicht für Transfer.

Verworfene Alternativen

Alternative Warum verworfen
Layer erbt immer wie Feature Widerspricht QGIS-Unabhängigkeit
Datensätze am Layer-Elternteil belassen Gruppe ohne eigene Features; abstrakt bleibt einheitlich
Transfer auf alle bestehenden Kinder verteilen Unklar, welches Kind welche Zeile bekommt
Feld-Override Unverändert ADR-0028

Folgen

  • parent_instances und copy_parent_fields auf POST /entity-kinds (und Promote).
  • ADR-0041 Punkt „Kind anlegen bei Instanzen → 409“ entfällt zugunsten der Wahl.