Я смотрел базы данных графов и 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]________________|
Теперь все в порядке. Затем я добавил в систему функцию «Комментарии» как отношение, но когда были задействованы уведомления, она снова превратилась в узел. И то же самое произошло, когда я добавил функцию «Нравятся комментарии», «Нравится к комментариям» сначала казалось, что это отношения, но снова они превратились в узлы, когда были задействованы уведомления.
В общем, в какой-то момент я ловлю себя на том, что рисую связь между узлом и другой связью. Мое решение похоже на то, что я превращаю сущности, которые естественным образом выглядят как отношения, в узлы. И это заставляет меня думать, что у меня есть некоторые проблемы с принятием решения о том, что должно быть узлом, а что должно быть отношением.
Итак, мой вопрос: попадает ли кто-нибудь, кроме меня, в эту проблему «отношения между узлом и другим отношением», и если да, то как вы ее решаете?