2017-06-09 7 views
3

Ich muss biologische Interaktionen in einer Neo4j-Datenbank speichern. Betrachten Sie zum Beispiel ein Szenario, in dem ich zwei Arten von Knoten habe: & Experiment und eine Beziehung INTERACTS_WITH. Die Beziehung existiert als (Protein)-[INTERACTS_WITH]-(Protein). Nun bezieht sich die INTERACTS_WITH auch auf Experiment, weil diese biologische Wechselwirkung in diesem Experiment beobachtet wurde.Wie kann ich eine Kante/Beziehung mit einem Knoten verknüpfen, der Informationen über diese Kante enthält?

Ich muss die INTERACTS_WITH Beziehung auf die Experiments beziehen.

Eine Möglichkeit, dies zu erreichen, kann darin bestehen, die ID eines solchen Experiments in einer Array-Typ-Eigenschaft der INTERACTS_WITH-Beziehung zu speichern. Aber das ist genau so, als würde man den Primärschlüssel einer Entität als Fremdschlüssel einer anderen Entität in der relationalen Datenbank speichern, die ich vermeiden möchte.

Ein anderer Weg kann sein, einen Interaction Knoten für jedes Paar von wechselwirkenden Genen zu erstellen und es dann mit den zwei Proteins und Experiments in Beziehung zu setzen. Aber eine Interaktion ist nur zwischen zwei Protein Knoten möglich, daher muss ich eine Beschränkung auf die Anzahl der Protein Knoten setzen, die sich auf einen Interaction Knoten beziehen. Dieser Ansatz ist auch nicht gut, weil INTERACTS_WITH eigentlich eine Beziehung ist und es vielleicht keine gute Idee sein wird, sie als Knoten zu modellieren.

Gibt es eine bessere, grafische Möglichkeit, dies zu tun? Wenn nicht, welcher der beiden oben genannten Ansätze wird besser sein?

+0

Ich schlage vor, (i: Interaktion) <- [: IDK] - (p2: Protein) (i: Interaktion) <- [: IDK] - (p1: Protein) (e: Experiment) < - [: SEEN_IN] - (i: Interaktion) –

+0

Um sicherzustellen, dass nur zwei Proteine ​​in einer Interaktion sind, vertraue deiner UI. Sie können auch Stapelabfragen erstellen und auf den Benutzer reagieren (Bericht, E-Mail), der die Interaktion erstellt hat (sofern Sie sie speichern). –

Antwort

2

Eine andere Möglichkeit kann sein, ein Interaktions Knoten für jedes Paar von zusammenwirkenden Gene zu erstellen und beziehen sich dann auf die beiden Proteine ​​und die Experimenten.

Ich glaube, dass es ein sehr guter Ansatz ist, um Ihr Problem zu lösen.

Aber eine Interaktion möglich ist, zwischen zwei Protein-Knoten nur, so ich programmatisch eine Beschränkung für die Anzahl der Protein-Knoten, die zu einem Interaktionsknoten beziehen setzen müssen.

Es gibt nichts zu tun. Programmierer machen es die ganze Zeit! Zum Beispiel: Welche Garantien haben Sie darüber, wie viele INTERACTS_WITH-Beziehungen zwischen einem Proteinknotenpaar bestehen? Wahrscheinlich kümmerst du dich zur Erstellungszeit darum.

Dieser Ansatz ist auch nicht gut, weil INTERACTS_WITH eigentlich eine Beziehung ist und vielleicht wird es nicht eine gute Idee, es als Knoten zu modellieren.

Denk darüber nach: Wenn Ihre INTERACTS_WITH Beziehung vielleicht mit mehr als zwei Knoten bezogen werden muss Sie einen Knoten als eine Beziehung Modellierung, nicht wahr?

Tipp: Schauen Sie in der Modellierung Abschnitt Graph nehmen - Best Practices und Fallen des Buches Learning Neo4j (von Rik Van Bruggen) und im Abschnitt Modellierungs Pitfalls des Buches von Graph-Datenbanken (durch Ian Robinson, Jim Webber & Emil Eifrem). Dies kann aufschlussreich sein. Sie können die beiden Bücher in der Neo4j-Site here herunterladen.

Verwandte Themen