sql >> Database teknologi >  >> RDS >> PostgreSQL

Relationelt databaseskema til event sourcing

Jeg synes, det er mere fleksibelt, hvis du gemmer promotoren som en del af begivenhedens nyttelast i stedet for metadata. Sikkerhedsproblemerne skal håndteres uden for domænet. Ikke alle begivenheder er rejst af en bruger, selvom du kan lave en falsk for dem (en SysAdmin for CronJob).

For eksempel:

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
}

Jeg synes, klassenavne er nok. Tilføjelse af en anden tabel komplicerer hændelseslæsning (ved join-tabeller), og jeg tror, ​​at det kun tilføjer værdi, når klassenavnene omdøbes (Opdater en række i hændelsestypetabellen). Men jeg tror ikke, det giver meget besvær ved at bruge

update domain_events set 
    aggregate_type = 'new class name'
where aggregate_type = 'origin class name'

Jeg er ikke sikker på, at jeg forstår begivenhedsgrupper, kan du tilføje flere forklaringer?

Nogle gange bruges begivenhederne til at integrere flere sammenhænge. Men hver begivenhed rejses kun i én sammenhæng. For eksempel rejses A ManualPaymentMadeEvent i bestillingssammenhæng, og en begivenhedslister i forsendelsessammenhæng bruger den også, og betragter den som udløseren af ​​startforsendelse.

Jeg foretrækker at bruge pr. databasebruger (oracle-udtryk) pr. kontekst. shipping.domain_events for shipping context og ordering.domain_events for ordering context.

Her er skemaet i axon-framework hvilket kan hjælpe

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. PostgreSQL:VACCUM FULL vs pg_dump og gendan

  2. Hvornår skal jeg IKKE bruge mysql_real_escape_string

  3. php mysql i dag, i går og dato fra databasen

  4. Sådan opretter du en menu i SQLPlus eller PL/SQL