ADR-0044: Type-specific kind hierarchy
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
- 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).
- Bestehende Instanzen: ein Kind anlegen, während das Elternteil Records oder
geo_objectshat, verlangtparent_instances:transfer(Zeilen auf das neue Kind,kind_code/kind) oderdelete(Records inkl. Hybrid-Cleanup, alle GIS-Zeilen dieses Kinds). Fehlt die Wahl → 409. - Layer (bis ADR-0045):
parent_codewar nur die Hierarchiestufe (QGIS-Gruppe). Superseeded: ADR-0045 — heutiges Layer erbt Felder; Gruppe hat keine Felder. - Promote (ADR-0028): Feature erbt weiter live; Layer-Promote kopiert Felder. Dieselbe Instanz-Wahl gilt, wenn die Quelle schon Zeilen hat.
- 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_instancesundcopy_parent_fieldsaufPOST /entity-kinds(und Promote).- ADR-0041 Punkt „Kind anlegen bei Instanzen → 409“ entfällt zugunsten der Wahl.