【发布时间】:2017-06-09 19:49:18
【问题描述】:
我必须将生物相互作用存储在 Neo4j 数据库中。例如,考虑一个场景,我有两种类型的节点,Protein & Experiment 和一个关系 INTERACTS_WITH。该关系以(Protein)-[INTERACTS_WITH]-(Protein) 存在。现在,INTERACTS_WITH 也与Experiment 相关,因为在该实验中观察到了这种生物相互作用。
我需要将INTERACTS_WITH 关系与Experiments 关联起来。
实现此目的的一种方法是将所有此类Experiments 的ID 存储在INTERACTS_WITH 关系的数组类型属性中。但这就像将一个实体的主键存储为关系数据库中另一个实体的外键一样,我想避免这种情况。
另一种方法是为每对相互作用的基因创建一个Interaction节点,然后将其与两个Proteins和Experiments相关联。但是只能在两个Protein 节点之间进行交互,因此我必须以编程方式限制与Interaction 节点相关的Protein 节点的数量。这种方法也不好,因为INTERACTS_WITH 实际上是一种关系,将其建模为节点可能不是一个好主意。
有没有更好的图形方式来做到这一点?如果不是,以上两种方法哪个更好?
【问题讨论】:
-
我提议 (i:Interaction)
-
要确保交互中只有 2 个蛋白质,请相信您的 UI。此外,您可以进行批量查询,并对创建交互的用户做出反应(报告、电子邮件)(前提是您存储了它)
标签: neo4j cypher data-modeling graph-databases