Ios Firebase的正确数据结构

Ios Firebase的正确数据结构,ios,firebase,firebase-realtime-database,nosql,Ios,Firebase,Firebase Realtime Database,Nosql,我目前正在开发一款IOS应用程序,其后端由Firebase提供。这是我第一次使用NOSql后端,希望获得一些关于如何最好地构造数据的输入。目前,该应用程序将是一个基于用户的应用程序,它只包含与每个用户的提要中出现的用户相关的详细信息。因此,如果他们将便笺发布到“便笺”区域,只有他们才能访问它。不会共享此信息。我当前设置数据的方式是使用一个名为“notes”的端点和一个名为“users”的端点。我计划将everyones注释放在“notes”中,然后在“notes”的每个用户下面都有一个条目,并在

我目前正在开发一款IOS应用程序,其后端由Firebase提供。这是我第一次使用
NOSql
后端,希望获得一些关于如何最好地构造数据的输入。目前,该应用程序将是一个基于用户的应用程序,它只包含与每个用户的提要中出现的用户相关的详细信息。因此,如果他们将便笺发布到“便笺”区域,只有他们才能访问它。不会共享此信息。我当前设置数据的方式是使用一个名为“notes”的端点和一个名为“users”的端点。我计划将everyones注释放在“notes”中,然后在“notes”的每个用户下面都有一个条目,并在主“notes”区域中引用“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。

如果您需要跨用户访问notes,将所有用户的备注保存在一个顶级节点中是有意义的。但是请注意,您应该非常小心地查询所有笔记,因为如果您的应用程序真正成功,这可能会成为一个瓶颈

如果您只需要访问特定用户的注释,您还可以分别为每个用户对注释进行分区:

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/
下的注释键,然后加载每个节点


如果您是NoSQL数据建模新手,我建议您阅读。如果您来自关系/SQL背景,我建议您查看。

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

如果您只需要访问特定用户的注释,您还可以分别为每个用户对注释进行分区:

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/
下的注释键,然后加载每个节点


如果您是NoSQL数据建模新手,我建议您阅读。如果您来自关系/SQL背景,我建议您查看。

太棒了。这完全有道理。在使用了多年的php和关系数据库之后,我一直很难使用扁平化数据方法。非常感谢。你不是唯一一个这样做的人。:-)这主要需要一些“忘却”和逻辑思考(而不是经常与SQL进行比较)。我添加了一些阅读/查看的链接。太棒了。这完全有道理。在使用了多年的php和关系数据库之后,我一直很难使用扁平化数据方法。非常感谢。你不是唯一一个这样做的人。:-)这主要需要一些“忘却”和逻辑思考(而不是经常与SQL进行比较)。我添加了一些用于阅读/查看的链接。