我必须将生物相互作用存储在Neo4j数据库中。例如,考虑一个场景,其中我有两种类型的节点:Protein
和Experiment
以及关系INTERACTS_WITH
。关系以(Protein)-[INTERACTS_WITH]-(Protein)
的形式存在。现在,INTERACTS_WITH
也与Experiment
有关,因为在该实验中观察到了这种生物相互作用。
我需要将INTERACTS_WITH
关系关联到Experiments
。
实现此目的的一种方法是将所有此类Experiments
的ID存储在INTERACTS_WITH
关系的数组类型属性中。但这就像将实体的主键存储为关系数据库中另一个实体的外键一样,我想避免这种情况。
另一种方法是为每对相互作用的基因创建一个Interaction
节点,然后将其与两个Proteins
和Experiments
关联。但是只能在两个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/