我必须在Neo4j数据库中存储生物相互作用。例如,考虑一种情况,我有两种类型的节点Experiment
& INTERACTS_WITH
和关系(Protein)-[INTERACTS_WITH]-(Protein)
。该关系以INTERACTS_WITH
存在。现在,Experiment
也与INTERACTS_WITH
有关,因为在该实验中观察到了这种生物相互作用。
我需要将Experiments
关系与Experiments
相关联。
实现此目的的一种方法是将所有此类INTERACTS_WITH
的ID存储在Interaction
关系的数组类型属性中。但这就像将实体的主键存储为关系数据库中另一个实体的外键,我想避免这种情况。
另一种方法是为每对相互作用基因创建一个Proteins
节点,然后将其与两个Experiments
和Protein
相关联。但是,只能在两个Protein
节点之间进行交互,因此我必须以编程方式对与Interaction
节点相关的INTERACTS_WITH
节点数量进行约束。这种方法也不好,因为{{1}}实际上是一种关系,也许将它建模为一个节点并不是一个好主意。
有更好的图形化方法吗?如果没有,上述哪两种方法会更好?
答案 0 :(得分:2)
另一种方法是为每对创建一个Interaction节点 相互作用的基因,然后将它与两种蛋白质相关联 实验
我相信这是解决问题的一种非常好的方法。
但是两个蛋白质节点之间只能进行交互,所以我 将不得不以编程方式对数量进行约束 与交互节点相关的蛋白质节点。
无所事事。程序员一直这样做!例如:您对一对Protein节点之间存在多少INTERACTS_WITH关系有什么保证?你可能会在创作时关注它。
这种方法也不好,因为INTERACTS_WITH实际上是一个 关系,也许将它建模为一个不是一个好主意 节点
考虑一下:如果您的INTERACTS_WITH
关系需要与两个以上的节点相关,那么您可能正在将节点建模为关系,对吗?
提示:请参阅图表建模 - 最佳做法和部分 学习Neo4j(Rik Van Bruggen)和“图形数据库”(由伊恩·罗宾逊,Jim Webber和Emil Eifrem撰写)的常见建模陷阱一节中的陷阱。这可以启发。您可以在Neo4j网站here下载这两本书。