Closed9
firestoreのネストはすべきか否か
- Firestore、構造的にネストしたくなるけど実はこれ全然すべきでないのでは?について考える
例:
ネストする場合
/users/{userId}/items/{items}
ネストしない場合
/users/{userId}
/items/{itemId}
としてitem
のドキュメント内にuserId
がある構造
/users/**/items/{itemId}
的な探索は難しい。
(一応collectionGroupではできるが、itemIdで引くことはやっぱり難しい)
一方、flatにしておけば
collection("/items").where("userId", "==", "user")
的なことで可能
例えばネストしてる場合itemId=10
にアクセスするためにはusers/20/items/10
などuserIdまで必要になる=URL構造としてもuserIdを含む形になる
ネストが有益なケースはなにか?
- 本当に子要素として扱い、それらを独立して取り出すことが無い場合(RDBにおけるJSON型的な)
確かに「部屋」と「チャット」みたいな構成であればネストされるのは自然そう
あとは、例えばmultitenancyのように/tenants/{tenant}/{someData**}
のような使い方でも問題は無いかもしれない(これはよさそう)
ネストした方がセキュリティルールを担保しやすい
このスクラップは2020/12/02にクローズされました