【问题标题】:Firebase data structure/indexes for folder system文件夹系统的 Firebase 数据结构/索引
【发布时间】:2014-11-17 17:28:28
【问题描述】:

我有以下数据结构:

"users": {
    $userid: {
        "forms": {
            "ID_OF_FORM 1": { "name": "Name goes here" },
            "ID_OF_FORM 2": { "name": "Name goes here" }
        }
    }
}

我希望能够将我的“表单”放在文件夹系统中,以便更好地为用户组织所有表单。现在我用/users/auth.id/forms/ID给他们打电话。我计划将对象放入 forms 对象中,但如果我这样做,我认为我将无法再仅使用 form id 来调用它们。

我不知道应该如何存储这些文件夹以便轻松显示它们。

  • 我需要显示 root 内的所有文件夹或 用户当前所在的文件夹。
  • 我还需要能够使用表单的 ID 调用表单

你认为这行得通吗?有没有人对此有更好的建议?

"users": {
    $userid: {
        "forms": {
            "ID_OF_FORM 1": { "name": "Name goes here", "folder_id": "ID_OF_FOLDER" },
            "ID_OF_FORM 2": { "name": "Name goes here", "folder_id": "ID_OF_FOLDER" }
        },
        "folders": {
            "ID_OF_FOLDER 1": { "name": "name of folder" },
            "ID_OF_FOLDER 2": { "name": "name of folder" },
            "ID_OF_FOLDER 3": { 
                "name": "name of folder",
                "ID_OF_FOLDER 4": { "name": "would this even work" }
            }
        }
    }
}

【问题讨论】:

    标签: firebase firebase-realtime-database nosql


    【解决方案1】:

    对我来说看起来不错,尽管除非知道所有用例(* 并不是真正适合的论坛),否则很难确定。

    我会把folders 改成:

        "folders": {
            "ID_OF_FOLDER 1": { "name": "name of folder" },
            "ID_OF_FOLDER 2": { "name": "name of folder" },
            "ID_OF_FOLDER 3": { "name": "name of folder" },
            "ID_OF_FOLDER 4": { "name": "would this even work", "folder_id": "ID_OF_FOLDER 3" }
        }
    

    否则,您将面临超过 Firebase 对树深度施加的 32 级限制的风险。好处是您可以在此处通过其 ID 直接访问任何文件夹。

    可以考虑为所有项目类型使用单个*节点,包括表单和文件夹(以及在构建应用程序时可能出现的任何其他内容):

        "items": {
            "ID_OF_FORM 1": { "type": "form", "name": "Name goes here", "folder_id": "ID_OF_FOLDER" },
            "ID_OF_FORM 2": { "type": "form", "name": "Name goes here", "folder_id": "ID_OF_FOLDER" }
            "ID_OF_FOLDER 1": { "type": "folder", "name": "name of folder" },
            "ID_OF_FOLDER 2": { "type": "folder", "name": "name of folder" },
            "ID_OF_FOLDER 3": { "type": "folder", "name": "name of folder" },
            "ID_OF_FOLDER 4": { "type": "folder", "name": "would this even work", "folder_id": "ID_OF_FOLDER 3" }
        }
    

    但我认为目前这对您的用例不太有利。鉴于您所说,文件夹和表单之间的拆分似乎相当不错。

    【讨论】:

    • 谢谢弗兰克!现在我有充分的理由将文件夹和表单分开(我没有列出表单的更多属性)但我总是乐于接受建议以及其他方式的赞成和反对。一如既往,感谢您的帮助。