Si je devais utiliser un SGBDR (par exemple, SQL Server) pour stocker event sourcing des données, ce qui pourrait le schéma ressemble?
J'ai vu quelques variations parlé dans un sens abstrait, mais rien de concret.
Par exemple, dire qu'on a un "Produit" de l'entité, et les modifications de ce produit pourrait prendre la forme de: des Prix, des Coûts et de la Description. Je suis confus quant à savoir si j'avais:
- Avoir un "ProductEvent" table de, qui a tous les champs pour un produit, où chaque changement, un nouvel enregistrement dans la table, plus "qui, quoi, où, pourquoi, quand et comment" selon le cas. Lors de coûts, de prix ou de description sont modifiées, une toute nouvelle ligne comme ajoutés pour représenter le Produit.
- Magasin de contrôle des Coûts de produit, de Prix et de la Description dans des tables séparées rejoint à la table Produit avec une relation de clé étrangère. Lorsque les modifications apportées à ces propriétés se produire, écrire de nouvelles lignes avec WWWWWH tant que de besoin.
- Magasin WWWWWH, plus un objet sérialisé représentant de l'événement, dans un "ProductEvent tableau" au sens de l'événement lui-même doit être chargé, de-sérialisés et re-joué dans mon code d'application, afin de reconstruire l'état de l'application pour un Produit donné.
En particulier, je vous inquiéter au sujet de l'option 2 ci-dessus. Poussée à l'extrême, le produit table près de la table par la propriété, où à la charge de l'État de l'Application pour un produit donné nécessiterait le chargement de tous les événements pour que le produit de chacune de table d'événement. Cette table-explosion sent mauvais pour moi.
Je suis sûr que "ça dépend", et alors il n'y a pas une seule "bonne réponse", je vais essayer d'obtenir un sentir pour ce qui est acceptable et ce qui est totalement inacceptable. Je suis également conscient que le NoSQL peut aider à ici, où les événements pouvaient être stockées à l'encontre d'une racine d'agrégat, de sens qu'une seule requête à la base de données pour obtenir les événements de reconstruire l'objet à partir de, mais nous ne sommes pas à l'aide d'un NoSQL db pour le moment je me sens autour de solutions de rechange.
Merci beaucoup à l'avance.