今回の記事から『Database』に関する記事をシリーズで書いていきます
今回は第1回目になります。
実は『Database』と一言で言っても、Database にはたくさんの種類が存在します。
Databaseを選ぶ時、まず問われることが『SQLベースかNoSQLベースか』になります
そこで今回の記事では、
SQLとNoSQLの違い、長所・短所にフォーカスを当てて書いていこうと思います
ではさっそく始めていきますね。
SQL・NoSQLデータベースの例
SQLデータベース | NoSQLデータベース |
---|---|
MySQL | MongoDB |
PostgreSQL | Redit |
SQLとNoSQLの構造の違い
ざっくりいうとSQLはテーブル型のデータベースで
NoSQLはSQLとは違うフォーマットで書かれたデータベース全て
のことになります
ではさっそく例を上げながら説明します。
あなたはWebショップを運営している店長さんです
とりあえずSQLかNoSQLかどちらを使えば分からないから、SQLベースのデータベースを作りました。
ただ、たなか太郎さんは、自分の住所を教えたがらず、住所の欄が空欄(null) になってしまいます。
また、やまだ花子さんからは、DMは家の住所よりむしろEmailの方に送ってもらった方が助かると言っています。
このような状態で、SQLベースのデータ(テーブル型の四角形のデータ)を作ろうとすると、データがないところは自動的に『null』が挿入されてしまい、良くない結果を招く原因となってしまいます。(Email がnull というアドレスに送られてしまったり)
一方、NoSQLベースのデータベースを使えば(例えばMongoDBはJSONフォーマットで格納されている)
後で新しい項目を追加したり、柔軟性という点では優れています。
フレキシブルにデータベースを作れるという点では、『NoSQL』に軍配が上がりそうですが、NoSQLがSQLに劣っている点はあるのでしょうか?
リレーショナル or 非リレーショナル
SQLとNoSQLを比較するときに、
リレーショナルか
非リレーショナルか
ということはどこかで耳にされたことがあるかも知れません。
先ほどのWebショップの運営でデータベースを作る例に戻りましょう
あなたは、それぞれのお客さんの個人情報・買ったもの・個数・価格などを盛り込んだリストを作ろうとしていますが、次の日に同じお客さんがまた別の物を買い、同じ顧客の名前・個人情報に加えてその日に買ったものをリストにする。。。
それは得策ではなく、
顧客情報リスト
商品リスト
オーダーリスト
と分けて書くほうが、理にかなっていますよね。
上のイラストのように、それぞれユニークなidでそれぞれのテーブルをつなぐような関連を持たせれば、うまくデータを管理する事ができます。
SQLベースのデータベースはこのように複雑な関連をそれぞれつないでデータを管理したい時などに、力を発揮します
このように相互の関連をつなぐことが得意な方のデータベースを
リレーショナルなデータベースと言います。
ただ、事前に『どのような構造(専門用語でスキーマと呼ばれます。)のテーブルにするべきか?』を考慮しなければいけませんが。
複雑な関連をつなぐのはNoSQLは可能ですが、苦手分野になります。
まとめ
SQL | NoSQL |
---|---|
テーブル構造 | ドキュメント・キーバリューペアー |
複雑な関連をつなぐのが得意 | 複雑な関連は苦手 |
事前に構造を考えないといけない | よりフレキシブル |