DDM_ENTITY_VERSION
Status: Entwurf · Spec-Kandidat: ja
Zweck
Immutabler JSONB-Snapshot einer Entität zu einer bestimmten Versionsnummer. Erlaubt fachliche Wiederherstellung und detaillierte Historisierung über das AA_AUDIT_LOG hinaus.
Felder
| Feld | Typ | Pflicht | Hinweise |
|---|---|---|---|
id | uuid | ja | PK |
entity_id | uuid | ja | FK → DDM_ENTITY (RESTRICT) |
version_no | integer | ja | fortlaufende Versionsnummer je Entität |
snapshot | jsonb | ja | vollständiger Datensatz als JSON-Objekt |
created_at | timestamptz | ja | |
created_by | text | nein |
Constraints
entity_version_snapshot_is_object_chk:jsonb_typeof(snapshot) = 'object'entity_version_unique_uk:(entity_id, version_no)eindeutig
Verhalten
- Snapshot wird durch den Service-Layer in derselben Transaktion wie die Mutation geschrieben (nicht durch Trigger).
- Frequenz (gesetzt, OP-12): bei jedem
INSERT(Version 1) und jedemUPDATEder Entität wird ein voller Snapshot inDDM_ENTITY_VERSIONgeschrieben. Keine Selektivität nach Statuswechsel/Freigabe. - Inhalt (gesetzt): voller JSONB-Snapshot des relationalen Kerns +
attributes. Format:Beziehungen sind nicht Teil des Snapshots —{"tenant_id": "...","entity_type_id": "...","code": "...","name": "...","status": "...","version": 7,"attributes": { ... },"captured_at": "2026-04-27T12:34:56Z"}DDM_ENTITY_RELATION-Mutationen werden über dasAA_AUDIT_LOG(Aktionrelate/unrelate) historisiert und können bei Bedarf rückwärts rekonstruiert werden. Begründung: zwei Schreibwege wären redundant, und Beziehungs-Versionen pro Entität verdoppeln Speicher pro betroffener Beziehung. version_noist exakt gleichDDM_ENTITY.versionzum Zeitpunkt des Snapshots.DDM_ENTITY.versionwird per Trigger (trg_entity_before_write) inkrementiert, der Service liest den neuen Wert nachRETURNING versionund schreibt damitDDM_ENTITY_VERSION.version_no— keine Lücken, keine Konflikte.- Soft-Delete (
deleted_atsetzen) erzeugt keine neue Version (es ist kein fachliches Update). Restore (Reaktivierung) erzeugt wieder eine neue Version.
Offen
- Aufbewahrung und Komprimierung großer Historien (Retention-Policy, Partitionierung).