Graph 表示访问地点的图形数据库

Graph 表示访问地点的图形数据库,graph,neo4j,graph-databases,Graph,Neo4j,Graph Databases,在给定的日期,你会如何对两个或更多人访问的地方进行建模?看起来应该很简单,但我不知道如何将它们联系起来,以便能够说,用户1和用户2在y日期访问了X,或者如何说他们在同一日期一起访问了X 我启动了这个GraphViz来帮助可视化它: digraph visit_example { node [shape = doublecircle]; "User 1" "User 2"; node [shape = circle]; "User 1" -> Alaska [ la

在给定的日期,你会如何对两个或更多人访问的地方进行建模?看起来应该很简单,但我不知道如何将它们联系起来,以便能够说,用户1和用户2在y日期访问了X,或者如何说他们在同一日期一起访问了X

我启动了这个GraphViz来帮助可视化它:

digraph visit_example {
    node [shape = doublecircle]; "User 1" "User 2";
    node [shape = circle];
    "User 1" ->  Alaska [ label = "Visits" ];
    "User 2" ->  Alaska [ label = "Visits" ];
        "Jan 1st" -> Date [label = "is a"];
        "Mar 7th" -> Date [label = "is a"];
        "Dec 9th" -> Date [label = "is a"];
}
你将如何改变上述情况,即用户1与用户2于3月7日访问了阿拉斯加?独立地,用户1在1月1日访问了阿拉斯加,用户2在12月9日访问了阿拉斯加?

图形数据库的优点(有时不方便)是可以以多种方式对此类用例进行建模

这还取决于您希望执行的查询类型

比方说,您永远不会按时间查询,如果您愿意,查询时间并不重要,您可以轻松地将日期放在relationship属性上

(a:User)-[:VISITED {time:0123456789}]->(p:Place)
如果您希望按日期查询,则例如,您可以有一个:Visit节点代表用户的访问,并在其上有一个time属性

(a:User)-[:DO_VISIT]->(v:Visit {time: 123456789})-[:IN_PLACE]->(p:Place)
然后可以查询所有
:按时间访问
节点

另一个解决方案是管理时间树,例如

然后,您的访问节点将自动连接到时间树

(:Year {value:2015})-[:CHILD]->(:Month {value:7})-[:CHILD]->(:Day {value:8})<-[:EVENT_TIME]-(v:Visit)<-[:DO_VISIT]-(:User)

(:Year{value:2015})-[:CHILD]>(:Month{value:7})-[:CHILD]>(:Day{value:8})感谢您的回复。从你提出的模型中,我可以看出它们是如何工作的。但在每种情况下,都必须推断出用户1访问了地点a,用户2在时间2,因为它在任何关系中都没有明确表示。这似乎是不对的,因为多个人可以在同一时间访问同一个地方,而不在一起,甚至不认识对方。正是这种关系,我看不到如何明确表达。