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

我需要将INTERACTS_WITH关系关联到Experiments

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

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

有没有更好的图形方式来做到这一点?如果没有,以上两种方法中哪一种会更好?

最佳答案

另一种方法是为每对
相互作用的基因,然后将其与两种蛋白质和
实验。


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


但是只有两个蛋白质节点之间可能发生相互作用,所以我
将不得不以编程方式对
与相互作用节点有关的蛋白质节点。


没有什么可以做的。程序员一直都在做!例如:您对一对蛋白质节点之间存在多少INTERACTS_WITH关系有什么保证?大概在创建时就要注意它。


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


想一想:如果您的INTERACTS_WITH关系需要与两个以上的节点相关联,也许您正在将一个节点建模为一种关系,对吗?

提示:请看图建模部分-最佳做法和
《学习Neo4j》(里克·范·布鲁根)(Rik Van Bruggen)一书的陷阱和《图形数据库》(Graph Databases)一书的《常见建模陷阱》(Ian Robinson,Jim Webber和Emil Eifrem)一书。这可能是有启发性的。您可以在Neo4j网站here中下载两本书。

关于neo4j - 如何将边缘/关系与包含有关该边缘的信息的节点相关联?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44450852/

10-10 14:00
查看更多