事件溯源 SQL 填充父子 Table
Event Sourcing SQL Populate Parent and Child Table
跟进问题
CQRS Read Model Design when Event Sourcing with a Parent-Child-GrandChild… relationship:
我们在 SQL Server 2016 中使用事件溯源,例如:家具公司。
(1) 我们有一个父子 table。说一个 FurnitureDescriptionTable,(Parent table- 所有家具项目的描述)和 FurnitureOrders(Child - 多个客户订单,指的是 FurnitureDescription table)。这些之间的连接列应该是 SQL 中的 Guid 还是 Integer Identity?
(2)如果是Guid,谁生成Guid,API还是SQL?有什么原因吗?
为 primary/foreign 键选择您需要的类型是 RDBMS 世界中的一个已知问题。简单的谷歌搜索会有所帮助。但仍然:
引导通常在应用程序端完成。当命令处理程序可以生成完整的域对象(包括身份)时,此选项很受欢迎(因为您指的是 CQRS)。否则,您需要有一个唯一的身份生成器,这可能很重要,但在某些数据库中仍然可行,例如使用 Oracle 序列。
数据库生成的 ID 通常选择数字。然后,只有当行被插入到 table 时,新的 id 才会被知道。对于事件溯源场景,这不是一个选项,因为您只会在读取端插入,但对象是在写入端创建的。
跟进问题 CQRS Read Model Design when Event Sourcing with a Parent-Child-GrandChild… relationship:
我们在 SQL Server 2016 中使用事件溯源,例如:家具公司。
(1) 我们有一个父子 table。说一个 FurnitureDescriptionTable,(Parent table- 所有家具项目的描述)和 FurnitureOrders(Child - 多个客户订单,指的是 FurnitureDescription table)。这些之间的连接列应该是 SQL 中的 Guid 还是 Integer Identity?
(2)如果是Guid,谁生成Guid,API还是SQL?有什么原因吗?
为 primary/foreign 键选择您需要的类型是 RDBMS 世界中的一个已知问题。简单的谷歌搜索会有所帮助。但仍然:
引导通常在应用程序端完成。当命令处理程序可以生成完整的域对象(包括身份)时,此选项很受欢迎(因为您指的是 CQRS)。否则,您需要有一个唯一的身份生成器,这可能很重要,但在某些数据库中仍然可行,例如使用 Oracle 序列。
数据库生成的 ID 通常选择数字。然后,只有当行被插入到 table 时,新的 id 才会被知道。对于事件溯源场景,这不是一个选项,因为您只会在读取端插入,但对象是在写入端创建的。