Как я должен представлять задачи и подзадачи в neo4j? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь выбрать хорошую модель данных для представления задач и подзадач.Это проблема, состоящая из двух частей:

Во-первых, я хочу иметь возможность получить строку задач (task1) - [: NEXT] -> (task2) - [: NEXT] -> (task3) и т. Д.И я хочу иметь возможность собирать их, начиная с первого, и отображать их по порядку.Шифр достаточно прост ... что-то вроде

p = match(first:Task)-[:NEXT*]->(others:Task)
return o.name, o.instructions
order by length(p) // or something like this, probably with a union to get both the first task and other tasks in the same output

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

Было бы неплохо заставить шифр возвращать пошаговый список (например, 1, 1.1, 1.1.1, 2 и т. д.), но я бына самом деле одинаково счастливы только с 1, 2, 3 ... n.

Я искал и нигде не видел ясного решения.Вот картина того, что я представляю.Любые указания, мысли или ссылки высоко ценится.

Tasks numbered kind of how I'd like to be able to retrieve them

1 Ответ

0 голосов
/ 29 мая 2018

Я собираюсь повторно использовать мой ответ на другой вопрос, но это действительно лучшее решение этой проблемы.Ваша проблема в том, что ваша схема начинает разваливаться, когда у вас есть несколько различных, но пересекающихся путей.Таким образом, вы пытаетесь испортить ваши данные, чтобы попытаться разрешить возникшие конфликты.

1) Для каждой цепочки создайте узел, представляющий эту цепочку.

2) Создайте отношение из этого узла к каждому узлу в цепочке и добавьте свойство индекса в отношение.

3) Вместо этого запустите Cyphers на ваших «цепочечных» узлах.

Чтобы расширить вышеприведенное для вашего случая ...

В этом случае узел цепочки представляетсписок задач, которые необходимо выполнить по порядку;И само по себе тоже может быть задачей.Отделение списка от задачи - это больше работы, но это позволит вам определить несколько способов выполнения определенной задачи.Например, я могу приготовить кофе, запустив кофемашину, попросив Google сделать это (что запустит машину) или перейти к Starbucks.Это должно быть достаточно гибким, чтобы поддерживать все, что вам нужно представлять, без того, чтобы случаи попирали друг друга.Часть ключа здесь - отношения могут также иметь свойства!Не бойтесь использовать это, чтобы выделить их.(Вы можете просто добавить «идентификатор группы» в каждую цепочку задач, чтобы сделать их различимыми, но это будет иметь проблемы с масштабированием)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...