2017-02-26 100 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?

如果您分別爲每個用戶建立付款模型,您將大大減少服務器需要考慮的數據量。這提高了可伸縮性,當然不是線性的。

如果管理員用戶需要查看所有數據,我建議您先讓他們選擇一個用戶。之後,他們將遵循與普通用戶相同的訪問模式。