我是否总是需要复制和嵌套数据才能在 noSQL (Firebase) 中引用它?

Do I always need to duplicate and nest data to refer to it in noSQL (Firebase)?

我并没有和 SQL 一起工作过很多次,但显然足以被它的爪子抓住,因为我对如何引用 no[=44= 中的东西感到很茫然].

假设我有一个显示 books 的页面,然后是 users 可以将任意数量的书籍保存到他们自己的个人图书馆(本质上是 "liking" 他们)的功能。

一本书包含作者标题页数大纲人物列表

在 SQL 中,我需要在 booksusers 之间设置连接 table,但在 SQL 中(特别是 Firebase,因为这就是我的开始)没有这样的东西,这让我感到困惑。我被警告嵌套数据,但这里似乎有必要将 books 嵌套在 users 下(反之亦然?)并且有很多重复数据。

出于几个原因,这对我来说似乎很恶心。一是迭代用户需要大量额外时间,因为他们的整个库也需要迭代。其次,我需要复制很多数据,因为我想把他们图书馆里的书完整地展示出来,连同简介和人物列表等

我真的需要制作另一个片段,称为 library,我在其中列出 users 并将它们的 books 嵌套在它们下面吗?这是一种有效的方法吗?

还是我错过了一些重要的东西?即使在 noSQL(包括 Firebase)中,我真的可以像使用外键一样引用数据吗?

我 运行 遇到了来自 SQL 背景的相同问题。下面的示例结构是您的 noSQL 的一个非常高级的视图,在本例中是 Firebase,可能最好看起来像:

- Firebase root
    - Users
        - $userId
            - name
            - email
            - books
                - $bookId
    - Books
        - $bookId
            - title
            - author

...以及您如何访问图书的一个非常简单的想法:

var ref = new Firebase();
ref.child('Books').child($bookId).push({/* book info */});

总而言之,这些 $userId$bookId 字段对于在整个应用程序中引用数据变得非常重要。