Architekturprinzipien
Status: Entwurf · Spec-Kandidat: nein (Leitlinie)
Diese Prinzipien sind verbindlich. Architekturentscheidungen, die einem dieser Prinzipien widersprechen, müssen explizit begründet und dokumentiert werden.
| # | Prinzip | Konsequenz |
|---|---|---|
| AP-01 | SQL bleibt das führende Speichermodell. | Kein Wechsel auf Document Store / Graph Store als Primärsystem. JSONB ergänzt SQL, ersetzt es nicht. |
| AP-02 | Flexibilität wird über Metadaten erreicht. | Keine Schema-Migration für neue fachliche Typen oder Attribute (NFR-004). |
| AP-03 | Konsistenz wird relational abgesichert. | Foreign Keys, Unique Constraints, Check Constraints, Trigger – nicht „nur im Service”. |
| AP-04 | Hard Delete ist Ausnahmefall. | Default ist Soft Delete + DDM_RELATION_TYPE.delete_policy = restrict. |
| AP-05 | Validierung erfolgt mehrstufig. | UI/API + Service-Layer + Datenbank, siehe Validierung. |
| AP-06 | Such- und Reportingoptimierung erfolgt gezielt über Indizes und Views. | Keine Vollscan-basierten Suchen in Produktion; statt globaler GIN-Magie gezielte Expression-Indizes je nachgefragtem Attribut. |
| AP-07 | Enterprise-Erweiterungen werden vorbereitet, aber nicht erzwungen. | Externer Suchcluster, Event Sourcing sind nicht Pflicht in V1, dürfen aber nicht durch Designentscheidungen verbaut werden. |
| AP-08 | Mandantenfähigkeit ist Pflicht-Säule. | Alle fachlichen Tabellen tragen tenant_id. In V1 nur Default-Tenant; weitere Tenants können ohne Schemaänderung aktiviert werden. |
| AP-08a | Strikte Trennung System (mdm_sys) vs. Domain (mdm). | System-Tabellen ohne Tenant-Scope (AA_TENANT, AA_APP_USER, AA_SERVICE_ACCOUNT); Domain-Tabellen tenant_id NOT NULL. Siehe Schema und Konventionen. |
| AP-09 | Externe Events laufen über die Outbox. | Webhooks und Queues konsumieren mdm.AA_OUTBOX_EVENT, der vom Service in derselben Transaktion wie Daten und Audit geschrieben wird. |
| AP-10 | Beziehungen tragen fachliche Eigenschaften. | DDM_ENTITY_RELATION.attributes ist über DDM_RELATION_TYPE_ATTRIBUTE strukturiert validiert — analog zu DDM_ENTITY_TYPE_ATTRIBUTE. |
| AP-11 | Service-Code-Path-Queries auf JSONB nur über deklarierte Indizes. | Jede Match/Merge-Regel und jede External-ID-Heuristik bringt ihre Index-Anforderung als Migration mit. Pauschale GIN-Catch-alls auf attributes sind kein Performance-Pfad, sondern Sicherheitsnetz für is_external_source_target=true-Typen (OP-17). Filter/Sort über die UI/REST sind auf searchable/sortable-Attribute mit index_status='active' beschränkt. |