Domain driven design 持久化事件时的ID重复(事件源)
应用领域驱动设计,我读到了关于事件源的内容。这样可以保存一系列事件。数据库的事件表包含以下列:Domain driven design 持久化事件时的ID重复(事件源),domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,应用领域驱动设计,我读到了关于事件源的内容。这样可以保存一系列事件。数据库的事件表包含以下列: EventID, EventDate, AggregateId, EventData 我可以在此表中保存产品、类别和订单事件。但是,aggregateId可能重复。在这种情况下,我将订单事件作为产品事件 如何防止系统Id重复。您不能将AggregateID设置为类型和Id的复合键吗?那么您可以拥有产品:123456和类别:123456?或者,如果这是一个更好的解决方案,您可以为聚合类型添加另一列。您
EventID, EventDate, AggregateId, EventData
我可以在此表中保存产品、类别和订单事件。但是,aggregateId
可能重复。在这种情况下,我将订单事件作为产品事件
如何防止系统Id重复。您不能将AggregateID设置为类型和Id的复合键吗?那么您可以拥有
产品:123456
和类别:123456
?或者,如果这是一个更好的解决方案,您可以为聚合类型添加另一列。您不能将AggregateID设置为类型和id的复合键吗?那么您可以拥有产品:123456
和类别:123456
?或者,如果这是一个更好的解决方案,您可以为聚合类型添加另一列。根据定义,聚合根具有全局唯一标识符。如果您正在进行DDD(我假设您正在进行DDD,因为您用DDD标记了问题),并且您正在使用事件源来捕获聚合根的事件流,那么您需要找到一种方法来确保不同聚合类型之间的唯一性
您可以生成GUID或使用其他人建议的某种复合键。根据定义,聚合根具有全局唯一标识符。如果您正在进行DDD(我假设您正在进行DDD,因为您用DDD标记了问题),并且您正在使用事件源来捕获聚合根的事件流,那么您需要找到一种方法来确保不同聚合类型之间的唯一性
您可以生成GUID,也可以像其他人建议的那样使用某种复合键。除了使用客户端生成的GUID之外,我建议在表中添加一些列
EventID, EventType, EventDate, AggregateType, AggregateId, MetaData, EventData
出于几个原因,我将添加事件类型和聚合类型。
它们将支持底层类型的再水化,允许在表上添加索引,并表示系统中相当重要的信息。最后,它可能简化了表上的读取查询,从而避免了几个连接
元数据将允许跟踪用户和/或源事件信息
即使这增加了信息,使我可以避免使用复合键,但还是要坚持使用GUID键
如果您不能使用客户端GUID,那么EventID上的newsequentialguid()作为主键是一种方法。除了使用客户端生成的GUID之外,我建议在表中添加一些列
EventID, EventType, EventDate, AggregateType, AggregateId, MetaData, EventData
出于几个原因,我将添加事件类型和聚合类型。
它们将支持底层类型的再水化,允许在表上添加索引,并表示系统中相当重要的信息。最后,它可能简化了表上的读取查询,从而避免了几个连接
元数据将允许跟踪用户和/或源事件信息
即使这增加了信息,使我可以避免使用复合键,但还是要坚持使用GUID键
如果无法使用客户端GUID,则EventID上的newsequentialguid()作为主键是可行的。我将添加另一列。我将添加另一列。另请参见:命名UUID。另请参见:命名UUID。