Как создать логические ограничения для иерархического дерева в Neo4j - PullRequest
0 голосов
/ 06 июня 2018

Я создал иерархическое дерево для представления организационной структуры компании на Neo4j, как показано на рисунке ниже.

Иерархическое дерево

Каждый узел можетУ меня не более одного входящего «Управление отношениями», и сотрудник не может управлять кем-то, кто является его иерархическим руководителем.

Я видел, что в Neo4j есть система ограничений, но у меня все еще есть две проблемы без ответов.

  • Как запретить узлу Worker6 иметь отношения Управление с узлом Worker1, например?
  • Как проверить это ограничение целостности при импорте с CSV?

Должен ли я использовать TransactionEventHandler для этого?

1 Ответ

0 голосов
/ 08 июня 2018

Я нашел способ создания логических ограничений для моего иерархического дерева.

Когда я хочу импортировать файл с 50 000 связей, я делаю этот запрос:

LOAD CSV WITH HEADERS FROM "file:///dump.csv" AS row
MERGE (a:Person {name:row.person1Name})
MERGE(b:Person {name:row.person2Name})
FOREACH (t in CASE WHEN NOT EXISTS((a)-[*]->(b)) THEN [1] ELSE [] END |
    MERGE (a)-[pr:Managed]->(b))

С этимЗапрос Я могу проверить целостность своего дерева.

Моя самая большая проблема по-прежнему медлительность запроса: 3m20 для 50 000 отношений

...