我有需要在我的Raven數據庫中存儲對實體的任意引用。有時實體是一個聚合根(參見下面的事件),有時候它是一個價值實體(參見下面的會話)。我目前正在計劃將引用存儲爲Lucene查詢(或類似Lucene的語法)。有沒有人做過類似的事情?我正走向一條艱難的道路嗎?如何在RavenDB中存儲對任意實體的引用?
我的一些顧慮是:
- 價值實體不可能提供標識符,我可以期待可靠的參考價值實體?
- 單個實體應該不知道(去耦合)任意關係基礎結構,從複雜對象圖推斷查詢的最佳方式是什麼?
- 將關係限制爲僅聚合根(並阻止對值實體的引用)可以簡化問題,但這需要我重新構建事件/會話文檔。我希望這兩個系統保持分離(關注一個不應該影響另一個)。
我已經在下面包含示例文檔來說明我的方案。任何想法,想法,指導或例子將非常感激。
Events Collection
{
Id: 「30f6...54a7」,
Title: 「Annual Meeting」
Sessions: [
{
Code: 「COM001」,
Title: 「Opening Ceremony」
},
{
Code: 「TEC201」,
Title: 「Intermediate Tech」
}
]
}
People Collection
{
Id: "45a8...f209",
Name: "Chad"
}
Arbitrary Relationships Collection
{
Id: 「b613...8ebb」,
SubjectEntityQuery: "People.Id:45a8...f209",
TargetEntityQuery: 「Events.Id:30f6...54a7.Sessions,Code:COM001」,
Action: "Attended Session",
Story: "Chad attended the Opening Ceremony session"
}
編輯
我想給上的任意關係的更多細節。我們將有能力擴展系統以響應系統事件並記錄兩個實體之間的交互。我們擁有比事件,會話和人員更多的實體。這種關係可能是一個人共享一個關於哈希標籤的鏈接或推文。實際上,Arbitrary Relationships集合變成了一個類似圖形的結構,它允許我們看到給定實體的所有交互。
我可能會也可能不會實際執行鍼對Raven的Lucene查詢。我希望Lucene語法購買的是能夠將DocumentId(用於聚合根)和價值實體的路徑存儲在單個值中。我喜歡你的建議使用包含。 Re:這種尖銳的關係設計 - 你可能是正確的,但是這個解決方案的核心領域(事件/會話)很好地適合面向文檔的範例。感覺關係型是需要任意實體之間的跟蹤關係的獨立關注。我會更新問題以提供更多詳細信息。 – CodeChef