【问题标题】:Proper data structure for FirebaseFirebase 的正确数据结构
【发布时间】:2017-01-18 16:16:18
【问题描述】:

我目前正在开发一个 IOS 应用,其后端由 Firebase 提供。这是我第一次与NOSqlbackend 合作,想了解如何最好地构建我的数据。目前,该应用程序将是一个基于用户的应用程序,只有与出现在其供稿中的每个用户相关的详细信息。因此,如果他们在便笺区域发布便笺,则只有他们可以访问它。不会共享此信息。我当前设置数据的方式是拥有一个名为“notes”的端点和一个名为“users”的端点。我计划将每个人的笔记放在“笔记”中,然后在“笔记”的每个用户下都有一个条目,并引用主“笔记”区域中的“noteId”。这是否比让“用户”的孩子成为“笔记”以及实际的笔记数据更有意义?

notes >
    noteId >
        noteName
        noteDetails
    noteId >
        noteName
        noteDetails
    noteId >
        noteName
        noteDetails

user >
    notes >
         noteId
         noteId
         noteId (these would reference the note in notes)
    name 
    dateAdded

这有点像目前的数据。这是最好的方法吗。我有 mySql 背景,但无法完全理解 noSql。

【问题讨论】:

    标签: ios firebase firebase-realtime-database nosql


    【解决方案1】:

    如果您需要跨用户访问笔记,则将所有用户的笔记保存在单个顶级节点中是有意义的。但请注意,您应该非常仔细查询所有注释,因为如果您的应用真正成功,这可能会成为瓶颈。

    如果您只需要访问特定用户的笔记,您不妨为每个用户单独分区笔记:

    notes >
      user1 >
        noteId >
            noteName
            noteDetails
        noteId >
            noteName
            noteDetails
      user2 >
        noteId >
            noteName
            noteDetails
    

    这种数据结构可以更好地隔离数据,但代价是没有一长串笔记。

    除此之外,您正在嵌套应该展平的数据:用户配置文件和用户注释应该位于单独的顶级节点中:

    users >
        userId >
             name 
             dateAdded
    userNotes >
        userId >
             noteId
             noteId
             noteId (these would reference the note in notes)
    

    使用它,您可以检索用户名列表,而无需获取他们所有的笔记 ID。然后,当您需要显示特定用户的注释时,您只需在/userNotes/<uid> 下访问他们的注释键,然后加载每个节点。

    如果您不熟悉 NoSQL 数据建模,我建议您阅读 NoSQL data modeling。如果您来自关系/SQL 背景,我建议您查看Firebase for SQL developers

    【讨论】:

    • 太棒了。这完全有道理。经过多年的 php 和关系数据库,我一直很难使用扁平化数据方法。非常感谢。
    • 你并不孤单。 :-) 它主要需要一些“忘却”,然后是逻辑思维(无需不断与 SQL 进行比较)。我添加了一些阅读/查看链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多