sql >> Base de Datos >  >> RDS >> PostgreSQL

Esquema de base de datos relacional para el abastecimiento de eventos

Creo que es más flexible si almacena el promotor como parte de la carga útil del evento en lugar de los metadatos. Los problemas de seguridad deben manejarse fuera del dominio. No todos los eventos son generados por un usuario, aunque podría crear uno falso para ellos (un SysAdmin para CronJob).

Por ejemplo:

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
}

Creo que los nombres de clase son suficientes. Agregar otra tabla complica la lectura de eventos (juntando tablas), y creo que solo agrega valor cuando se cambia el nombre de las clases (actualice una fila en la tabla de tipo de evento). Pero creo que no agrega muchos problemas al usar

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

No estoy seguro de entender los grupos de eventos, ¿podría agregar más explicaciones?

A veces, los eventos se utilizan para integrar múltiples contextos. Pero cada evento se plantea sólo en un contexto. Por ejemplo, un ManualPaymentMadeEvent se genera en el contexto de pedido y un listado de eventos en el contexto de envío también lo consume, lo considera como el desencadenante del inicio del envío.

Prefiero usar por usuario de base de datos (término de Oracle) por contexto. shipping.domain_events para contexto de envío y ordering.domain_events para contexto de pedido.

Aquí está el esquema en axon-framework que podría ayudar

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);