2016-08-18 3 views
0

У меня есть объект User; пользователь может быть членом нескольких групп и быть членом одной организации. Есть несколько вариантов для обработки таких отношений:Данные весны neo4j: правильный способ обработки отношений?

  1. Класса User имеет поле Set<Group> groups и Organization organization
  2. Классы Group и Organization имеет поле Set<User> users
  3. Оба варианта используется одновременно (вид двунаправленных отношений)

Кроме того, есть аннотации к описаниям с указанием направлений:

Данные весны Neo4j по умолчанию гарантирует, что между любыми двумя заданными объектами существует только одна связь данного типа. Исключение из этого правила заключается в том, что связь задается как исходящая или входящая между двумя объектами того же типа. В этом случае между двумя объектами можно иметь две связи данного типа: одно отношение в любом направлении.

Если вы не заботитесь о направлении, вы можете указать direction = Relationship.UNDIRECTED, который гарантирует, что путь между двумя узловыми объектами будет проходить с любой стороны.

Источник: Good Relationships: The Spring Data Neo4j Guide Book

Как только я хочу, чтобы иметь возможность получить группы пользователей и пользователей в группе так же быстро, как я могу, я закончил с подходом с использованием двух вариантов, перечисленных выше, на в то же время, а также аннотировать каждое отношение как UNDIRECTED, потому что это похоже на универсальный подход. Есть ли у него какие-то недостатки? Если да, то какой подход был бы лучше?

ответ

1

Поскольку вы хотите получать группы для пользователя и пользователей в группе, имеет смысл настроить вашу объектную модель, как описано в # 1 и # 2.

UNDIRECTED не является хорошим выбором здесь, потому что это подразумевает, что отношения между пользователем и группой могут быть в любом направлении, и я предполагаю, что вы не хотите этого в своей графической модели. Это хорошо для отношений, где вас не волнует направление (например, (user1)-[:FRIEND]-(user2)), но не иначе. Я бы использовал OUTGOING и INCOMING в любом классе в зависимости от ваших отношений между пользователем и группой.

 Смежные вопросы

  • Нет связанных вопросов^_^