0

Also habe ich ein wenig nach der Implementierung gesucht und finde keine Best Practice für die Strukturierung meiner Datenbank.Korrekter Firebase Firestore "Gefällt mir" -Datenbankstruktur in Swift

Ich erstelle eine iOS App mit Firebase's neuer Datenbank Firestore.

Im Wesentlichen habe ich zwei Haupt "Sammlungen".

'users' 'Standorte'

Es gibt 100 Standorte. Benutzer sind unendlich. Benutzer können Standorte "mögen". Benutzer können anderen Benutzern folgen.

Wo ich auf ein Problem stoße, fragt nach den "gemeinen" Standorten der aktuellen Benutzer und nachverfolgten Benutzern.

Sollten diese Objekte im Benutzer sein? zum Beispiel ...

/users 
    /userId 
     name:"Phil" 
     likedLocations 
      location1:true 
      location5:true 
     followedUsers 
      userId3:true 
      userId6:true 

Oder sollte diese in der die Standorte der Sammlung sein ...

/locations 
    /locationId 
     name:"New York" 
     userLiked 
      "userId":true 

Zur leichteren Bearbeitung kann ich manuell in die Datenbank hineingehen und einen Ort bearbeiten. Mit Option A - das ist kein Problem. Nutzer haben die Möglichkeit, 100 Artikel in ihren "likedLocations" zu haben. Mit Option B könnte ein Standort unendlich viele Schlüsselwertpaare (so viele Benutzer wie in der App) haben.

+0

TLDR - was ist die am leichtesten abgefragte und kostengünstige Möglichkeit, einen Benutzer nach/Liking Typ Datenbank einzurichten. – pmanning

+1

gehen Sie mit dem ersten. Sie können im zweiten Beispiel nur 20000 Benutzer für New York haben. Es wäre unwahrscheinlich, dass Phil 20000 Plätze mochte. – jimijon

Antwort

1

Warum verwenden Sie diese beiden Root-Sammlungen nicht?

/likedPlaces 
    /userId 
     name: "Phil" 
     location: locationId 

/followers (or followed. Based on your query needs) 
    /userId 
     name: otherUserId 

diese Weise ein bestimmter Benutzer abfragen kann:

  • alle seine mochte Orte

  • Filter für einige von ihnen

  • alle seine Anhänger durch ihre ID

  • Überprüfen Sie, ob ein Benutzer sein Follower ist.

Macht es Sinn? Ich hoffe es hilft. Alessandro