繁体   English   中英

Neo4j对象图映射如何实现关系

[英]Neo4j Object Graph Mapping how to implement relationships

我正在为Neo4j开发对象图映射器(OGM)。 它可以帮助我更好地了解Neo4j的工作流程。 我在实现对象关系时遇到一个大问题。

我使用OGM本身的方法是根据索引创建“模型”。 因此,索引“用户”对应于类“用户”。 所有属性均按预期方式工作。在关系方面,我尝试实现与ORM关系类似的方法。 但是,SQL和Graph数据库之间的一大区别是,图没有静态表。 关系端点的“类型”可以在节点之间变化。 例如,如果我有一个“喜欢”关系,则可以转到节点类“ Book”,“ Movie”。 我不能仅以创建SQL的相同方式创建关系:(relationshipName,relationshipType,fkID,modelName)。

我应该如何解决这个问题? 什么是更好的设计选择? 是否应该基于节点的索引自动查找类? 我应该忽略没有相同索引的对象吗?

我现在实现它的方式是(relationshipName,relationshipType,relationshipDirection,modelName)。 用法示例为(“ likedBy”,“ likes”,“ in”,“ User”),(“ likes”,“ likes”,“ out”,“ Thing”)。

什么时候要建立一个OGM,我也在努力。 我认为它们至少是两种需要注意的约束。

第一种约束是您描述的约束,我们将其称为“属性模式”。 这将为元素(即节点或关系)上的属性设置架构。 使用此功能,您可以在特定属性上建立索引,为节点提供标签,基于特定属性施加唯一性约束,并可以对放置的数据元素施加软约束。 像Date属性应该在1-31之间。 Neo4j目前不支持除唯一性约束以外的任何约束。 因此,必须在OGM级别上强制执行这些操作。

所需的另一种约束是结构模式。 这将对元素(即节点或关系)施加一组结构约束。 这些约束集将确保元素在连接到其邻域元素时遵循所有条件。 在这些约束集合中,您可以定义诸如以下关系的约束:类型为LIKES的关系可以将标签为USER的节点连接到标签为BOOK or MUSIC or (FOOD and DRINK)节点。 类似地,可以把象一个节点上的约束:具有标记节点USER需要被连接到一个ATLEAST与标签另一节点USER使用类型的出射关系Friend

您可以使用密码语言的MATCH模式表达这种约束。 我目前正在开发此OGM的第一阶段,这是我为node.js开发的。 这是我目前对我将如何解决该问题的理解。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM