0

Je travaille sur mon premier projet utilisant CQRS, et certaines choses ne me sont pas vraiment claires. Supposons que j'ai dans mon modèle certains clients et chaque client a une liste de commandes.CQRS - clé étrangère dans la base de données de lecture

Dans mon modèle de lecture (supporté par une base de données relationnelle standard), j'aurai une projection avec la liste de tous les clients. De plus, j'aurai une projection avec la liste de tous les ordres.

Dans cette deuxième projection, est-il logique d'avoir une clé étrangère à la table de clé avec tous les clients? Ou est-il préférable de dénormaliser immédiatement et de stocker dans le tableau des commandes également toutes les données pertinentes des clients?

Répondre

4

Je pense que cela dépend de vos besoins. Une école de pensée est de dénormaliser les données pour tous vos modèles de vue dans la mesure où vous auriez une table par vue. À l'autre extrémité du spectre, vous pouvez conserver une base de données hautement normalisée pour soutenir vos points de vue. Vous pouvez également opter pour quelque part entre les deux. Il y a des compromis en termes de vitesse, de taille de stockage, de facilité d'utilisation et d'évolutivité dans ces décisions. Par exemple, si vous avez des centaines de modèles de vue très similaires, il peut être plus logique d'avoir un modèle de données plus normalisé. Un autre exemple pourrait être où une vue particulière génère des ordres de grandeur plus de trafic que toute autre vue - vous voudrez probablement optimiser cette vue particulière plus que les autres. Il n'y a pas vraiment de solution unique.

Que diriez-vous de cette pensée folle-faire les deux;) voir ce que vous préférez après avoir travaillé avec eux pendant un moment. Une des grandes choses à propos de CQRS est que vous avez la liberté de prendre ces décisions. Si vous combinez cela avec l'approvisionnement d'événements et la capacité de reconstruire vos vues, alors vous pouvez simplement changer d'avis plus tard :)