sql >> Database >  >> RDS >> PostgreSQL

Relationeel databaseschema voor eventsourcing

Ik denk dat het flexibeler is als je de promotor opslaat als onderdeel van de payload van het evenement in plaats van metagegevens. De beveiligingsproblemen moeten buiten het domein worden afgehandeld. Niet elke gebeurtenis wordt door een gebruiker gegenereerd, hoewel je er een nep voor kunt maken (een SysAdmin voor CronJob).

Bijvoorbeeld:

ManualPaymentMadeEvent { //store this object as details in your schema
    amount,
    by_user//In this case, developers can determine whether store the promoter case by case
}

Ik denk dat klassennamen voldoende zijn. Het toevoegen van een andere tabel bemoeilijkt het lezen van gebeurtenissen (door tabellen samen te voegen), en ik denk dat het alleen waarde toevoegt wanneer de klassennamen worden hernoemd (een rij bijwerken in de tabel met gebeurtenistypes). Maar ik denk dat het niet veel problemen toevoegt door

. te gebruiken
update domain_events set 
    aggregate_type = 'new class name'
where aggregate_type = 'origin class name'

Ik weet niet zeker of ik evenementgroepen begrijp, kun je meer uitleg geven?

Soms worden de gebeurtenissen gebruikt om meerdere contexten te integreren. Maar elke gebeurtenis wordt slechts in één context aan de orde gesteld. Een ManualPaymentMadeEvent wordt bijvoorbeeld aan de orde gesteld in de bestelcontext, en een gebeurtenislistner in de verzendcontext gebruikt het ook, en beschouwt het als de trigger om de verzending te starten.

Ik gebruik liever per databasegebruiker (orakelterm) per context. shipping.domain_events voor verzendcontext en order.domain_events voor bestelcontext.

Hier is het schema in axon-framework wat zou kunnen helpen

create table DomainEventEntry (
    aggregateIdentifier varchar2(255) not null,
    sequenceNumber number(19,0) not null,
    type varchar2(255) not null,  --aggregate class name
    eventIdentifier varchar2(255) not null,
    metaData blob,   
    payload blob not null, -- details
    payloadRevision varchar2(255),
    payloadType varchar2(255) not null, --event class name
    timeStamp varchar2(255) not null
);

alter table DomainEventEntry
    add constraint PK_DomainEventEntry primary key (aggregateIdentifier, sequenceNumber, type);



  1. Inleiding tot PL/SQL-referentiecursors in Oracle Database

  2. Hoe gegevens in CDATA in oracle te ontleden

  3. Hoe voeg ik een primaire sleutel auto_increment toe aan de SQL Server-database?

  4. mysql - maak een geïndexeerde uurkolom van een bestaande tijdstempel