Firebase树结构

Firebase tree structure

我正在尝试创建一个管理购物清单的应用程序。购物清单包含用户和产品。我应该使用哪种方式来创建 JSON 树结构:

"ShoppingLists": {
  "ShoppingListId" : {
    "name" : "String",
    "description": "String",
    "imageUrl": "String",
    "Users" : {
      "User1Id" : {
        "username" :"String",
        "photoUrl" : "String"
      },
      "User2Id" : {
        "username" :"String",
        "photoUrl" : "String"
      }
    },
    "Products" : {
      "ProductId1" : {
        "name" : "String",
        "productPhotoUrl" : "String"
      }
    }
  }

这是第一个选项

"ShoppingLists": {
  "ShoppingListId" : {
    "name" : "String",
    "description": "String",
    "imageUrl": "String",
    "Users" : {
      "UserId1" : "String", 
      "UserId2" : "String"
    },
    "Products" : {
      "ProductId1" : "String"
    }
  }

这是第二个。在第二个选项中,我使用 userId 获取用户名和 photoUrl。

哪个更好或者两者都不好?

NoSQL 数据库设计没有 objective“更好”;这完全取决于您应用的 use-cases。

也就是说,一个常见的反模式是将多种类型的数据嵌套在 JSON 树的单个分支下。一个更规则的结构是将它们分成它们自己的 top-level 个分支,使用相同的键:

"ShoppingLists": {
  "ShoppingListId" : {
    "name" : "String",
    "description": "String",
    "imageUrl": "String",
  }
},
"ShoppingListUsers" : {
  "ShoppingListId" : {
      "User1Id" : {
        "username" :"String",
        "photoUrl" : "String"
      },
      "User2Id" : {
        "username" :"String",
        "photoUrl" : "String"
      }
    },
  }
},
"ShoppingListProducts" : {
  "ShoppingListId" : {
    "Products" : {
      "ProductId1" : {
        "name" : "String",
        "productPhotoUrl" : "String"
      }
    }
  }
}

现在您可以阅读所有购物清单,而不必同时阅读每个购物清单中的用户和产品。另外,通过这种方式,您可以为列表本身、它们的用户和它们的产品制定单独的安全规则。

请注意,我有意不关注您为购物清单中的每个 user/product 存储的内容,而只是关注数据类型的嵌套。

要了解更多信息,另请参阅: