#neo4j #uml #cypher #relationships
#neo4j #uml #cypher #отношения
Вопрос:
Я должен решить следующую проблему:
У меня есть 3 узла:
(n:Node)-[r:HAS_ATTRIBUTE]->(a:Attr {name ="xxxx"}) ->(t:Type)
все a:Attr
узлы имеют: ассоциации перевода:
(a) -> [:_HAS_TRANSLATION] -> (tr1:Translation {name : "yyyy", lang ="fr"})
(a) -> [:_HAS_TRANSLATION] -> (tr2:Translation {name : "kkkk", lang ="de"})
Теперь я хотел бы использовать отношения для моделирования одних и тех же вещей:
(n:Node)-[r:HAS_ATTRIBUTE {name ="xxxx"}]->(t:Type)
Как я могу добавить перевод в свойство HAS_ATTRIBUTE
name, конечно, без добавления нового _HAS_ATTRIBUTE
в n:Node
?
Мне нужно иметь такую вещь, как ОТНОШЕНИЯ в ОТНОШЕНИЯХ…
Ответ №1:
Надеюсь, я понял ваш вопрос.
Рассмотрим промежуточный узел, например
(n:Node)-[:HAS_ATTRIBUTE]->(attr:Attribute {name: "X")),
(attr)-[:HAS_TRANSLATION]->(tr1:Translation),
(attr)-[:HAS_TYPE]->(t:Type)
…или что-то в этом роде. Обратите внимание, что «attr» будет новым промежуточным узлом (очевидно, вы можете называть отношения как угодно).
Если вам нужно быть более конкретным (например, экземпляры атрибутов), вы всегда можете заменить «attr» на что-то вроде «specificAttr» и указать «attr» на «attr».
Промежуточные узлы — отличный способ решения подобных вопросов моделирования, когда вам нужно более полно определить отношения.
Комментарии:
1. Да, но это именно тот первоначальный вопрос, где промежуточный узел уже присутствует. И моя цель — удалить промежуточный узел….
Ответ №2:
Если я правильно вас понимаю, вы хотите иметь только 2 узла и одно отношение, верно?
Для достижения этого вы можете просто сделать
(n:Node)-[r:HAS_ATTRIBUTE]->
(a:Attr {name ="xxxx", lang_fr="yyyy", lang_de="zzzz"})->
(t:Type)
Комментарии:
1. Нет, это не решает проблему, потому что мне нужно поддерживать отдельный перевод, каждый из которых имеет владельца
2. В этом случае вам действительно нужен этот промежуточный узел.
3. И, ИМХО, возможность добавлять отношения к отношениям была бы отличным улучшением для Neo4j.
4. Тогда это уже не график.
5. @PaoloDiPietro Можете ли вы пояснить, что вы подразумеваете под «отдельным переводом, каждый из которых имеет владельца»?