私はFirebaseの周りを頭の中に入れようとしているので、私は自分のリレーショナルデータを正しく索引付けしていることを確認したいと思います。私はユーザーとアドレスの間に双方向の関係があり、どちらも1対1です。アイデアは、ユーザーノードが最初に電子メールだけで作成され、アドレスを追加するときにaddressIDのキーがユーザーノードに追加されると同時に、userIDのキーがアドレスノードに追加されるというものです。これは、Firebsaeの文書(下部)の「構造データ」セクションでの推奨方法と似ています。しかし、ユーザノード内のアドレスを識別し、アドレスノード内のユーザを識別するために、私は、自動生成されたキー(userAutoID:true、addressAutoID:true;ではなくuserAutoID、user:自動生成されたIDをキーとして使用すると、そのキーが何を表しているかがわかりません)。あなたはアドレスは、ユーザーのIDを所有し、ユーザーがアドレスIDを所有している見ることができるようにFirebase Swiftでのリレーショナルデータの正確なインデックス作成
次のようにJSONの構造は、(両方のノードが最上位ノードの子である)です。私がこれを達成するために使っていたコードは長引いているように感じられ、私はこれを間違った方法で行うことができます。このコードは、ユーザーが住所用のフォームに記入して送信ボタンを押すとトリガーされます。したがって、ユーザーノードはアドレスノードの前に存在します。私はforループを使用して、存在する各アドレスのキーを順番に取得します。次に、別のクエリーにフィードし、現在のユーザーのIDがuserIDキーの値として現在のアドレスノードに存在するかどうかを調べます。これが当てはまる場合、現在のアドレスのIDを、現在のユーザー関連ノード内のaddressIDの値に設定します。
ユーザーとアドレスのノードが非常に大きくなると、1つのコードから2つのクエリを実行すると高価になることがあります。どんなフィードバックでも大歓迎です!
1)イメージではなくテキストとしてFirebase構造を投稿してください。それは私たちが答えに再入力する必要性を軽減します。 2)あなたの質問はインデックス作成(つまりFirebaseインデックス)を指していますが、それはあなたが求めているものではありません。 3)アドレスノード*の前にユーザノードが存在するとの質問があるので、アドレスノードがまだ存在しない場合、ユーザのアドレスを検索するのはなぜですか?または、ユーザーがすでに住所を入力したかどうかを確認しようとしていますか?それはあなたが1-1のため、ユーザーノードにアドレス情報を格納しない理由はありますか?質問を明確にすることはできますか? – Jay
こんにちはジェイ、混乱して申し訳ありませんが、私はコードを再配置し、次にFirebase構造にテキストを使用します。上記のコードはボタンの中にありました。ボタンを押すとアドレスオブジェクトが設定され、直後に同じボタン内から上のコードが実行されました。あなたのアドバイスを読んだ後、私はユーザノードの下にアドレスを保存しました。 FirebaseがiOSドキュメントのより良い仕事をしてくれて、もっと多くの事例と実践を提供して欲しいと本当に思います。かなり新しいプログラミングの人として、私は彼らのドキュメントが悪いと言わなければならない。 –
これは1-1であるため、アドレス情報をユーザーノード内に格納できることに注意してください。しかし、1から多くまたは多くのものを必要とするときは、元の構造が不可欠です。データの非正規化は一般的には良い考えです。元々のFirebaseのドキュメントは、現在のものよりもずっと優れていましたが、この時点ではかなり弱いと私は同意します。 – Jay