0

Firebaseのデータを正しく取得するのに苦労し、ガイダンスが必要です。私はリレーショナルデータベースの周りに自信を持っており、私はその考え方をファイアベースに複製していることがわかります。Firebase data:denormilization and duplication

私はフィットネスアプリを作成しています。私が持っている構造は次のとおりです:エクササイズ、ワークアウト、プログラム。

練習は非常に簡単です。練習は名前、説明、そしてスクワットやベンチプレスのような単純な動きの写真です。

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

次に、私はトレーニングのリストを持っています。ワークアウトは、特定の担当者とセットで特別な順序で実行される一連の演習です。一つの運動は、単に運動1を使用してワークアウトが異なるパラメータ(担当者、セット、残りの部分)だからここに私はW1を持って

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" 
    ... 

と、多くのトレーニングで使用することができる。まず、あなたは運動1の12件のrepsを行い、その後、残りの部分60秒間、次いで運動6の6回の反復および30秒間の休息。

最後に私はプログラム/プランを持っています。プログラムは、あなたが従うことができる複数のトレーニングから構成されています。たとえば、あなたのプログラムは、月曜日、水曜日、金曜日に行うべき3つのトレーニングから成り立っています。

programs 
--p1 
    --name: "The Stack Overflow Fitness Plan" 
    --description: "I am a fancy text" 
    --workouts: 
    --w1: true 
    --w2: true 

上記のように、私はちょうどfirebaseにリレーショナルデータを載せています。これは正しい方法ではありません。私はこのデータをどのようにして平らにしなければならないのかに問題があります。たとえば、重複していますか?

私はプログラムの場所を照会してから実際に高価な読書(ベストプラクティスではない)を持っています。それをマップし、トレーニングを照会し、マップし、演習を照会します。それは非常に面倒なことになります。

いずれにせよ、大歓迎です。

答えて

0

normalizrライブラリを調べることができます。もともとは、APIとreduxを使って作業するのに役立つように設計されていました。非関連環境での重複と同じ問題が発生します。

基本的には、firebaseにマップとして格納された異なる種類のエンティティを持つことです。

const tree = { 
    exercises: { 1: { name: ... }, ... }, 
    workouts: { 1: ... }, 
    programs: { 1: ... }, 
} 

次に、各コンポーネントに対応するエンティティのサブスクリプションを作成させることができます。約束やストリームでは、それはかなりストレートです。

各リレーションシップは単純にArray内のIDであり、dbを読み書きするときにnormalizrライブラリを使用して正規化/非正規化を行うことができます。

このパターンを使用すると、簡単に一度のようなクエリを使用してのいくつかのエンティティを更新するためにfirebase update APIを使用できることに注意してください:

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