2017-01-18 91 views
0

我目前正在開發一個IOS應用程序,後端由Firebase提供。這是我第一次使用NOSql後端,並希望得到關於如何最好地構建數據的一些輸入。目前該應用程序將成爲基於用戶的應用程序,僅具有與每個用戶在其Feed中出現的相關詳細信息。因此,如果他們在筆記區域發佈筆記,只有他們可以訪問筆記。將不會共享這些信息。我目前的數據安裝方式是讓一個名爲「notes」的終端和一個名爲「users」的終端。我計劃將每個筆記放入「筆記」中,然後在每個「筆記」用戶的參考下引用主註釋區域中的「noteId」。這是否更有意義,那麼只是讓「用戶」的孩子在那裏與實際筆記數據一起作爲「筆記」?適當的Firebase數據結構

notes > 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 

user > 
    notes > 
     noteId 
     noteId 
     noteId (these would reference the note in notes) 
    name 
    dateAdded 

這在數據看起來有點如此。這是最好的方法嗎?我有一個mySql背景,並有麻煩充分理解noSql。

回答

3

如果您需要跨用戶訪問備註,則在單個頂級節點中保留所有用戶的備註很有意義。但是請注意,您應該是非常小心跨所有筆記查詢,因爲如果您的應用程序變得非常成功,這可能會成爲瓶頸。

如果你永遠只需要訪問Notes爲特定用戶,你可能也分別劃分爲每個用戶的注意事項:

notes > 
    user1 > 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 
    user2 > 
    noteId > 
     noteName 
     noteDetails 

這個數據結構導致數據的更好的隔離,在成本沒有一長串筆記。

除此之外,你嵌套應展數據:用戶配置文件和用戶註釋,應該是在單獨的頂級節點:

users > 
    userId > 
     name 
     dateAdded 
userNotes > 
    userId > 
     noteId 
     noteId 
     noteId (these would reference the note in notes) 

有了這個,你可以檢索用戶名列表,也沒有得到他們所有的筆記ID。然後,當您需要顯示特定用戶的註釋時,只需訪問/userNotes/<uid>下的註釋鍵,然後加載每個節點。

如果您是NoSQL數據建模的新手,我推薦閱讀NoSQL data modeling。如果您來自關係/ SQL背景,我建議查看Firebase for SQL developers

+0

太棒了。這完全是有道理的。在經過多年的php和關係數據庫之後,我一直在使用扁平化數據方法。非常感謝。 – user1881482

+1

你並不孤單。 :-)它大多需要一些「不學習」,然後是邏輯思維(而不是不斷地與SQL比較)。我添加了一些閱讀/查看鏈接。 –