2017-07-30 35 views
0

我正在構建一款跟蹤用戶位置並更新Firebase的應用。我已閱讀關於結構數據的文檔,但仍有幾個問題。Firebase:我的數據結構應該如此平坦?

我正在考慮以兩種方式之一來構造數據,但無法確定哪一個。

users 
    $id 
    -position 
    -other attr 

VS:

user_position 
    $id 

users 
    $id 
    -other attr. 

在什麼情況下會第一個設計作品最好的,第二個?

+0

@philipxy我不同意。任何一種設計都可以提供位置座標。例如2:用戶0的路徑是*/rootref/27_6N-82_2W/uid_0 *,明天將是*/rootref/30_5N-77_7W/uid_0 *。然後,對uid_0的查詢將在返回的鍵中顯示它們的座標。一般來說,沒有真正的方法可以回答這個問題,因爲Firebase的結構可以滿足正在進行的查詢類型和需要的數據。也許更多的信息更新這個問題將有助於我們理解用例。 – Jay

+0

如果你正在考慮這個選擇,*你跟隨什麼程序,你堅持*?如果您沒有遵循設計指南(不要與編程/產品手冊混淆,以告訴您如何表達與實現設計相關的內容),那麼請查找信息建模和數據庫設計的一些介紹,你被卡住了。 – philipxy

+0

@Jay明白了,謝謝。 – philipxy

回答

2

如果你只保留每個用戶一個位置(這似乎是由於使用單數user_position這一事實),這兩個結構之間沒有有用的區別。在這種情況下,用戶的位置只是另一個屬性,只是恰好有兩個值(經度和緯度)。

但是,如果你想保持每個用戶多個職位,那麼你的第一個結構是混合實體類型:用戶和user_positions。對於Firebase數據庫,這是一種反模式。

兩種最常見的原因是:

  • 說你要顯示的用戶名列表(或任何特定的,單值屬性)。通過第一個結構,您還需要閱讀所有用戶的所有職位列表,以獲取姓名列表。使用第二種結構,您只需閱讀用戶的屬性。如果這仍然比您需要的數據多得多,請考慮保留/user_names的列表以獲得最佳讀取性能。
  • 許多開發人員最終希望爲用戶位置和其他用戶屬性提供不同的訪問規則。在第一個結構中,只有通過將頂部/users的讀取權限降低到樹中的較低值纔可能。在第二種結構中,您可以單獨授予/users/user_positions