5

我们在SQL Server 2016中使用事件源。我们有全部客户产品应用程序,每个应用程序都标记为CustomerId,并在事件存储中获取单个指导行项目。这是写入事件存储guid的主要标识符。产品应用程序带有许多不同的关系事物(它们没有GUID,但是有自然键),每个客户都有多个地址,帐户,多个采购订单。写入事件存储将以我们选择的任何方式映射到关系数据库表。在数据库中,我们试图通过代理键而不是自然键来关联连接。事件源和SQL Server多个关系表

代理键可以是Guids吗,或者我们可以利用Integers(也许是Identity)来加快连接吗?

记住Write Event存储中唯一的主要标识符是来自Customer ID应用程序的Guid(带有大量表列属性的大json blob,我们想要建模),但是可以随时更改读取模型的子关系表,在Write事件商店中没有孩子Guid。

+0

CQRS的重点在于让阅读模型针对阅读进行优化。含义 - 非规范化,不,或非常少,加入,等等。最重要的是,你可以做你想做的事情,只需要关心你将用事件更新读取模型,这样聚合ID就会被发送并保存在读取端。 –

+0

这很有趣,我会在我们所有的50个关系表中保留总的Aggregate ID guid(在这种情况下,我们将把CustomerID guid放到表中),谢谢,可悲的是关于数据的书不存在sql读取模型,所以体系结构与OLTP不同;也学会了去除独特的和外来的约束,因为它们在域边应用 – AppleBook89

+0

我认为在Inmon模型中,它允许灵活地建模和关联我们想要的方式,例如,如果我想运行一个Distinct Sql函数, predone,vs在宽大的多行Kimball模型上运行独特的功能,但是,我会要求我们的团队做这两个,谢谢 – AppleBook89

回答

3

是的,你可以使用任何你在特定read model实现的需要,但你需要考虑到一个read model应该是可修复随时。因此,当read model重新构建时,它可能会使用其他代理ID,或者您只是以每次获得相同ID(我指的是Autoincrement功能)的方式实施它。

P.S.你为什么不尝试去规范化你的数据?在event sourcing中很常见,以避免在read model中使用连接而不是快速连接。