Firebaseのデータベース概要
Firebaseのデータベース概要
2020年9月29日
Firebaseのデータベース概要
Firebaseのデータベースはリレーショナル型ではない!
Firebaseのデータベース(Cloud Firestore)と一般的に良く利用されているSQLデータベースは少しコンセプトが違います。
- SQLデータベースはリレーショナル型データーベース
- FirebaseのデータベースはJSONベースのデータベース
一言で言えばこれが大きな違いです。
この記事ではさらに詳しく説明していきます!
SQLのデータベース
表をベースにしたデータベース!
一般的に良く利用されている SQL のデータベースはリレーショナルデータベースに分類されます。厳密な定義はここでは省かせて頂きますが、簡単に言えば表(テーブル)を基にしています。さらに、複数のテーブルを関連付けて使う様に設計されています。
データベース自体は、エクセルの表が沢山あるイメージです。
データベースを利用する上で、最初にこの表の「形」を決めておく必要があります。テーブルの「列」にどんなデータを割り当てるかを予め決めておいて、この列の情報を基に情報の出し入れをします。
SQL のデータベースでは、各列の要素を含んだ「行」の集まりが基本的なデータ構造になります。
Firebaseのデータベース
表の概念がありません!
Firebase のデータベースは「表」という概念がありません! ここが大きく違う所です。 Firebase のデータベースは「コレクション」という形でデータを管理しています。このコレクションに「ドキュメント」という形でデータを追加していくのが Firebase の基本的なデータ構造です。
- コレクション ー>テーブル
- ドキュメント ->テーブルの行のイメージ
で似ています。簡単に言えばテーブルと同じような形で利用する事も可能という事です。
大きな違いは、SQL の場合は、各行のデータを予め決めて用意しておかないといけないルールになっています。 例えば、テストの点数を管理するテーブルを作る場合は:
- 国語
- 英語
- 数学
のように強化を予め決めないといけません。
上の様に、3
教科決めておけば、数学のテストの点数が無くてもかまいませんが。このままでは、理科の点数を追加する事はできません。
ところが、Firebase のデータベースの場合は少し事情が違ってきます。
「ドキュメント」に含まれるデータの種類は「何でも良い」のです。
従って、「英語、国語」、「理科、社会」、「数学」などのように、必要なデータを事前に決める事なしに、
「コレクション」に追加できます。
学校のクラスでテストの点数を管理する場合には、各生徒の情報も必要です。生徒の情報には
- 出席番号
- 名前
があるとします。
SQL でデータベースを作る場合は 2
つのテーブルを用意します。
- 生徒のリストのテーブル
- テストの点数のテーブル
この2つのテーブルを「関連付けて」管理するのが SQL のデータベースです。
Firebase のデータベースの場合、
これを一つのコレクションでやってしまおうというのがコンセプトです。JSON
で階層的なデータを作ってそのデータをコレクションに追加すればよい事になります。
JSONとは
JavaScriptのオブジェクト!
JSON(JavaScript Object Notation)は、その名の通り JavaScript でのオブジェクトの記法です。一般的に他のプログラミング言語では「連想配列」と呼ばれています。
簡単に言うと、データにタグ(ラベル)をつけて管理しています
これを利用すると、世界中の人が開発して公開しているモジュールをあなたのサービスに組み込んで使うことができます。多くの人が共通して必要としている機能の多くが既に開発されて公開されています。これを使わない手はありません!
先ほどのテストの点数を例にすると
{ 数学: 60, 英語: 75, 理科:80 }
のような記法で表現できます。階層化というのはこれを生徒の情報と一緒にまとめたデータを作ることです。
{
出席番号:1,
氏名: "山田太郎",
成績:[
{理科:50,数学:40,国語:72},
{社会:90,英語:95,国語:80}
]
}
のように表記する事ができます。
(実際のプログラムでは漢字の変数は使えないので、アルファベット表記にする必要があります。)
このデータを直接 Firebase のデータベースに入れる事ができます。
Firebaseのデータベースの魅力
SQLのデータベースにはない魅力があります!
JavaScript でプログラムを書く場合、当然ですが、JSON 形式のデータを扱うのは簡単です。 JSON をそのままデータベースに出し入れできるので、コードもシンプルにすることが可能です。
上に示したデータ構造を使えば生徒毎のテストの点数の管理は簡単です。一度に必要なデータを全て取得できるからです。
もちろん、一般的な SQL と似たような構造にするために、生徒のコレクションと、テストの点数のコレクションを分けて作る事も可能です。SQL のデータベースの場合 2 つのテーブルを合わせたクエリーも書けますが、Fiebase のデータベースの場合は別々のクエリーでデータを取得する必要があります。
簡単に Firebase のデータベースの魅力をまとめると
- 事前にデータの項目を決める必要がない
- 階層のデータも一つのドキュメントで扱える
扱うデータとその処理によって、SQL のデータベースを使った方が良い場合もありますが、 多くの Web のサービスやアプリを作る上では問題になる事は殆どありません。
都合の良いのが、事前にデータの項目を決める必要がない点です。 SQL のデータベースでも後から新規のデータ項目の追加は可能ですが、 複数のテーブルを組み合わせた複雑なクエリーを使用しているケースも多く、 テーブルの変更はクエリーに変更が必要な場合もたくさんあります。
Firebase の場合、複雑なクエリーを組めない代わりに、 クエリー自体はシンプルなので影響が少なくて済むというメリットもあります。
後から機能改善のために、データの項目を追加しても、 コードへの影響を少なくできるのは大きな魅力です。
コメント
コメントを投稿