2016-05-24 2 views
0

Я изучаю Neo4j и в настоящее время просматриваю сценарий, о котором я думаю. У меня есть 3 продукта P1, P2, P3. P1 и P2 являются автономными продуктами. P3 - это адаптер, который помогает вам подключать P1 и P2.Как смоделировать два узла, связанных через третий узел в neo4j?

Я думал о P1-[connects_to]-P2, с P3 как свойство отношений connects_to, но тогда как я сохранил свойства P3? , если я создаю все три продукта в качестве узлов и делаю P1-[connects_to]-P3 и P2-[connects_to]-P3, это не является репрезентативным доменом. Как моделировать это в Neo4j?

+0

адаптер с теми же свойствами соединяет только два продукта вместе? Или могут быть связаны и другие продукты вместе? –

+0

может использоваться для соединения других продуктов вместе ... – aaaaarrrgghhh

ответ

0

Я думаю, что вы можете использовать аналогичную модель:

(P1)-[:connected_through]->(A:Adapter)<-[:connected_through]-(P2) 

(A)-[:type_is]->(P3) 

enter image description here

1
  1. можно также хранить свойства на отношениях

  2. Почему создание Р3 в качестве узла и соединяющих его с другими не представителем домена?

  3. connects_to - очень плохой не описательный тип отношения, найдите что-то в своем домене, которое лучше выражает эти отношения.

+0

Если P1 и P2 соединяются с P3, это не обязательно означает, что P1 подключается к P2, поскольку эти соединения могут быть подключены к другому продукту (возможно, P4). Следовательно, он не является репрезентативным для домена. Не считайте, что мой пример действительно не выразил этого, поэтому ваш вопрос вполне обоснован. – aaaaarrrgghhh

+0

(1) Угадайте, я пытался не иметь P3 в качестве отношения, так как он может использоваться для соединения многих продуктов вместе (например, подумайте о винте и гайке). (3) «Я могу подключить P1 и P2, но вам нужен P3», - говорит он, поэтому я выбрал его. Было бы здорово, если бы вы могли понять, почему это плохо, и, возможно, это даст мне направление, чтобы думать! – aaaaarrrgghhh

1

Have P1, P2 и P3 в качестве узлов (так как вы сказали, все три из них являются продукты) и поставить P3 с другой этикеткой, которая идентифицирует его в качестве соединительного узла.

+0

Интересная идея ... Возможно, я мог бы хранить свойства «От» и «Кому», чтобы выразить, какие два продукта были связаны этим экземпляром P3? Это плохая идея? – aaaaarrrgghhh

+0

Если P3 всегда соединяет не более одной пары узлов (например, P1 и P2), используйте направленное соотношение (P1) -> (P3) -> (P2). Позже в ваших запросах вы можете легко определить, какие узлы входят в P3 и которые уходят из P3. Однако, если P3 может подключать много пар узлов, вам придется пересмотреть дизайн, так как будет трудно точно определить, к каким двум узлам подключается P3 –