0

你能解释一下如何在 ArangoDB 中处理历史数据吗?

例如,我有 5 个集合:

1. 学校 [Type = Documents] - 我保留有关学校的信息。我有2所学校:
- 最佳学校
- NotveryBestSchool
2. 班级 [Type = Documents] - 我保留有关班级的信息。我有 4 节课:
- 最佳 A 级
- 最佳 B 级
- NotveryBest A类
- NotveryBest B级
3. 学生 [类型 = 文档] - 我保留有关学生的信息:
- 蒂米
- 丽莎
- 凯尔
- 巴特
4. ClassinSchool [Type = Edge] - 我保留有关学校班级的信息,其中“父母”=“学校”,“孩子”=班级:
_From: School/BestSchool _To: Class/Best A Class
_From: School/BestSchool _To: Class/Best B Class
_From: School/NotveryBestSchool: Class/NotveryBest A Class
_From: School/NotveryBestSchool: Class/NotveryBest B Class
最后:
5. StudentsinClass [Type = Edge] - 我保留有关学生在课堂上的信息,其中“父母”=“学生”,“孩子”=班级
_发件人:学生/蒂米 _收件人:班级/Best A Class
_From:学生/Lisa _To:Class/Best B Class
_From: Students/Kail: Class/NotveryBest A Class
_From: Students/Bart: Class/NotveryBest B Class

情况就是这样。2017年巴特学得很好。年底,他从“NotveryBest B班”转入新班“NotveryBest A班”。2018年,他学得更好,父母决定把他转到另一所学校,在那里他可以发挥自己的才能。他从“NotveryBestSchool”转到新学校“BestSchool”和“Best B Class”班。

假设:我是否理解正确,为了跟踪 Bart 在班级和学校之间的移动,我必须在边缘添加日期?此边缘中的主要字段应该是 StartDates 和 EndDates?或者也许我需要将他的动作存储在 Bart 的参数中?第三个选项 - 制作一个单独的集合“历史”并将所有内容存储在那里。

选择哪个选项?

4

1 回答 1

0

所以这是我的看法:

  • 又快又脏:把所有东西都放在历史收藏中。这很容易做到,您可以立即在此表上放置一个 GUI。但是,将来尝试对此表进行分析会很麻烦,因为要获得基于时间的可用数据将涉及多个连接。此外,如果你有很多学生,这张桌子可能会增长很多。

  • 以学生为中心:如果我们有很多学生,并且我们通常在大多数情况下以每个学生为基础检索历史信息,那么将学生对象中的信息作为属性存储会很有效。对汇总的学生群体进行分析以找到模式会有点复杂,因为我们需要先从个别学生那里获取数据,然后才能对其进行分析。

  • 向边添加日期:最初设置需要花费更多精力,但它是存储数据的最灵活方式。此外,您还可以添加其他信息,例如转移原因。此设置将允许您对学生转学模式或学生转学时间等进行最多分析......

最后,这一切都取决于你正在构建什么,但我倾向于倾向于第三种选择,除非我有特定的理由不这样做。

于 2019-04-24T21:34:53.987 回答