如何将边/关系与包含该边的信息的节点相关联?

时间:2017-06-09 06:34:37

标签: neo4j cypher data-modeling graph-databases

我必须在Neo4j数据库中存储生物相互作用。例如,考虑一种情况,我有两种类型的节点Experiment& INTERACTS_WITH和关系(Protein)-[INTERACTS_WITH]-(Protein)。该关系以INTERACTS_WITH存在。现在,Experiment也与INTERACTS_WITH有关,因为在该实验中观察到了这种生物相互作用。

我需要将Experiments关系与Experiments相关联。

实现此目的的一种方法是将所有此类INTERACTS_WITH的ID存储在Interaction关系的数组类型属性中。但这就像将实体的主键存储为关系数据库中另一个实体的外键,我想避免这种情况。

另一种方法是为每对相互作用基因创建一个Proteins节点,然后将其与两个ExperimentsProtein相关联。但是,只能在两个Protein节点之间进行交互,因此我必须以编程方式对与Interaction节点相关的INTERACTS_WITH节点数量进行约束。这种方法也不好,因为{{1}}实际上是一种关系,也许将它建模为一个节点并不是一个好主意。

有更好的图形化方法吗?如果没有,上述哪两种方法会更好?

1 个答案:

答案 0 :(得分:2)

  

另一种方法是为每对创建一个Interaction节点   相互作用的基因,然后将它与两种蛋白质相关联   实验

我相信这是解决问题的一种非常好的方法。

  

但是两个蛋白质节点之间只能进行交互,所以我   将不得不以编程方式对数量进行约束   与交互节点相关的蛋白质节点。

无所事事。程序员一直这样做!例如:您对一对Protein节点之间存在多少INTERACTS_WITH关系有什么保证?你可能会在创作时关注它。

  

这种方法也不好,因为INTERACTS_WITH实际上是一个   关系,也许将它建模为一个不是一个好主意   节点

考虑一下:如果您的INTERACTS_WITH关系需要与两个以上的节点相关,那么您可能正在将节点建模为关系,对吗?

提示:请参阅图表建模 - 最佳做法和部分 学习Neo4j(Rik Van Bruggen)和“图形数据库”(由伊恩·罗宾逊,Jim Webber和Emil Eifrem撰写)的常见建模陷阱一节中的陷阱。这可以启发。您可以在Neo4j网站here下载这两本书。