ADR-0047: Every project has a named schema
Kontext
Ein Projekt ohne Schema ist fachlich leer: QGIS braucht Bindings, Datenmanagement eine benannte Pack-Seite. POST /projects instanziierte bisher nur project_schema_* (Basis) oder klonte Bindings optional. Die Maske bot „Nur Basisschema“ als leere Option. schema_definitions entstanden erst später über + auf der Schemata-Liste — bestehende Projekte (z. B. nach dem ersten Anlegen) hatten nur Standard.
Entscheidung
- Jedes Projekt hat mindestens ein benanntes Schema (
schema_definitions.project_id). Anlegen erzeugt es aus dem Projektnamen (serialisierte ID). - Beim Anlegen ist die Quelle Pflicht: Standard-Schema (Basis-Kinds/-Felder) oder Kopie von einem bestehenden Projekt (
clone_schema_from). Keine dritte „ohne Schema“-Option. - Klon kopiert weiter nur Bindings (keine GIS, keine Records). Projektbezogene Kinds bleiben auf dem Quell-Pack (
schema_code); die neue Projektseite listet sie, weil sie gebunden sind. - Extra-Packs per + bleiben erlaubt. Bestehende Projekte ohne Pack werden per Alembic nachgezogen.
| Gate | Recommendation | Why it fits here | Rejected alternative and why |
|---|---|---|---|
| Quelle | Radio Standard / Kopie, Kopie braucht Quellprojekt | Explizite Pflicht; erster Projektstand nur Standard | Optionales Dropdown — leicht übersprungen |
| Named document | Auto aus Projektname | Schemata-Liste zeigt das Projekt sofort | Nur Bindings — UI wirkt schema-los |
| Klon-Kinds | Bindings + Sichtbarkeit über project_id |
Kind-code bleibt org-weit eindeutig |
Kind-Duplikate mit neuem Code — bricht GIS |
| Extra-Packs | weiter + | Mehrere Packs pro Projekt bleiben möglich | Hart 1:1 — nimmt ADR-0036 ohne Bedarf zurück |
Begründung (für dieses Setup)
Standard bleibt der globale Katalog. Das Projektschema ist die Spezialisierung, die QGIS anwendet. Pflichtwahl beim Anlegen macht die Invariante „Projekt ⇒ Schema“ in der Maske sichtbar; die serialisierte ID vermeidet freie Wire-Codes.
Verworfene Alternativen
| Alternative | Warum verworfen |
|---|---|
Optionales clone_schema_from (Status quo) |
Projekt ohne sichtbares Schema |
| Schema erst später über Schemata-+ | Widerspricht „Projekt hat ein Schema“ |
| Geteiltes föderiertes Extra-Pack | ADR-0037 |
| Physische Schema-DB pro Projekt | ADR-0033 |
| Kind-Zeilen beim Klon duplizieren | Bricht org-weit eindeutige geo_objects.kind |
Folgen
- Alembic
0024_project_named_schema(Tenant0012). POST /projectserzeugt immerschema_definitions; UI-Radios Standard / Kopie.