Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何将边/关系与包含该边信息的节点关联?_Neo4j_Cypher_Data Modeling_Graph Databases - Fatal编程技术网

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

Neo4j 如何将边/关系与包含该边信息的节点关联?,neo4j,cypher,data-modeling,graph-databases,Neo4j,Cypher,Data Modeling,Graph Databases,我必须将生物相互作用存储在Neo4j数据库中。例如,考虑一个场景,我有两种类型的节点,即代码>蛋白质 > 实验>代码>以及关系>代码>交互动作> >。这种关系以(蛋白质)-[与]-(蛋白质)相互作用]的形式存在。现在,与相互作用也与实验有关,因为这种生物相互作用是在该实验中观察到的 我需要将与的交互关系与实验联系起来 实现这一点的一种方法是将所有此类实验的ID存储在与关系交互\u的数组类型属性中。但这就像将一个实体的主键作为另一个实体的外键存储在关系数据库中一样,我希望避免这种情况 另一种方法

我必须将生物相互作用存储在Neo4j数据库中。例如,考虑一个场景,我有两种类型的节点,即代码>蛋白质<代码> > <代码>实验>代码>以及关系>代码>交互动作> <代码> >。这种关系以
(蛋白质)-[与]-(蛋白质)相互作用]
的形式存在。现在,
相互作用也与
实验
有关,因为这种生物相互作用是在该实验中观察到的

我需要将
的交互关系与
实验
联系起来

实现这一点的一种方法是将所有此类
实验的ID存储在
关系交互\u的数组类型属性中。但这就像将一个实体的主键作为另一个实体的外键存储在关系数据库中一样,我希望避免这种情况

另一种方法是为每对相互作用的基因创建一个
相互作用
节点,然后将其与两个
蛋白质
实验
关联。但是,只有两个
蛋白质
节点之间才可能进行交互,因此我必须以编程方式限制与
交互
节点相关的
蛋白质
节点的数量。这种方法也不好,因为
交互实际上是一种关系,也许将其建模为节点不是一个好主意

有没有更好的图形化方法来实现这一点?如果没有,以上两种方法中哪一种更好

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

我相信这是一个很好的方法来解决你的问题

但只有两个蛋白质节点之间才可能发生相互作用,所以我 必须以编程方式对 与交互节点相关的蛋白质节点

没什么可做的。程序员总是这样做!例如:对于一对蛋白质节点之间存在多少相互作用和关系,您有什么保证?也许你在创作的时候就注意到了

这种方法也不好,因为与的交互实际上是一个 关系,也许将其建模为 节点

想想看:如果你的
关系交互需要与两个以上的节点关联,那么你可能是在将一个节点建模为一个关系,对吗

提示:查看图形建模-最佳实践和
《学习Neo4j》(Rik Van Bruggen著)一书中的陷阱以及《图形数据库》(Ian Robinson、Jim Webber和Emil Eifrem著)一书中的常见建模陷阱一节中的陷阱。这是很有启发性的。你可以在Neo4j网站上下载这两本书。

我建议(I:Interaction)要确保一次交互中只有两种蛋白质,请相信你的用户界面。此外,您还可以进行批量查询,并向创建交互的用户作出反应(报告、电子邮件)(前提是您存储了交互)