CQRS - 读取端数据库的外键
CQRS - foreign key on read side database
我正在使用 CQRS 进行我的第一个项目,有些事情我不太清楚。
假设我的模型中有一些客户,每个客户都有一个订单列表。
在我的读取模型(由标准关系数据库支持)中,我将对所有客户的列表进行投影。此外,我会有一个包含所有订单列表的投影。
在第二个投影中,使用外键对所有客户的键 table 有意义吗?还是立即非规范化并在订单的 table 中存储客户的所有相关数据更好?
我想这取决于你的要求。
一种思想流派是对所有视图模型的数据进行非规范化,只要每个视图一个table。另一方面,您可以保留高度规范化的数据库来支持您的观点。您也可以选择介于两者之间的某个地方。在这些决策中,需要在速度、存储大小、易用性和可扩展性方面进行权衡。例如,如果您有数百个非常相似的视图模型,那么拥有一个更规范化的数据模型可能更有意义。另一个例子可能是某个特定视图产生的流量比任何其他视图多几个数量级——您可能希望比其他视图更多地优化这个特定视图。没有真正适合所有人的解决方案。
这个疯狂的想法怎么样 - 两者都做 ;) 在与他们合作一段时间后看看你更喜欢哪个。 CQRS 的一大优点是您可以自由地做出这些决定。如果您将其与事件溯源和重建视图的能力结合起来,那么您以后就可以改变主意了:)
我正在使用 CQRS 进行我的第一个项目,有些事情我不太清楚。
假设我的模型中有一些客户,每个客户都有一个订单列表。
在我的读取模型(由标准关系数据库支持)中,我将对所有客户的列表进行投影。此外,我会有一个包含所有订单列表的投影。
在第二个投影中,使用外键对所有客户的键 table 有意义吗?还是立即非规范化并在订单的 table 中存储客户的所有相关数据更好?
我想这取决于你的要求。
一种思想流派是对所有视图模型的数据进行非规范化,只要每个视图一个table。另一方面,您可以保留高度规范化的数据库来支持您的观点。您也可以选择介于两者之间的某个地方。在这些决策中,需要在速度、存储大小、易用性和可扩展性方面进行权衡。例如,如果您有数百个非常相似的视图模型,那么拥有一个更规范化的数据模型可能更有意义。另一个例子可能是某个特定视图产生的流量比任何其他视图多几个数量级——您可能希望比其他视图更多地优化这个特定视图。没有真正适合所有人的解决方案。
这个疯狂的想法怎么样 - 两者都做 ;) 在与他们合作一段时间后看看你更喜欢哪个。 CQRS 的一大优点是您可以自由地做出这些决定。如果您将其与事件溯源和重建视图的能力结合起来,那么您以后就可以改变主意了:)