質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Q&A

解決済

1回答

2687閲覧

firebase(cloud firestore) で 多対多でのリレーションを行いたい

keisei-001

総合スコア15

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

0グッド

1クリップ

投稿2020/06/15 16:01

編集2020/06/15 22:59

前提・実現したいこと

現在firebaseとnuxt.jsを使ってチャットアプリを作っています。

なお、今考えている仕様としては簡単に下記を想定しています。
・ユーザーがログインをする。
・ログイン後にグループを作成するかすでにあるグループに入れる
・グループの中にいるユーザーでメッセージを交わすことができる。

問題点・疑問点

firestoreでの多対多のリレーション方法がいまいち理解できていません。。
私が考えた構成は下記になります。

少しわかりづらいかもですが。。 users: collerction documentID: auto name: String email: String password: String avatorURL: String? groupIds: array groups: collerction documentID: auto  name: String  description: String  userIds: array  messages: subCollerction  documentID: auto  message: String

こちらでgroupsとusersのコレクションが多対多の関係にあると思うのですが、
groupsにあるuserIdsに対してはuserの個別のidを配列に入れる。
usersにあるgroupIdsに対してはgroupの個別のidを配列に入れる。
という風にしたら各グループやユーザーから任意のドキュメントにアクセスできるのではないかと思っています。
ですが、公式文を見ると個々のドキュメントでは1MG以上のデータを扱うべきでないとあり、一つのドキュメントに入れているuserIdsやgroupIdsの量が増えた時に問題が生じるのではないかと考えています。
このようなリレーションはどうかという一例をいただけると大変助かります。
どうかよろしくお願いいたします。

調べたこと

firestoreの公式
Cloud Firestoreを実践投入するにあたって考えたこと
こちらの記事がとても参考になると思っているのですが、まだ理解できていないです。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keisei-001

2020/06/15 16:28

失礼いたしました。こちら修正いたしました。
hoshi-takanori

2020/06/15 21:21

Firestore は NoSQL なので、SQL のようにテーブル間の関連を DMBS が保証してくれるわけではなく、あくまでもクライアント側のコードで頑張ってそのように見せてるだけ、ということだと思います。 あと、1MB 制限は個々のドキュメントの話で、サブコレクションは含まないようです。 https://stackoverflow.com/questions/47522984/are-cloud-firestore-subcollections-included-in-document-size-calculation
keisei-001

2020/06/15 22:41

@hoshi-takanori 文言修正しました。 『1MB 制限は個々のドキュメントの話で、サブコレクションは含まないようです。』 こちらについては公式文を見たのですが今回の例で言うと一人のuserがたくさんのgroupに所属をすると人rすのドキュメントのサイズが大きくなる、と思っておりそこのsizeが大きくなると思っているんですが違いましたでしょうか? 私の理解不足で申し訳ないのですが今回のチャットアプリという例でいうとどのような構造にすると良いのか一例をあげていただけると助かります。よろしくお願いいたします。
hoshi-takanori

2020/06/15 22:52

失礼しました。groupIds や userIds についてはおっしゃる通りドキュメントに含まれます。でも、id の配列 (map と書いてありますが配列ですよね) ならばそんなに大きくなることはないのでは。 NoSQL のデータベース設計については、私もそんなに詳しくないので…。
keisei-001

2020/06/15 22:59

いえ、私の書き方がよくなかったです。。ご指摘の通りmapと書いていましたがこちらはarrayの型にした方が正しかったです。修正しました。 一つの配列に各idを入れるくらいならいいんですかね。RDBと考え方が違うので自分の中で変なやり方をしている気がしていました。
guest

回答1

0

ベストアンサー

だいぶ時間経っているので質問者さんにはもう解決されているかも知れませんが、自分が参考になったURL貼っておきます
Firebase Cloud Firestore Many to Many Relationships
公式 配列、リスト、セットの操作

投稿2020/10/02 19:59

編集2020/10/05 14:35
takenm

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問