我对“架构”设计有疑问。简单来说,基本上有两个实体:大学和学生。学生可以是“当前”或“过去”。每个学生都有一个“开始日期”,可能还有一个“结束日期”。现在,我可以建立从大学到学生的“当前”或“过去”类型的关系。学生可以是多所大学的现任/前任学生。
我的问题是 - 如何表示日期?
我可以将日期作为关系的属性(过去或当前),但这并不容易回答,例如“显示 2009 年开始的所有学生”。通常,我会有一个单独的日期图,但由于我们在 Neo4j 中没有超边缘,我不确定最好的设计/实践是什么...... 我可以创建位于每个关系之间的中间节点(例如“CurrentStudent”),并将其连接到日期图(假超边)。还有其他想法吗?
提前致谢...
最佳答案
我会将 from
和 to
属性放入从学生到大学的 studies_at
关系中。 from
和 to
的值是自纪元以来的毫秒数(在 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 节点连接到学生、大学并两次连接到时间树,具有 starts
和 ends
关系。
时间树需要具有搜索粒度所规定的粒度(日、分、秒)。
关于graph - 在 Neo4j 中设计日期时间模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23862963/