web-dev-qa-db-ja.com

Firebaseを生成キー(JS)を含むリレーショナルデータベースとして使用するにはどうすればよいですか?

Firebaseをバックエンドストレージメカニズム(JSON)として利用する簡単なJavaScript Twitterクローンに取り組んでいます。リレーショナルデータベース(SQL)に精通していますが、非リレーショナルデータベースには精通していません。外部キーの関係やテーブルの結合がないため、Firebaseでデータセットの構造を設計する方法を現在模索しています。

アプリには、userstweets、およびfollowersの3つのテーブルがあります。ユーザーはツイートを投稿したり、他のユーザーをフォローしたり、自分のツイートのフィードを表示したりできます。必要なテーブルをどのように結合するかわからないので、データ構造を作成しようとすると問題が発生します。たとえば、ユーザーフォロワー機能を実装するにはどうすればよいですか?

ここに私が自分自身に出発点を与えるために使用しているERDがあります:

ERD for app

私はこのJSON全体に頭を回そうとしているので、これはリレーショナルデータベースに関連付けることができる最も近いものですが、Firebaseの.Push()関数を使用して、リストのリストに追加します。データベース(Firebaseダッシュボードに表示):

Firebase attempt

Firebaseにはクエリメカニズムがないため、そのデータを「非正規化」することでこれを解決しようとする人がいます。ただし、これらの記事はすべて、主に2014年より前のものです。つまり、Firebasedidがクエリを追加するときです。そうは言っても、クエリを使用することがどのように役立つかは理解できず、生成されたキーで行き詰まっていると思います。

Firebase JSONリストを使用するには、データをどのように最適化すればよいですか?いくつかのドキュメントを読みましたが、探しているものと生成されたキーを使用するものを見つけることができませんでした。

何らかの方法で.set()メソッドを使用して、生成されたキーの代わりに電子メールアドレスをユーザーの「主キー」として使用する必要がありますか? [以下で説明するように、これは回避するつもりです。ありがとう@metame]

更新

これは私がデータ構造のために見ているべき以上のものですか?そして、キーでクエリしますか?

users: {
    Hj83Kd83: {
        username: "test",
        password: "2K44Djl3",
        email: "[email protected]"
    },
    J3kk0dK4: {
        username: "another",
        password: "33kj4l5K",
        email: "[email protected]"
    }
}

tweets: {
    Jkk3ld92: {
        userkey: "Hj83Kd83",
        message: "Test message here!"
    },
    K3Ljdi94: {
        userkey: "J3kk0dK4",
        message: "Another message here!"
    }
}

followers: {
    Lk3jdke9: {
        userkey: "Hj83Kd83",
        followerkey: "J3kk0dK4"
    }
}

他に何か含める必要があるかどうか教えてください!

12
Kendall

非リレーショナルデータベースまたはnoSQLデータベースでの関係の表現は、一般に、ドキュメントの埋め込み(行のnoSQL表現)またはサンプルソリューションで行ったようにドキュメント参照を通じて解決されます。

MongoDBサイトには、 モデル参照とドキュメント参照の1対多の関係 を含むすべての非リレーショナルデータベースにほとんど適用できる適切な記事がいくつかあります。

参照キーに関しては、一意であることが保証されているため、生成されたIDを使用することが通常はベストプラクティスです。

3
metame