Domain driven design 如何在RavenDB中存储对任意实体的引用?

Domain driven design 如何在RavenDB中存储对任意实体的引用?,domain-driven-design,ravendb,Domain Driven Design,Ravendb,我需要在Raven数据库中存储对实体的任意引用。有时该实体是聚合根(请参见下面的事件),有时则是值实体(请参见下面的会话)。我目前正计划将引用存储为Lucene查询(或类似Lucene的语法)。有人这样做过吗?我是否在走一条艰难的道路 我关注的一些问题是: 值实体不太可能提供标识符,我可以期望可靠地引用值实体吗 单个实体应该不知道(与之分离)任意关系基础设施,从复杂对象图推断查询的最佳方法是什么 将关系限制为仅聚合根(并防止引用值实体)可以简化问题,但这需要我重新构造事件/会话文档。我希望这两

我需要在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"
}
编辑


我想就任意关系提供更多细节。我们将能够扩展系统以响应系统事件并记录两个实体之间的交互。我们拥有的实体比事件、会话和人员多得多。这种关系可能是一个人共享一个链接或一条关于标签的tweet。实际上,任意关系集合变成了一个类似于图形的结构,使我们能够看到给定实体的所有交互。

这是一种关系设计

实现这一点的最简单方法是将关系设置为对象,并将其主题和目标字段设置为字符串数组,其中包含它引用的实际文档的ID。通过这种方式,您可以利用include将它们与关系文档一起加载。但是,我看不出存储Lucene查询语法在这里有什么帮助

也许有更好的方法来建模,但这实际上取决于你的商业模式和你试图实现的目标


此外,您可能希望去掉GUID ID,只需使用Raven的约定。

我可能会也可能不会对Raven执行Lucene查询。我希望Lucene语法为我带来的是将DocumentId(用于聚合根)和值实体的路径存储在单个值中的能力。我喜欢你建议使用Includes。Re:这种令人尖叫的关系设计-您可能是对的,但是这个解决方案的核心领域(事件/会话)非常适合面向文档的范例。真正让人感觉有关系的是想要跟踪任意实体之间的关系这一单独的关注点。我将更新问题,以提供更多详细信息。