在Neo4j中设计日期时间模式

时间:2014-05-26 04:57:30

标签: graph neo4j schema-design

我对“架构”设计有疑问。为简化起见,基本上有2个实体,大学和学生。学生可以是“当前”或“过去”。每个学生都有一个“开始日期”,可能还有一个“结束日期”。现在,我可以建立一种从大学到学生的“当前”或“过去”类型的关系。学生可以在多所大学当前/过去。

我的问题是 - 我如何表示日期?

我可以将日期作为关系的属性(过去或现在),但这不会让人很容易回答,比如说“给我看看2009年开始的所有学生”。通常情况下,我会有一个单独的日期图,但由于我们在Neo4j中没有超边缘,我不确定最佳设计/实践是什么...... 我可以创建一个位于每个关系之间的中间节点(例如'CurrentStudent'),并将其连接到日期图(虚假的超边缘)。还有其他想法吗?

提前致谢...

1 个答案:

答案 0 :(得分:2)

我将fromto属性放在从学生到大学的studies_at关系中。 fromto的值是自纪元以来的毫秒数(在Java中称为Date.getTime())。当前学生由from表示等于Long.MAX_VALUE。

大学和学生获得了他们名字的标签和索引属性。

从2009年开始查找大学的所有学生:

MATCH (:University {name:'my university'})<-[r:STUDIES_AT}-(student:Student)
WHERE r.from >= {ms_since_epoch_for_Jan 1st 2009} 
  AND r.from <= {ms.since_epoch_for_Dec_31st 2009}
RETURN student

当然你可以介绍一个时间树。然后studies_at关系成为一个节点,因为学习的事实现在已成为你模型中的一个东西。 studies_in节点连接到学生,unversity和两次到时间树,具有startsends关系。

时间树需要根据搜索的粒度规定粒度(日,分,秒)。