У меня есть следующая архитектура.
Вы найдете дубликат в отношениях HAS
. Основное значение находится между Badge
и Skill
, так как я хочу иметь возможность агрегировать / считать одинаковые Skill
из разных Badge
одного и того же User
.
Итак, дублирующиеся отношения находятся между User
и Skill
. Это потому, что, например, если Organization
хочет знать все навыки одного или нескольких получателей, я бы пошел по следующему пути:
Org -OWNS-> Badges -IS_AWARDED_To-> User -HAS-> Skill
//Skill nodes for a specific or multiple user represent each skill contained in every Badge the user was awarded.
Однако, если я не добавлю дублирующиеся отношения HAS
между User
и Skill
, я буду следовать по следующему пути:
Org -OWNS-> Badges -IS_AWARDED_TO-> User -IS_AWARDED-> Badges -HAS-> Skill
//Now I have all skills for a specific or multiple User for every badge awarded
Разница между этими двумя путями очевидна. Первый из них приведет к меньшему количеству запросов, но дублирование отношений вызывает беспокойство. Второй удалит проблему дублирования (это проблема?), Но будет иметь больше запросов. Я все еще новичок в neo4j и не стесняюсь сказать мне, что оба моих подхода кажутся запутанными, и есть более оптимизированный способ достичь того, что я пытаюсь сделать.