uwu

プログラミングの備忘録を書いています。誰かの為になれば幸いです

Firebase Cloud firestoreの公式動画まとめ1

こちらの記事は公式のColud Firestoreの動画を見たただのまとめになります。
この動画は4年前のものにはなりますが、
現在作っているアプリでFirebaseのDBを使いたいと思っているので勉強してみました!
気付かずずっと英語で見てましたがこの動画のみ日本語字幕もあるみたいです。


公式の動画↓
www.youtube.com
※この記事で使われている全ての画像はこの動画内から切り抜いたものです。



MySQLSQLなどのリレーショナルDBとの違い
  • リレーショナルDB

それぞれのテーブルにそれぞれのスキーマがある
それぞれのカラムで制限されたルール(各フィールドのデータ型やデータの大きさ、主キーの選択など)がある
'Users'、'Projects'など1つのオブジェクトにつき1つのテーブルがある
他のテーブルと紐づけするにはもう一つの紐づける用のカラムを作成する(紐づけをリレーションと呼ぶ)



例として、レストランのレビューサイト用のDBを見ていきます。






レビューがどこのレストランのものなのかを知るためには
「Restaurants」と「Reviews」を紐づける必要があります。
この例では、「Reviews」のカラムResturants_FK(foreign key)に
レストランのIDを登録することで紐づけをしています。



また、レビューを書いたのが誰なのかを知るには
「Reviews」テーブルのAuthor_FK(foreign key)カラムに
レビューを書いた人のIDを保存することで可能にしています。




リレーショナルDBでは欲しい情報を手に入れるために
SQLのJOINを使って情報を取得します。



  • NoSQL DB

NoSQL DBはスキーマレスDBです。つまり、データベースの階層がなく、
各フィールドのデータ型やデータの大きさ、主キーの選択などの情報も必要ないことを意味します。
オブジェクトが必ず同じフィールドをを持つ必要もありません。
リレーションを持たないのでスケールアウトやスケールアップがしやすいです。




また、レストランのレビューサイトのDBを例に見ていきます。







スキーマレスDBの良いところは簡単にDBの構造を加えたり、変えたりすることができるところです。
例えば以下の画像のように「Noise_level」という値を新たに加えたいとします。





これを加えても、今までのレストランには値を加える必要がありません。
下の画像のようにまったく違う情報をいれることもできます。







NoSQL DBはSQLがありません。



下記の画像のようにレビューを取得したい場合、
reviews.where("Rest", '==", 24(レストランID))とすることで取得できます。





しかし、ここから更にレビューを書いたのが誰なのか、ユーザーの情報を取得したいとしましょう。
その場合このように何度にもわけて取得するのはよくありません。






この問題はユーザーの情報を「Reviews」にコピーして保存することで解決します。





でも、もしユーザーが名前を変えたりしたら、「Reviews」に
コピーしたユーザーの情報を変えなければいけなくなります。



そういったデメリットもありますが
それ以上に1つのテーブルの中に全ての必要な情報が入っていることは物事を簡単にします。
JOINを使って複数のテーブルからデータを取得しなくていい分データベースの読み込みが早いです。


Cloud Firestoreのドキュメント、コレクションモデル

Cloud Firestoreはドキュメントとコレクションで成り立っています。




ドキュメントはJSONオブジェクトと似ており、key:valueの値で構成されています。
valueには文字列、数値、バイナリデータ、JOSNのmap型などなんでも入れることができます。



コレクションはドキュメントを入れるコンテナーです。



Colud Firestore4つのルール
  1. コレクションの中にはドキュメントのみ入れることができます。
  2. ドキュメントのサイズは1MBまでで、これを超える場合分割する必要があります。
  3. ドキュメントの中にドキュメントを入れることはできません。ドキュメントの中にサブドキュメントを入れることはできます。
  4. Firestore Rootにはコレクションのみが入ることができます。

以上のルールがあるので、データを取得する時は
コレクション→ドキュメント→サブコレクション→ドキュメントと
このように欲しいデータを含むドキュメントにたどり着くまで指定を繰り返します。





これだとわかりづらいのでこのように取得したい
データまでのパスを指定して書くこともできます。






2へ続きます。