De status van dit document is voorlopig en zou nog kunnen wijzigen.
Claims worden ongedifferentiëerd opgeslagen
Besluit
- Data worden in in het prototyperegister gepersisteerd als atomaire claims (4661)
- In de PostgreSQL data store kiezen we ervoor om alle claims primair in één tabel op te slaan (#222).
- Dit betekent dat de claimtype-specifieke (rol)data opgeslagen moet worden als een ongevormde JSON blob.
- Omdat het hierdoor moeilijk wordt om gedetailleerd te kunnen zoeken in de data, dupliceren we de data in de database ook in de vorm van claimtype-specifieke tabellen, die strict getypeerd zijn. (#200).
- We erkennen dat dit data duplicatie is, maar
- Alleen de claim engine heeft toegang tot deze data, en heeft als verantwoording om de data in sync te houden.
- Storage is goedkoop, zeker voor de afmeting van de te voorziene registers.
- De “single source of truth” is altijd de primaire tabel, de per-claimtype tabellen zijn feitelijk een implementatiedetail, en zou in een anders-soortige database kunnen staan.
Toelichting
Hoewel de stricte typering die tabel-per-claimtype biedt veel voordelen heeft, kwam vrij snel naar boven dat dit het bijzonder ongemakkelijk maakt om efficient claims te vinden op basis van ID, zonder het type te weten. Dit is met name voor annotatie claims een belangrijke feature.
Bovendien is het moeilijker om claims van verschillende typen chronologisch terug te geven.
Om deze redenen kiezen we ervoor om volledige lijst met claims als bron te zien. Dit sluit ook beter aan op het event sourcing paradigma. De tabel-per-claimtype oplossing is op deze manier bezien een soort primaire view/read model van de “claim events”.