初心者向け学習方法一覧はこちら
この記事では、SQLとは何かについて学ぶ前に、データベース、RDB、NoSQLについて解説します。
データベースとは
SQLの説明に入る前に、まずはデータベースについて説明します。データベースとは、データを検索・管理しやすいような形式に整理したデータの集合体、または、データを格納するための「箱」のことを指します。
例えば、音楽コンテンツの場合、「曲名、アーティスト名、アルバム名、カテゴリ、配信日」などの情報にまとめて音楽の情報を整理したデータがデータベースと表現されているイメージです。
楽曲データ
楽曲ID | 曲名 | アーティスト名 | アルバム名 | レーベル | 配信日 |
1 | ドライフラワー | 優里 | 壱 | ソニー・ミュージックエンタテインメント | 2022 |
2 | 群青 | YOASOBI | THE BOOK | ソニー・ミュージックエンタテインメント | 2020 |
3 | 逆夢 | King Gnu | 一途/逆夢 | ソニー・ミュージックエンタテインメント | 2021 |
データベースにはいくつかの種類がありますが、長い年月、開発現場で標準で利用され続けているRDB (リレーショナルデータベース)と、近年の技術進歩の過程でトレンドになったNoSQLと呼ばれる概念のデータベースについて解説します。
RDB(リレーショナルデータベース)とは
RDBは日本語で関係データベースと言われ、テーブルと呼ばれる表形式のデータ群を複数管理し、テーブル同士の関係性を定義することで複雑なデータ処理を可能にしたデータベースの種類です。
代表的なRDBの製品には、Oracle Database(Oracle社)、MySQL (Oracle社がサポートするオープンソース)、SQL Server(Microsoft社)、PostgreSQL (オープンソース)が挙げられます。
RDBで扱うテーブルはそれぞれ、表形式で管理するため、Excelをイメージすると理解しやすいです。ただし、1テーブルで全ての情報を完結させずに複数テーブルに情報を分割するところがRDBで管理する上でのポイントです。
先ほどの音楽コンテンツを例に挙げると、実際の曲データを管理する際は、曲情報以外にも、アーティストや、アルバム、配信レーベルの情報などを管理する必要があります。
もし、1テーブルで全てのデータを管理した場合、配信レーベルやアーティスト名が変わった場合に該当するデータ全てを一括で書き換えなければなりません。
楽曲データ
楽曲ID | 曲名 | アーティスト名 | アルバム名 | レーベル | 配信日 |
1 | ドライフラワー | 優里 | 壱 | ソニー・ミュージックエンタテインメント | 2022 |
2 | 群青 | YOASOBI | THE BOOK | ソニー・ミュージックエンタテインメント | 2020 |
3 | 逆夢 | King Gnu | 一途/逆夢 | ソニー・ミュージックエンタテインメント | 2021 |
RDBでは、こうした曲に関わる情報を、曲、アーティスト、アルバム、レーベルごとのテーブルに分割し、テーブル同士の関係性を管理することができます。これによって、一括で更新する際に発生するデータの不整合や更新の負荷を防ぐことができるので、データのメンテナンス効率に優れています。
楽曲テーブル
楽曲ID | 曲名 | アーティストID | アルバムID | レーベルID | 配信日 |
1 | ドライフラワー | a1 | b1 | r1 | 2022 |
2 | 群青 | a2 | b2 | r1 | 2020 |
3 | 逆夢 | a3 | b3 | r1 | 2021 |
アーティストテーブル
アーティストID | アーティスト | レーベルID |
a1 | 優里 | r1 |
a2 | YOASOBI | r1 |
a3 | King Gnu | r1 |
アルバムテーブル
アルバムID | アルバム名 | レーベルID |
b1 | 壱 | r1 |
b2 | THE BOOK | r1 |
b3 | 一途/逆夢 | r1 |
レーベルテーブル
レーベルID | レーベル名 |
r1 | ソニー・ミュージックエンタテインメント |
ソニー・ミュージックエンタテインメントが社名変更しても、r1の値に変わりはないため、曲情報のテーブルを更新する必要はありません。
また、曲からアーティスト情報を参照する際には、アーティストIDを参照することで、紐づくアーティストの情報を取得できるようになります。
かなり簡略化して説明していますが、このようにデータ同士の重複を除外し、整合的にデータを取り扱えるようにすることをデータの正規化と呼びます。
このようにデータのテーブル同士の関係性を定義し、複数テーブルでデータを管理するのがRDBの特徴ですが、こうしたテーブルの設計を定義したり、操作するためには、SQLと呼ばれるデータベース言語を使う必要があります。つまり、SQLを学べば、RDBを操作することができるようになるということです。
RDBは、どの規模のデータを扱う際にもデータの一貫性が担保でき、メンテナンス性に優れていることから、開発現場では、主流のデータベースとして活用されてきました。
一方で、大規模データを扱うにつれ、データの一貫性を保つが故、分散処理ができず処理速度が遅くなること、厳密にテーブルの構造を定義する必要性があるため、データの拡張が容易ではないといったデメリットも存在しました。
NoSQLとは
NoSQLはNot Only SQLの略で、RDBに以外の選択肢として、新たに提唱された概念です。簡単に言うと、RDB以外のその他データベースを一括りにした概念です。
No SQL(SQLを使わない)ではなく、Not Only SQL(SQLだけでない)であることから、開発現場では、RDBのメリットを活かしつつ、扱うデータの特性に合わせて、RDB以外のデータベースの導入検討が進んでいます。
ここでは、代表的なデータベースの種類を4つ紹介したいと思います。
- KVS(Key Value Store)
- キーバリュー型
- 列指向型(ワイドカラムストア)
- ドキュメント型
- グラフ型
キーバリュー型
キーバリュー型とは、1つのキーに対して、1つの値を格納するというシンプルなデータベースです。配列[]
やハッシュ{}
といったデータ形式も1つの値となるため、実質複数の値を持つことができます。ただし、複雑なデータを保持するのではなく、シンプルな値を取り出す用途で利用されることが多いです。
列指向型
列指向型は、1つのキーに対して、複数の列を取ることができます。RDBでは行単位でのレコードを管理しており、行での追加・削除に適しています。列指向型では、情報の追加、削除の点でRDBに劣りますが、RDBよりもデータの集計など、列単位で把握したい情報を管理する用途で利用されます。
ドキュメント型
ドキュメント型は、JSONやXMLのデータ形式で記述したデータを扱うことに特化しています。スキーマ(データベースの構造)を定義しなくても、そのままDBに投入できることから、複雑なデータ構造や要件が変更される可能性があるデータを保持しておくことに向いています。
グラフ型
グラフデータベースは文字通り、データをグラフ上に管理するデータベースです。特徴的なのは、個別のデータを持つ以外にもデータ同士の関係性を管理することができる点です。SNSのフォロー、フォロワーの管理ができること以外にも、資金の流出、流入の記録から詐欺や脱税など犯罪捜査に用いられることもあります。
SQLを学ぶには
データベースの概念について学んだところで、実際にデータベースを操作できるようにSQLについて学んでいきましょう。
※Ruby on RailsにはActiveRecordという、データベースアクセスが行える便利なライブラリが存在します。つまり、SQLを意識しなくても開発は進めることができるため、Ruby on Railsを学習する上では、SQLの学習は参考程度でも構いません。ただし、将来エンジニアを目指すのであれば、データベースの知識は必ず、絶対に、身につけておきましょう。
また、RailsではデフォルトでSQLiteを利用しますが、ここでは、概念としてのデータベースとSQLの使い方をマスターできれば構いません。もちろん、利用するRDBによって使えるSQLが異なりますが、基本的なSQL文は同じです。プログラミング学習時点ではそこまで意識する必要はないことから、無料で最もメジャーなMySQLの学習を進めることをおすすめします。
プログラミングスクールの選び方
転職を検討中の方向け
フリーランス・副業で活躍したい方向け
教養・キャリアアップしたい方向け
給付金について詳しく知りたい方向け