PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Schéma de base de données relationnelle pour la recherche d'événements

Je pense que c'est plus flexible si vous stockez le promoteur dans le cadre de la charge utile de l'événement au lieu des métadonnées. Les problèmes de sécurité doivent être traités en dehors du domaine. Tous les événements ne sont pas déclenchés par un utilisateur, bien que vous puissiez en créer un faux (un SysAdmin pour CronJob).

Par exemple :

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
}

Je pense que les noms de classe suffisent. L'ajout d'une autre table complique la lecture des événements (par les tables de jointure), et je pense que cela n'ajoute de la valeur que lorsque les noms de classe sont renommés (mise à jour d'une ligne dans la table de type d'événement). Mais je pense que cela n'ajoute pas beaucoup de problèmes en utilisant

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

Je ne suis pas sûr de comprendre les groupes d'événements, pourriez-vous ajouter plus d'explications ?

Parfois, les événements sont utilisés pour intégrer plusieurs contextes. Mais chaque événement n'est soulevé que dans un contexte. Par exemple, un ManualPaymentMadeEvent est déclenché dans le contexte de la commande, et un écouteur d'événements dans le contexte de l'expédition le consomme également, le considère comme le déclencheur du démarrage de l'expédition.

Je préfère utiliser par utilisateur de base de données (terme oracle) par contexte. shipping.domain_events pour le contexte d'expédition et ordering.domain_events pour le contexte de commande.

Voici le schéma dans axon-framework qui pourrait aider

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