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?
Ich schlage vor, (i: Interaktion) <- [: IDK] - (p2: Protein) (i: Interaktion) <- [: IDK] - (p1: Protein) (e: Experiment) < - [: SEEN_IN] - (i: Interaktion) –
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). –