0

我的Firebase數據庫中有(大量)大量笑話,如下圖所示。使用Firebase身份驗證用戶的Firebase數據庫數據結構

Current jokes node

我在我的Android應用程序類似的資訊提供,列表中顯示。我還實現了使用Firebase身份驗證進行登錄的可能性,現在我想爲登錄的用戶添加選項(像笑話一樣)並將它們添加到收藏夾(收藏夾應該與私人書籤一樣)。我徘徊,我怎麼能組織我的數據,我有兩個建議:

  1. 添加一個名爲「userJokes」與代表從火力地堡身份驗證用戶的UID子節點新的根節點。每個UID子節點都應該有來自「笑話」節點的每個笑話的副本,其中包含代表(喜歡)和喜歡的狀態的其他布爾值。

    Suggestion 1

  2. 另一個解決方案是每一個用戶的UID添加到一個玩笑用戶(DIS)喜歡或添加到收藏。

    Suggestion 2

第一方案是合理的,但我怎麼能指望喜歡的號碼和不喜歡,如果我的數據結構的這種方式?將每個笑話從「笑話」節點複製到「userJokes」節點以便每個用戶在Feed中顯示的最佳方法是什麼?其次是不切實際的,因爲雖然檢索笑話,我會得到每個有(不喜歡)或添加到收藏夾的用戶的信息,這不是我所需要的。哪種解決方案更好?還有其他嗎?將Firebase身份驗證中的用戶UID添加到Firebase數據庫中的數據庫可以嗎?

回答

1

我第一個想到的是比較公認的,儘管它需要一些好辦法:)

首先要注意:如果你創建的數據只被用來作爲關係(如userJokes),最好是隻加簡單值,它不復制整個源數據(jokes數據),就像這樣:

userJokes: { 
    randomUserId: { 
     randomJokeId:true, 
     anotherRandomJokeId:true 
    } 
    awesomeUser: { 
     randomJokeId:true 
    } 
} 

秒注意:如果你想實現兩個功能(喜歡和喜歡),我認爲你應該把它作爲不同的數據。所以它會是userJokeLikeuserJokeFavorite(或類似的東西)。每個人的結構應與我在第一個註釋中提到的相同。


總之

  • 每一個笑話數據仍然在他們的源路徑(即內部jokes),只有它們的ID被複制到新創建的數據路徑(userJokeLikeuserJokeFavorite

  • 如果您想搜索帶有編號爲randomUserId的用戶的笑話,請檢查userJokeLike\randomUserId。然後從每個笑話ID到達那裏,從源jokes的路徑中獲取真實數據。

  • 當您想搜索由用戶編號爲randomUserId的用戶所喜歡的笑話時,基本上可以按上述方法進行操作。

  • 當你要計算的喜好和每一個笑話的最愛,只是用這樣的:

    FirebaseDatabase.getInstance().getReference("userJokeLike") 
        .orderByChild().equalsTo("randomJokeId") 
        .addListenerForSingleValueEvent(new ValueEventListener() { 
         ... onDataChange(DataSnapshot dataSnapshot) { 
          int jokeCount = dataSnapshot.getChildrenCount(); 
         } 
        }); 
    

而且你去那裏,希望這有助於。

注:我沒有檢查的最後一個代碼,希望工作:對

編輯:

貌似我沒有誤會:d

上述解決方案是我認爲最好的爲了結構本身。但是如果我們需要簡單而快速的事情,那麼每種情況都會有所不同。我認爲最好的解決辦法,如果你想獲得笑話的喜好和收藏包括(無需創建另一個請求),那麼你的結構應該是這樣的:

jokes: { 
    randomJokeId: { 
     // joke data here 
     likes:{ 
      randomUserId:true, 
      anotherUserId:true 
     }, 
     favorites:{ 
      randomUserId:true 
     } 
    } 
} 

它包括likesfavorite當你請求jokes數據。因此,在每個數據中,您只需檢查當前用戶的UID是否存在於likes和/或favorite內。而櫃檯會更容易這樣。

快樂編碼:)

+0

我可能錯過了我的問題中的一點。我想在任何社交應用程序的列表中顯示笑話。在顯示笑話的同時,我還想立即顯示喜歡,不喜歡和喜歡的相應圖標,具體取決於用戶已經完成了什麼。就像Instagram的Feed一樣,在已經喜歡的圖像上顯示紅色的心臟。所以,我希望這些數據已經存在,而無需進行新的查詢。這就是爲什麼我提出了第一個解決方案,我將每個笑話都保存在用戶UID密鑰下,並附加了代表喜歡,不喜歡和喜好的信息。 – lagoman

+0

我編輯了我的答案,希望這一次我明白了:D – koceeng

相關問題