2017-02-26 101 views
0

我正在编写处理组织成员和付款的应用程序。 我有以下实体:Firebase数据库设计建议

Organization---+ 
       | 
       +---Members-----+ 
       |    | 
       |    +---Children 
       +---Accounts 
       | 
       +---Payments 

可以有每个组织> 100,000付款,但只有少数成员和帐户。 当成员登录时,他只能看到他的付款。 当管理员登录时,他应该能够访问所有数据。

的问题是:

  1. 我应该保持组织的层级结构,或者我应该扁平化的每个实体?
  2. 在情况下,我想保持结构层次,是有可能只有部分子集(不是所有的成员,不是所有的款项)

感谢得到一个组织。

+0

请为将来的问题分享真正的JSON,而不是近似/模型。现在你有两个答案*可能*都是正确的,我们花时间试图找出其他方法,而不是帮助你。 –

回答

1

你应该保持你的结构平坦和尽可能非规范化。查询父节点将加载所有子节点和数据。

是的,你仍然可以使用可用的SDK查询/过滤器。

+1

我并不立即表示不同意,但你能解释一下为什么*你认为这些数据应该作为一个单一的支付清单来保存? –

+0

以下是设计firebase nosql数据库的链接https://firebase.google.com/docs/database/web/structure-data – alltej

+1

我非常熟悉该文档。但我不明白你认为这里适用的是哪一部分。将不同的数据类型组合在一个层次中几乎是一个糟糕的主意。但据我所知,这不适用于此。嵌套集合在Firebase实时数据库中非常常见,并且通常是最佳解决方案。 –

5

有关Firebase实时数据库始终牢记在心的一件事就是您要检索的数据量和数据库考虑的数据量。

如果您将数据库视为100K付款以显示<当前用户的付款,那么您浪费了大量资源。我在这里写了更多关于:Firebase Scalability LimitFirebase Performance: How many children per node?

如果您分别为每个用户建立付款模型,您将大大减少服务器需要考虑的数据量。这提高了可伸缩性,当然不是线性的。

如果管理员用户需要查看所有数据,我建议您先让他们选择一个用户。之后,他们将遵循与普通用户相同的访问模式。