我需要在Raven数据库中存储对实体的任意引用。有时,实体是聚合根(请参阅下面的事件),有时它是值实体(请参阅下面的会话)。我目前正计划将引用存储为Lucene查询(或类似Lucene的语法)。有没有人做过这样的事情?我是走在艰难的道路上吗?
我的一些担忧是:
我在下面列出了示例文档来说明我的方案。任何想法,想法,指导或例子都将非常感激。
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"
}
修改
我想提供关于任意关系的更多细节。我们将能够扩展系统以响应系统事件并记录两个实体之间的交互。我们有比Events,Sessions和People更多的实体。该关系可以是共享链接的人或关于主题标签的推文。实际上,任意关系集合变成了一个类似图形的结构,它允许我们查看给定实体的所有〜交互。
答案 0 :(得分:2)
这是尖叫的关系设计。
最简单的方法是将Relationship作为一个对象,使其Subject和Target字段成为一个字符串数组,其中包含它引用的实际文档的ID。这样,您可以利用“包含”将它们与关系文档一起加载。无论如何,我没有看到存储Lucene查询语法如何帮助。
可能有更好的方法对此进行建模,但这实际上取决于您的业务模式以及您尝试实现的目标。
此外,您可能想要删除GUID ID,只需使用Raven的约定。