Доброго утра,моделирования Neo4j DB - отношения и родительские узлы
Я начинаю двигаться из реляционной БД Нео и, таким образом, перенося своим «стол-мышление» в графе мир. Думая о модели, чтобы представить мой модуль задачи мне нужно поставить следующие объекты в отношении:
- клиента
- Задача
- Пользователь
Так что я пришел с этой идеей:
(CUSTOMER)-[:GENERATES]->(TASK)
(USER)-[:IS_ASSIGNED_TO]->(TASK)
Я размышлял, когда я собираюсь запросить это, я бы назвал каждый узел задачи меткой TASK и havi ng статус как свойство, например. закрытая, открытая и т.д.
Глядя теперь все открытые задачи могли были решены
MATCH (t:TASK {status:"open"}) -[:IS_ASSIGNED_TO]-> (u:USER)
MATCH (c:Customer) -[:GENERATES]-> (t:TASK)
RETURN t.number as task_number, c.name as customer_name, u.name as user_name
При создании узлов и отношений мне было интересно, если я просто создать узел для задачи, один для пользователя и один для клиента и подключить их, как к модели выше, или если мне нужно будет иметь что-то вроде «родительского узла» каждого типа узлов, например GENERAL_USER, GENERAL_TASK и GENERAL_CUSTOMER и связав каждый отдельный узел с этим родителем, а также с отношением, которое охватывает текущий статус. Идея заключалась в том, что когда я хочу иметь открытые задачи, мне может быть проще начать с узла GENERAL_TASK и найти все отношения к задачам, у которых есть статус OPEN, а не искать каждый узел, который может быть где-то в БД. Это быстрее, чем попросить БД вернуть все узлы TASK, у которых есть статус свойства с содержимым OPEN (даже если оно индексировано)?
Был бы рад иметь какой-то вклад, чтобы лучше понять, как моделировать БД и отношения. Спасибо за ваше время.
Благодарность FrobberOfBits, что помогает мне думать и проверьте мой модуль для точек вы упомянули. Он чувствует при первом касании статус как свойство, поскольку он применим только для этого типа узлов. Таким образом, это означает, что статус как часть отношения должен быть пропущен в пользу наличия статуса на узлах (будь то специальный или узел данных) - и нет необходимости иметь MAIN NODE для их соединения, но с единственными узлами которые подключены только к клиенту - поэтому запрос на статус на узлах (индексированный) - я получил это право? – user3003715
В прошлых версиях neo4j у людей был «главный узел», который они использовали как индекс рода. Я не думаю, что это так необходимо, так как есть метки и индексы. Это не так медленно делать 'MATCH (p: Person {id:" 5 "}), потому что вы даете neo4j два способа быстро выполнить поиск: по метке и по свойству (индексируется). – FrobberOfBits
Отлично, поэтому мои заботы устарели - спасибо за спокойствие моего ума :) – user3003715