0

Ich habe es schwer, meine Daten für Firebase zu erhalten und brauche eine Anleitung. Ich bin zuversichtlich, relationale Datenbank und finde, dass ich nur diese Art von Denken zu Firebase replizieren.Firebase-Daten: Denormierung und Duplizierung

Ich erstelle eine Fitness-App. Die Struktur, die ich habe, ist wie folgt: Übungen, Workouts und Programme.

Übungen ist ganz einfach, es ist ein Name, eine Beschreibung und ein Foto von einer einfachen Bewegung, wie Kniebeugen oder Bankdrücken.

exercise 
--e1 
    --name:"Squats" 
    --description: "..." 
--e2 
    --name:"Benchpress" 
    --description: "..." 

Dann habe ich eine Liste von Trainingseinheiten. Ein Training ist eine Reihe von Übungen, die in einer speziellen Reihenfolge mit bestimmten Wiederholungen und Sets durchgeführt werden. Eine Übung könnte in vielen Trainingseinheiten mit unterschiedlichen Parametern verwendet wird (Wiederholungen, Sätze, rest)

workouts 
--w1 
    --name:"Easy workout" 
    --description: "Design for beginners" 
    --exercises: 
    --we1: 
     --exercise: e1   
     --reps: 12 
     --rest: 60 
     --order: 1 
    --we2 
     --exercise: e2 
     --reps:6 
     --rest: 30 
     --order: 2 
--w2 
    --name: "Hard exercise" 
    ... 

Also ich habe hier w1, ein Training, das nur verwendete Übung 1: Erste führen Sie 12 Wiederholungen der Übung 1, dann Rest für 60 Sekunden, dann 6 Wiederholungen von Übung 2 und ruhen für 30 Sekunden.

Endlich habe ich ein Programm/Plan. Ein Programm besteht aus mehreren Workouts, denen Sie folgen können. Zum Beispiel könnte Ihr Programm aus 3 Trainingseinheiten bestehen, die Sie am Montag, Mittwoch und Freitag absolvieren sollten.

Also wie oben erwähnt, ich nur relationale Daten in Firebase aufstellen. Was ist nicht der richtige Weg. Ich habe nur Probleme, wie ich diese Daten in flacher Weise verändern sollte. Sind Duplikate zum Beispiel ok?

Im Moment habe ich ein wirklich teures Lese (nicht Best Practice), da ich den Programmort abfragen, zuordnen, die Workouts abfragen, zuordnen, die Übungen abfragen. Es wird ziemlich umständlich schnell.

Alle thoughs und Hilfe wird sehr geschätzt.

Antwort

0

Sie könnten einen Blick in die normalizr Bibliothek werfen. Es wurde ursprünglich entwickelt, um bei der Arbeit mit Rest API und Redux zu helfen: Das gleiche Problem der Duplizierung in einer nicht relationalen Umgebung tritt auf.

Grundsätzlich würde ich jede andere Art von Entity als Map in Firebase gespeichert haben.

Dann können Sie jede Ihrer Komponenten Abonnements für ihre entsprechende Entität machen. Mit Versprechen und/oder Streams ist es ziemlich geradlinig.

Jede Ihrer Beziehungen ist einfach eine ID in einem Array und Sie können die normalizr-Bibliothek zum Normalisieren/Denormalisieren verwenden, wenn Sie in der db lesen/schreiben möchten.

Beachten Sie, dass Sie mit diesem Muster leicht die Feuerbasis update api verwenden können mehrere Einheiten auf einmal eine Abfrage mit wie zu aktualisieren:

const updateQuery = { 
    "workouts/id": ..., 
    "exercises/id": ..., 
    "programs/id": ..., 
}