CQRS - 读取端数据库上的外键

时间:2016-08-23 16:20:41

标签: foreign-keys relational-database domain-driven-design cqrs

我正在使用CQRS开展我的第一个项目,有些事情对我来说并不是很清楚。

假设我的模型中有一些客户和每个客户都有一个订单列表。

在我的阅读模型中(由标准关系数据库支持),我将对所有客户的列表进行投影。此外,我将对所有订单列表进行投影。

在第二个投影中,与所有客户一起拥有密钥表的外键是否有意义?或者它是否更好地立即归一化并存储在订单表中以及客户的所有相关数据?

1 个答案:

答案 0 :(得分:4)

我认为这取决于您的要求。

有一种想法是对所有视图模型的数据进行非规范化,只要你有一个每表一个表。另一方面,您可以保留一个高度规范化的数据库来支持您的视图。你也可以选择介于两者之间的某个地方。在这些决策中,在速度,存储大小,易用性和可扩展性方面存在权衡。例如,如果您有数百个非常相似的视图模型,那么拥有更规范化的数据模型可能更有意义。另一个例子可能是一个特定视图产生的数据量比任何其他视图多出几个数量级 - 您可能希望比其他视图更优化此特定视图。实际上并没有一个通用的解决方案。

这个疯狂的想法怎么样 - 做两件事;)看了一会儿之后你喜欢哪个。 CQRS的一大优点是您可以自由地做出这些决定。如果您将此与事件采购和重建视图的能力结合起来,那么您可以稍后改变主意:)