graph - 在 Neo4j 中设计日期时间模式

标签 graph neo4j schema-design

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

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

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

提前致谢...

最佳答案

我会将 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 节点连接到学生、大学并两次连接到时间树,具有 startsends 关系。

时间树需要具有搜索粒度所规定的粒度(日、分、秒)。

关于graph - 在 Neo4j 中设计日期时间模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23862963/

相关文章:

android - 在 aChartEngine 中平移时条与 Y 轴重叠

algorithm - 查找跨越给定最小生成树的最小权重完整图

algorithm - 图中 MST 边所必需的

java - 无法在 Neo4j JAVA 中执行密码匹配查询

database - 模式设计 : many to many plus additional one to many

logging - HBase 适合存储和查询日志数据吗?

javascript - d3v4 为什么我的线条元素没有出现?

neo4j - 从浏览器查看图形时更改默认节点标签

java - java中类之间传递字符串数组的方法

sql - 在 SQL/MySQL 中,是否有理由不将一对一关系放在同一个表中?