Я создаю систему, в которой мы сопоставляем orders с staff. Концептуально order — это запрос на выполнение какой-либо работы, а staff — это человек, который может выполнить эту работу. order может иметь один или несколько requirements (т.е. ограничений на то, кто может выполнять работу), а staff может иметь еще один requirements (т.е. квалификацию для выполнения работы).
Я пытаюсь создать шифрованный запрос, который даст мне все staff, у которых есть все из requirement, перечисленных данным order. Другими словами, я пытаюсь найти все узлы staff, связанные с каждым узлом requirement, связанным с данным узлом order. У меня вопрос: как мне создать шифрованный запрос для моделирования этой бизнес-логики?
В качестве примера рассмотрим следующие образцы данных:
- Изображение моего примера данных
- В качестве альтернативы, вот интерактивная консоль для моих данных
Посмотрите на узел orderId: 1. он имеет отношение requires к двум узлам, помеченным как RN и ER IV. Другими словами, приказ № 1 требует, чтобы все заявители имели квалификацию RN и квалификацию ER IV. Так случилось, что сотрудник Эван (staffId: 1) обладает обеими этими квалификациями, поэтому он должен подать заявку на эту работу. Сотрудник Тим имеет ОДНО из этих требований, но не оба, поэтому он не сможет подать заявку на эту вакансию. Кроме того, orderId: 2 имеет только одно требование, которое есть у Эвана и Тима, поэтому они оба должны иметь возможность подать заявку на эту вакансию.
Так что, по сути, если бы я начал с заказа № 1, я бы хотел вернуть только Эвана. Если бы я начал с заказа №2, я бы хотел вернуть Эвана и Тима*.
Следующий запрос находится на полпути. Это даст мне все уникальные пути от данного заказа до сотрудника по одному требованию за раз. Однако он не проверяет выполнение КАЖДОГО пути требования (что означает, что в настоящее время он будет работать только для заказов, которые имеют только одно требование):
start o=node(2)
match o-[:requires]->req<-[:hasRequirement]-s
return o, req, s;
Итак, каковы мои варианты? Можно ли как-то проверить наличие неизвестного количества совпадающих отношений? Или мне нужно будет моделировать мои данные по-другому?
*Изменить: я допустил ошибку при настройке образца данных. Тим должен был быть связан с RN, чтобы он соответствовал требованиям для заказа №2.