2016-01-22 44 views
0

應用領域驅動設計我閱讀了關於事件採購的內容。這節省了一系列事件。數據庫的事件表有以下欄目:持久化事件時的身份證複製(事件採購)

EventID, EventDate, AggregateId, EventData 

我能救產品,類別和爲了在這個表事件。但是aggregateId可能會被複制。在這種情況下,我將獲得訂單事件作爲產品事件。

如何防止系統ID重複。

回答

0

難道你不能讓AggregateID成爲類型和id的組合鍵嗎?所以你可以有Product:123456Category:123456?或者你可以添加另一個聚合類型的列,如果這是一個更好的解決方案。

+1

我會添加另一列。 – plalx

4

根據定義,聚合根具有全局唯一標識符。如果您正在進行DDD(並且我認爲您自從使用DDD標記問題),並且您使用事件源採集來捕獲聚合根的事件流,那麼您需要找到確保跨不同聚合類型的唯一性的方法。

您可以生成一個GUID或使用其他人建議的某種組合鍵。

+0

另請參見:命名的UUID。 – VoiceOfUnreason

0

除了使用客戶端生成的GUID之外,我還是建議在表中添加幾列。

EventID, EventType, EventDate, AggregateType, AggregateId, MetaData, EventData 

我會添加事件類型和聚合類型的原因有幾個。 他們將支持底層類型的重新水合,在表上允許額外的索引,並且表示系統中相當重要的信息。最後,它可能會簡化表上的讀取查詢,避免一些連接。

元數據將允許跟蹤用戶和/或源事件信息。

即使這增加了信息使之成爲可能我會避免使用複合鍵,堅持與GUID鍵。

如果您不能使用客戶端GUID,那麼將EventID上的newsequentialguid()作爲主鍵即可。