Простой недостаток дизайна социальной сети с графовой базой данных

Я смотрел базы данных графов и Neo4j. Как и было предложено, я попытался нарисовать простой график социальных сетей на белой бумаге и после нескольких набросков застрял на некоторых похожих точках.

Сначала я разработал социальную сеть, в которой «пользователи» могут «лайкать» «посты».

(u1:User)-[:LIKED]->(p:Post)<-[:POSTED]-(u2:User)

Теперь я хочу уведомить user2 о подобном действии и нарисовать это на белой бумаге.

(u1:User)-[:LIKED]->(p:Post)<-[:POSTED]-(u2:User)
              |                            ^
              |__________[:NOTIFY]_________|

Я не уверен, понятно ли это, но я просто нарисовал связь между узлом и другой связью, что невозможно для графовых баз данных, по крайней мере, для Neo4j. Поэтому я решил, что Like должен быть узлом, а не отношением. Затем мой график превратился в это.

(u1:User)-[:CREATAD]->(l:Like)-[:BELONGS_TO]->(p:Post)<-[:POSTED]-(u2:User)
                          |                                           ^
                          |__________________[:NOTIFY]________________|

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

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

Итак, мой вопрос: попадает ли кто-нибудь, кроме меня, в эту проблему «отношения между узлом и другим отношением», и если да, то как вы ее решаете?


person Mehmet Ataş    schedule 15.03.2015    source источник


Ответы (1)


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

В нашем классе по моделированию данных есть специальный раздел по этому вопросу, а также в книге «Базы данных графов» это подробно обсуждается (вы можете получить бесплатный PDF здесь).

Иногда имеет смысл сохранить исходное отношение для быстрого пересечения этого промежуточного узла, если вам не нужна эта деталь.

person Michael Hunger    schedule 15.03.2015