为什么要在数据设计中维护two-way个指针?

Why maintain two-way pointers in data design?

假设我有以下架构:

书籍COLLECTION:

{
    author: { ...authorObject }
}

作者 COLLECTION:

{
    books: [{ ...bookObject}]
}

如果我已经在每个书籍文档中存储了作者信息,为什么我应该在每个作者文档中存储一个书籍数组?每当我想查看特定作者写的所有书籍时,从书籍 collection 中查询是否就足够了?

我在这里找到了一个类似的模式:https://www.howtographql.com/graphql-js/6-authentication/

每个 link 都有一个“postedBy”字段,每个用户都有一个“links”字段。为什么要在两个地方存储相同的信息?是不是效率低下?例如,如果删除 link(或上例中的一本书),您必须更新相应用户(或作者)的文档。

只是想了解为什么我们需要在两个方向存储相同信息。感觉有点多余。

我认为这取决于您的用例。说你只维护在作者文档中保存书籍数组的单向指针,如果你有一个需要通过某本书搜索作者的用例,你将需要对作者集合进行完整的集合扫描以找到所有匹配项。因此,在不了解您的实际情况的情况下,我们可能很难评论您的数据库中 2 向指针的必要性。

This document 是一篇值得您阅读的文章。