*この記事ではJavaScriptで書いていきます。
NoSQLについてはこちらの記事へ↓
https://qiita.com/Yu-kiFujiwara/items/c1c52495fd321373c544
##そもそもfirestoreってどういう形で保存するん?
firestoreはNoSQLの中でもドキュメント型と言われ、JSON形式のまま保存することができます。
firestoreではコレクション、ドキュメント、フィールド、データという4つの情報、
Key-Valueペアで構成されるデータを持つフィールド、フィールドを複数持つドキュメント、ドキュメントをまとめたコレクションという形でデータが構成されており、スキーマを決める必要がないため、自由にデータを保存することができます。
//書き込み
firebase.firestore().collection("auther").set({name: "太郎", age: 20})
//読み込み
firebase.firestore().collection("auther").where("name", "===", "太郎").where("age", "===", 20)
//更新
firebase.firestore().collection("auther").doc(1).update({age: 21})
##サブコレクションってなんなん?
また、firebaseにはサブコレクションという考え方もあり、
1つのコレクションにリレーションを組むような形でコレクションを持たせることができます。
DB構成は下記の通りです。
autherコレクションがpostコレクションを保有するという、
より現実に近いような形でDBを構成することができます。
//書き込み
firebase.firestore().collection("auther").doc(1).collection("post").set({text: こんにちは})
//読み取り
firebase.firestore().collection("auther").doc(1).collection("post").where("text", "===", "こんにちは")
//更新
firebase.firestore().collection("auther").doc(1).collection("post").doc(1).update({text: こんばんは})
##どう設計すべきか
・リレーションを組んでおらず、joinリクエストができないので一度にデータを取得できるようにデータを持つ
・データを重複して持つことを許容する
・データを更新する場合は重複したデータに対してそれぞれ更新リクエストをかける
RDBではNGとされている、これらのデータの持たせ方、更新の仕方が推奨されています。
##参照
https://www.footchantech.com/post/firestore_subcollection