2016-07-31 13 views
0

Ich möchte einige Erläuterungen zum Datenabruf in Firebase. Ich bin kein Experte in der NoSql-Datenstruktur und etwas fehlt mir in den Sinn. Es ist nicht natürlich für mich. Ich denke jedoch, dass ich die Grundlagen der Zwei-Wege-Beziehungen in dieser Art von Struktur verstanden habe.
Zwei-Wege-Beziehungen in der Firebase/Abrufen von Daten

Hier ist meine Datenstruktur:

{ 
// Two-way relationships between accounts & logements 
    "accounts" : { 
    "uniqueId1" : { 
     "nom" : 'My name 1', 
     "email" : 'My email 1', 
     "logements" : { 
      uniqueIdLogement1 : true, 
      // do I have to list relationships with images & geofire here ? 
      uniqueIdLogement2 : true 
     }, 
     "favorites" : { 
      uniqueIdLogement2 : true, 
      uniqueIdLogement25 : true, 
      uniqueIdLogement32 : true 
     } 

    }, 
    .... 
    }, 
    // Each logement has his own "images" & "geofire" data 
    "logements" : { 
    "uniqueIdLogement1" : { 
     "nom_du_logement" : 'My logement name 1', 
     "accounts" : { 
      uniqueId1 : true 
     }, 
     "images" : { 
      uniqueIdImages1 : true, 
      uniqueIdImages2 : true, 
      uniqueIdImages3 : true, 
     }, 
     "geofire" : { 
      uniqueIdGeofire1 : true 
     }, 
    }, 
    ... 
    }, 
    "images" : { 
    "uniqueIdImages1" : { 
     "image" : 'My image URL 1', 
     "logements" : { 
      uniqueIdLogement1 : true 
     } 
    }, 
    ... 
    }, 
    "geofire" : { 
    "uniqueIdGeofire1" : { 
     "g" : 'My geofire Data, 
     "l" : { 
      0 : '-44.34', 
      1 : '-3.2' 
     }, 
     "logements" : { 
      uniqueIdLogement1 : true 
     } 
    }, 
    ... 
    } 
} 

Ich denke, jeder hat seine eigene Sicht über Datenstruktur hat aber meiner Meinung nach (in Referenz von Firebase Docs) es ganz so sein muss. Aber wenn Sie einige Updates sehen, zögern Sie nicht!

So, In AngularJS würde Ich mag jedes „logements“ für Konto zur Liste mit „uniqueId1“ für exemple und zeigen ihre eigenen „Bilder“ & geofire Daten (und überprüfen, ob sie meine Benutzer-Favoriten logements sind).
Ist es möglich, das zu tun?

// list every logements for account ID1 
    // for each logement take images data & geofire data & check if favorites 
     // push infos in $scope.items & display with ng-repeat 

Eine weitere Frage in Bezug auf das: Wenn ich ein „logements“ für Benutzer ID1 entfernen, ich will & geofire Referenzen auch alle Bilder entfernen ...! Ist es möglich, das auch zu tun?

// remove uniqueIdLogement1 from account ID 1 
    // remove images where "logements" = uniqueIdLogement1 
    // remove goofier where "logements" = uniqueIdLogement1 

Ich denke, dass, wenn ich das richtig verstehen, wird es für mich in Ordnung sein! Ich kann gerade nicht sehen, wie es funktioniert und es ist frustrierend, weil ich weiß, dass es eine Menge Potenzial mit dieser Art von Datenbank gibt. Kannst du mir bitte ein paar Details dazu erklären? Vielen Dank

Antwort

1

Mit jeder Datenbank müssen Sie häufig Daten von mehreren Standorten verbinden, um Ihre Ansicht zu erstellen.

In relationalen Datenbanken können Sie die Daten von diesen mehreren Speicherorten (Tabellen in diesem Fall) mit einer einzigen Anweisung abrufen, indem Sie eine JOIN-Klausel verwenden.

In Firebase (und vielen anderen NoSQL-Datenbanken) gibt es keine integrierte Möglichkeit, Daten von mehreren Standorten aus zu verknüpfen. Das müssen Sie in Ihrem Code tun.

Viele Entwickler aus einem SQL- und herkömmlichen Webentwicklungshintergrund machen sich Gedanken über die Leistung all dieser verschachtelten Aufrufe. In Firebase wird dies nicht benötigt (für angemessene Datenmengen), da Firebase die Anforderungen über eine einzige Verbindung weiterleitet. Siehe Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly.

Im Allgemeinen empfehle ich diesen Artikel auf NoSQL data modeling für eine gute Einführung in das allgemeine Thema zu lesen.

Verwandte Themen