2016-06-30 14 views
1

Ich bin Neuling zu Firebase und arbeiten an Ereignisse mit Firebase erstellen. Hier lade ich meine Freunde ihre Telefonnummer (Es ist nicht notwendig, dass die ich eingeladen bin wird ein Teil der Systembenutzer sein.)Firebase Daten Schema Anleitung

Unten ist mein Schema:.

{ 
    "events": [ 
    { 
     "message": "Lunch", 
     "startTime": 1469471400000, 
     "eventCreatorId": 1, 
     "endTime": 1469471400000, 
     "invitees": [ 
     { 
      "phone": "1234567890", 
      "type": "phone" 
     }, 
     { 
      "phone": "345678901", 
      "type": "phone" 
     } 
     ] 
    } 
    ] 
} 

Jetzt Problem ist, dass Wie finde ich eine Liste aller Veranstaltungen für bestimmte Einladungen? (d. h. im obigen Fall möchte ich eine Liste aller Ereignisse für Benutzer mit der Telefonnummer eqaul bis 345678901 finden.)

Kann jemand gutes Schema vorschlagen, um das obige Szenario mit Firebase zu behandeln?

Antwort

3

Willkommen bei der Verwendung einer NoSQL-Datenbank. :-)

In NoSQL enden Sie oft am Ende der Modellierung der Daten, um die Abfragen zu ermöglichen, die Ihre App ausführen soll. In diesem Fall möchten Sie beide die eingeladenen Personen pro Ereignis und die Ereignisse pro eingeladene anzeigen. Wenn das der Fall ist, müssen Sie die Daten in beiden Formaten speichern:

{ 
    "events": { 
    "event1": { 
     "message": "Lunch", 
     "startTime": 1469471400000, 
     "eventCreatorId": 1, 
     "endTime": 1469471400000, 
     "invitees": { 
     "phone_1234567890": true, 
     "phone_345678901": true 
     } 
    } 
    }, 
    "users": { 
    "phone_1234567890": { 
     "phone": "1234567890", 
     "type": "phone", 
     "events": { 
     "event1": true 
     } 
    }, 
    "phone_345678901": { 
     "phone": "345678901", 
     "type": "phone" 
     "events": { 
     "event1": true 
     } 
    } 
    } 
} 

Sie werden sehen, dass ich Ihre Daten in zwei separate Knoten der obersten Ebene aufgeteilt haben: Ereignisse und Benutzer. Sie verweisen aufeinander mit so genannten expliziten Indizes, im Wesentlichen eine Gruppe von Fremdschlüsseln, die Sie in Ihrem clientseitigen Code verwalten (und beitreten).

Ich habe auch Arrays mit benannten Schlüsseln ersetzt. Wenn Ihre Ereignisse/Benutzer über natürliche Schlüssel verfügen (z. B. uid zur Identifizierung des Benutzers, wenn Sie die Firebase-Authentifizierung verwenden), verwenden Sie diese für den Schlüssel. Ansonsten können Sie Firebase Push-IDs verwenden. Die Verwendung solcher Schlüssel führt zu einer besser skalierbaren Datenstruktur als in Abhängigkeit von Array-Indizes.

Diese beiden Themen sind in der Firebase documentation on data structuring behandelt. Ich empfehle auch dieses .

+0

Hallo Frank, das macht Sinn. Ich habe über Denormalisierung hier nachgedacht, aber ich bin ein wenig verwirrt. Jetzt mit der obigen Erklärung und modifiziertem Schema bin ich darüber klar. Vielen Dank für Ihre ausführliche Erklärung. :-) – Jim