【发布时间】:2020-06-08 10:28:39
【问题描述】:
我有 3 种类型的实体:
- 主题
- 主题
- 任务
在每个主题中都有主题和任务。 主题 可以相互依赖。 (当然,一个属于sj1 subject的topic,只能依赖另一个同样属于sj1 subject的topic 。)
tasks 和 topics 之间存在联系(也必须属于同一主题),这象征着我们要解决某个 task需要了解某些主题。
所以一个任务可能需要更多主题。更多任务可能需要一个主题。 (NM 连接。)
存储的最佳解决方案是什么?
-
解决方案
- 每种类型的实体有 3 个集合
- 在 tasks 和 topics 中有一个主题标识符属性的索引。
- 和一个边集合,用于存储主题 [N][M] 任务之间的连接
-
解决方案
- 主题有 1 个集合
- 对于每个 主题,有 1 个 topics 和 1 个 tasks 集合。 subjects 和 tasks/topics 之间的连接可以基于集合名称的前缀。 (即对于 chemistry 主题,我们有 chemistry_tasks 和 chemistry_topics 合集)
- 对于每个主题,都有一个用于任务和主题之间连接的边集合和另一个用于主题之间连接的边集合(即chemistry_topics_tasks_connections 和 chemistry_topics_connections)
这样,如果我想在某个主题的主题或任务中进行搜索,我不需要根据主题标识符索引对其进行预过滤。我将立即获得包含我所有数据的所需集合。此外,对于 tasks 和 topics 中的每个文档,我没有索引开销。 另一方面,这会导致集合混乱。
旁注:最多 50 个主题,但任务和主题的数量不受限制。
【问题讨论】:
标签: database indexing collections arangodb