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 存储的内容,而只是关注数据类型的嵌套。
要了解更多信息,另请参阅:
- not building nests
上的 Firebase 文档
- NoSQL data modeling
- Firebase for SQL developers
我正在尝试创建一个管理购物清单的应用程序。购物清单包含用户和产品。我应该使用哪种方式来创建 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 存储的内容,而只是关注数据类型的嵌套。
要了解更多信息,另请参阅:
- not building nests 上的 Firebase 文档
- NoSQL data modeling
- Firebase for SQL developers