ADR-0025: Schema-CMS Hybrid (Management) und QGIS Value Relations
- Status: accepted
- Datum: 2026-08-27
- Phase: Editor Management / Schema-CMS
- Bezug: ADR-0010 (geo_objects), ADR-0023 (Stammdaten), ADR-0008 (QGIS-Export)
Kontext
Der Editor braucht einen Reiter Management (Datenbank + Layer) mit erweiterbarem Datenmodell (String, Liste, Zahl, URI, Email, Telefon, Bild, Dokument, Relation, Enum). Default-Kinds (Projekt, Phase, Akteur, …) sollen mitgeliefert, aber löschbar sein. Gleichzeitig müssen QGIS Value Relations weiter funktionieren: Dropdowns lesen stabile Spalten aus PostGIS-/GPKG-Tabellen (z. B. projects.project_manager → persons.person_id / full_name).
Entscheidung
- Zentrum:
entity_kinds+field_definitions+entity_records(attrsJSONB, validiert gegen Felddefs). Nicht „Projekt“ als Zentrumstabelle. - Hybrid (2A): Default-Kinds spiegeln weiter flache Kompat-Tabellen (
projects,persons,organizations,geo_object_kinds) über Adapter (compat_table/compat_idauf dem Record). Custom Kinds und Custom Felder leben nur in der Registry/Records. - Seed:
project,phase,actor,actor_assignment,layer(exadmin_group),feature_typemitis_seeded=true, löschbar (Confirm + QGIS-Warnung). - Dateien:
entity_filesaufFILE_STORAGE_DIR(keinbytea); Preview clientseitig (PDF.js / docx / SheetJS). - API:
/api/v1/entity-kinds,…/fields,/api/v1/entities,/api/v1/entity-files. - Editor-IA: Workspace Karte | Management; unter Management Tabs Datenbank | Layer | Feature (ADR-0027). Menüpunkt Manager entfällt.
- GIS:
geo_objectsbleibt Geometrie-SSOT; Feature-Typ synced Code/Label nachgeo_object_kinds.
Begründung
Value Relations und bestehende Editor-/Dashboard-Project-APIs brauchen flache Spalten. Reines EAV ohne Projektion bricht Live-QGIS und den GPKG-Export. Registry + JSONB-Attrs skalieren für Custom Fields; Pagination und search_text vermeiden Full-Dumps.
Verworfene Alternativen
| Alternative | Warum verworfen |
|---|---|
| Reines EAV / JSONB ohne Kompat-Tabellen | Bricht QGIS Value Relations und bestehende Forms |
| Mega-Tabelle mit Spalte pro Feld | Schema-Drift; widerspricht ADR-0010-Geist |
| JSONB ohne Feld-Registry | Keine Validierung, keine UI-Generierung, keine Typen |
| Server-LibreOffice für Document-Preview | Schwer im Hot Path; Editor ist Desktop-SPA |
bytea für Bilder/Dokumente |
Volume-Muster bereits etabliert (ADR-0005) |
Folgen
- Alembic
0007_schema_cms. - Dashboard
/stammdatenkann später dieselbe API nutzen (nicht Teil dieses Slices). - Beilage-Tabellen (
geo_object_tkg, …) bleiben bis eigene Migration; Feature-Typ-CMS ersetzt nur die Kind-Metadaten-Pflege.