事件溯源和 SQL 服务器多个关系表
Event Sourcing and SQL Server multiple relational tables
我们在 SQL Server 2016 中使用事件源。我们有完整的客户产品应用程序,每个应用程序都带有 CustomerId
标签,并在事件存储中获得一个指南行项目。这是写入事件存储 guid 的主要标识符。产品应用程序带有许多不同的关系事物(没有 guids 但自然键)每个客户都有多个地址、帐户、多个采购订单。写入事件存储将以我们选择的任何方式映射到关系数据库 tables。在数据库中,我们尝试通过代理键而不是自然键来关联连接。
代理键可以是 Guid,还是我们可以利用整数(也许是身份)来更快地加入?
记住 Write Event 存储中唯一的主要标识符是来自 Customer ID 应用程序的 Guid(大 json blob,带有我们想要建模的一堆 table 列属性),但是子关系 tables 可以在读取模型中随时更改,在写入事件存储中没有子 Guid。
是的,您可以在特定 read model
实施中使用任何您需要的东西,但您需要考虑到 read model
应该可以随时重建 .因此,当 read model
被重新构建时,它可能会使用其他代理 ID,或者您只是以每次获得相同 ID 的方式实现它(我指的是 Autoincrement
功能) .
P.S。为什么不尝试对数据进行非规范化?在 event sourcing
中通常避免使用连接而不是在 read model
中使它们更快。
我们在 SQL Server 2016 中使用事件源。我们有完整的客户产品应用程序,每个应用程序都带有 CustomerId
标签,并在事件存储中获得一个指南行项目。这是写入事件存储 guid 的主要标识符。产品应用程序带有许多不同的关系事物(没有 guids 但自然键)每个客户都有多个地址、帐户、多个采购订单。写入事件存储将以我们选择的任何方式映射到关系数据库 tables。在数据库中,我们尝试通过代理键而不是自然键来关联连接。
代理键可以是 Guid,还是我们可以利用整数(也许是身份)来更快地加入?
记住 Write Event 存储中唯一的主要标识符是来自 Customer ID 应用程序的 Guid(大 json blob,带有我们想要建模的一堆 table 列属性),但是子关系 tables 可以在读取模型中随时更改,在写入事件存储中没有子 Guid。
是的,您可以在特定 read model
实施中使用任何您需要的东西,但您需要考虑到 read model
应该可以随时重建 .因此,当 read model
被重新构建时,它可能会使用其他代理 ID,或者您只是以每次获得相同 ID 的方式实现它(我指的是 Autoincrement
功能) .
P.S。为什么不尝试对数据进行非规范化?在 event sourcing
中通常避免使用连接而不是在 read model
中使它们更快。