Lesson 1

DBMSとは

Lesson 1 Chapter 1
はじめに

この Lesson では、データベースの基礎について学んでいきます。
データベース(DB)とは、簡単にいうと「蓄積されたデータの集まり」のことを言います。
そして、このデータベースを操作・管理するためのソフトウェアが「データベース管理システム(DBMS)」と呼ばれています。

システム開発において、データベースはなくてはならないものであり、この知識を身に着けることが重要となります。

データベースとは

データベース(DB: DataBase)とは、集約したデータを一定の形式で使いやすく整理して、データを検索できるようにしたものをいいます。 始まりは、第二次世界大戦後のアメリカ軍が、情報を効率的に共有できるようにしたことで誕生したと言われています。

データベースは身近にも存在し、例えば辞書などもそうです。 辞書は言葉を「あいうえお」の五十音順という規則に基づいて収録しています。 これにより、調べたい言葉が「データベース」の場合、1ページ目から順番に探すのではなく、 辞書の索引から「て」が何ページから始まるのかを調べることで効率的に探すことができます。

ITの分野においては、例えば、ネット通販などのサービスにおいても、商品情報を DB 化してどこの倉庫に何の商品が何個あるかなどの在庫情報を集めることで、注文されたらどの倉庫から発送するかなどを簡単に管理することができるようになります。 このように、データベースはシステムの開発において重要な役割を果たしています。

データベースの種類

データベースは、集約したデータを一定の形式で整理するものですが、この「形式」として、次のように幾つかの種類があります。

No 種類 説明
1 階層型 データをツリー状に繋げて管理する
2 ネットワーク型 データを網状に繋げて管理する
3 リレーショナル型 データを表形式で管理する
4 NoSQL SQLを使用しないデータベース(キー・バリュー型など)

以下、それぞれの種類について簡単に説明していきます。

階層型データベース

階層型データベースは、次の図のように、親ノード(※)が複数の子ノードを持つ形でツリー状に展開する形式となっています。

image_01.png

階層型データベースでは、子ノードは 1 つの親ノードしか持たず、データのアクセスルートが限定されることから、処理速度が速くなるというメリットがあります。
一方、プログラムがデータ構造に依存することとなり、また、子ノードは複数の親ノードを持てないなど、柔軟性に欠けるというデメリットがあります。

ノードとは

ノードとは、構成図の線と点のうち、点の部分を差す言葉となります。
よく出てくる用語ですので、意味を把握しておきましょう。

ネットワーク型データベース

ネットワーク型データベースは、次の図のように、子ノードが複数の親ノードを持つことができる網状の形式となっています。

image_02.png

ネットワーク型データベースでは、子ノードが複数の親ノードを持てることから、階層型データベースよりも柔軟な構成を持つことができます。
とはいえ、プログラムがデータ構造に依存することは階層型と変わらず、データベース形成の柔軟性に欠けるというデメリットは残ります。

リレーショナルデータベース

リレーショナルデータベース(RDB: Relational DataBase)は、以下のような表形式でデータを管理し、複数の表に関連付けをすることで 複雑なデータを扱うことができるデータベースの種類です。
複数の表に関連付けをすることとは、北○○子さんがハンカチを注文した場合、 注文表に、北○○子さんのユーザー番号と、ハンカチの商品番号を追加します。 すると、注文表に配送先の住所がなくとも、注文表とユーザー表のユーザー番号は関連しているため、 ユーザー表から配送先の住所がわかります。 また、現在最も主流になっているのが、リレーショナルデータベースで、本カリキュラムで使用するMySQLも リレーショナルデータベースです。

ユーザー表

商品表

注文表

本カリキュラムでは、主にリレーショナルデータベースを使用していくことになります。

NoSQL データベース

NoSQL は、SQL を使用しないデータベースとなります。一般には、リレーショナルデータベース以外のデータベースを NoSQL と呼んでいます。

例として、キーバリュー型の NoSQL の場合は、次のようなイメージでデータが格納されています。

image_03.png

NoSQL をデータの格納形式で区分すると、主に次のようなタイプがあります。

No 種類 説明
1 キーバリュー型 データをキーと値の1対1の形式で管理する。
2 カラム指向型 データをキーと値の形式で管理するが、1つのキーに複数の値を持てる。
3 ドキュメント型 JSON や XML などのデータ形式で管理する。

NoSQL データベースは、様々な構造のデータを高速で扱うことができ、柔軟性が高いことから、大規模なデータの管理をする際に利用されたりします。
なお、排他制御などが厳格でないことから、データの整合性を保つことが難しいなどのデメリットがあります。
NoSQLについては、Lesson 24 で使用します。詳細はそちらで解説する予定です。

Lesson 1 Chapter 2
DBMS(データベース管理システム)とは

DBMS(DataBase Management System)とは、日本語で「データベース管理システム」といい、その名のとおりデータベースの管理・操作をするためのシステムとなります。

なお、IT業界で「データベース」と言うときは、一般的にこの「データベース管理システム」のことを差す場合が多いです。

DBMS(データベース管理システム)の機能

DBMS(データベース管理システム)には、主に次のような機能があります。

  • データの操作
  • 欲しいデータを探すときに、システムに命令を出すだけで条件に一致したデータを取得してきてくれます。 また、データ更新や削除といった操作も命令を出すだけでシステムが代わりに処理を実行してくれます。 例えば、社員No.100の高橋さんの住所を変更したい場合、社員No.100の高橋さんを探して、住所を変更してくれます。 データ量が増えれば増えるほど、データを探すのが大変になりますが、システムがデータがどこにあるのか把握しているため、 データベースの操作が効率的になります。

  • データの制御
  • データの取得、更新といった操作を一人で行う場合は、問題ありませんが、 複数人で操作を同時に行なった場合、データに不整合が起きてしまいます。 例えば、商品Xの在庫が残り10個あります。 商品Xが10個入荷したため、Aさんが商品Xの在庫数を20個に変更します。 Aさんが在庫数を変更中に、Bさんが商品Xの在庫数を取得しますが、在庫数は10個と返ってきました。 商品Xの在庫は20個なのですが、Bさんは在庫数が10個だと勘違いしてしまいます。 そういったデータの不整合が起きないようにシステムが、 在庫数を20個に変更を完了してから、在庫数の取得をすることでデータの不整合を防いでくれます。 データを取得、更新するといった操作をシステムが制御してくれます。

  • データの復旧
  • 停電などでシステムが停止してしまった場合、データが消えてしまうことがあります。 それを防ぐために、システムがデータのバックアップ(予備)を取得することで、 もし、データが消えてしまっても、バックアップがあるためデータを復旧することができます。 また、バックアップは定期的に取得するため、バックアップができていないデータがあります。 バックアップを行ってから、次のバックアップを行うまでのデータはバックアップデータに 無いため、停電などによりデータ消えてしまうことがあります。 バックアップにないデータは、変更履歴によりデータを復旧します。 変更履歴には、どのような操作を行ったか記録が残っているため、 変更履歴を元に、操作を再実行することによりデータを復旧します。

  • データのセキュリティ
  • データベースには、多くの個人情報データがあります。 データベースに誰でもアクセスできてしまうと、個人情報が流出してしまうため、 誰がどのデータに対して、どのような操作ができるかユーザーのアクセス権を設定することで、 システムがユーザー認証をし、不正アクセスを防ぎます。 また、データの暗号化を行うことで、もしデータが漏洩しても情報として読み取れないため データが悪用されることはありません。

RDBMS(リレーショナルデータベース管理システム)とは

RDBMS(Relational DataBase Management System)は、前 Chapter で紹介した「リレーショナルデータベース(RDB)」を管理・操作するためのシステムであり、日本語で「リレーショナルデータベース管理システム」といいます。

RDBMS は、現在の DBMS の中での主流となっています。
以後、本カリキュラムで DBMS という場合は、この RDBMS のことを差していると考えてください。

RDBMS の種類

現在、様々な会社から RDBMS(リレーショナルデータベース管理システム)が提供されています。
代表的な RDBMS として、以下のものが挙げられます。

  • Oracle Database
  • SQL Server
  • MySQL
  • PostgreSQL

本カリキュラムでは、上記のうち MySQL を使用して学んでいきます。

Lesson 1 Chapter 3
SQL とは

RDBMS(リレーショナルデータベース管理システム)の管理・操作には、SQL(エスキューエル)というデータベース言語が使用されます。
この SQL を使用することで、データベースにテーブルを作成したり、データの追加・変更・取得などの操作を行うことができるようになります。

SQL の形式について

ここでは、SQL の「文」「句」「演算子」について見ていきます。
次の簡単な表をもとに、SQL の構造について確認していきましょう。

image_04.png

例えば、名前が「山田」という行(レコード)を取り出す SQL 文(命令)は次のように書きます(詳細は後から学習するので、ここでは大枠の構造を捉えるだけで大丈夫です)。

image_06.png

① 命令の種類の指定(文)
冒頭の「SELECT」は、SQL の「」と呼ばれるもので「命令の種類」を指定しています。 ここで使用した「SELECT」は「データベースからデータを取得する命令」となります。
② 条件の指定(句)
FROM」や「WHERE」は「」と呼ばれるもので「SQL 文を構成する要素」となります。
「句」は、「句 + 条件」という形式で、以下のような条件を指定しています。

  • FROM」句は、取得対象のテーブル名を「社員テーブル」と指定
  • WHERE」句は、取得データの条件として「名前 = '山田'」であることを指定

なお、「SELECT」にも句の役割があり、取得する列名を「番号、名前」と指定しています。
③ 演算内容の指定(演算子)
WEHER 句の「名前 = '山田'」のところで「=(イコール)」という演算子が指定されています。これは単純に「左辺と右辺が同じ」という意味です。
SQL には他にも様々な演算子があり、どのような演算(計算)を行うかを指定することが可能となっています(※)。

以上の指定から、取得できるデータは次のようになります。

image_08.png

SQL の演算子

演算子というと、比較演算子(=>=>)のようなものが一般的にありますが、SQL にはその他の様々な演算子があります。
1 例を挙げると、次のような IN 演算子があります。

image_07.png

この 番号 IN (1, 3) という指定で「番号が 1 か 3 であれば true」という演算が行われます。
演算子については、Lesson 7 で詳細を学習することになります。

SQL で使用できる「文」について

SQL で使用できる「文(命令)」には、おおよそ10数種類があります。
大きな分類として「DDL(データ定義言語)」と「DML(データ操作言語)」の 2 種類があります。

DDL(データ定義言語:Data Definition Language)とは、テーブルの作成(CREATE)・削除(DROP)やアクセス権限の設定など、データベースのデータ構造を定義する言語となります。

DML(データ操作言語:Data Manipulation Language)とは、既存のテーブルへのデータの追加(INSERT)・変更(UPDATE)・削除(DELETE)・取得(SELECT)など、データベースのデータを操作する言語となります。

SQL で使用できる主な「文」は下表のとおりです。

分類 コマンド 説明
DDL(データ定義言語) CREATE テーブル・ビューなどを作成する
ALTER テーブル・ビューなどを変更する
DROP テーブル・ビューなどを削除する
TRUNCATE テーブルを再作成する
GRANT アクセス権限を与える
REVOKE アクセス権限を取り消す
DML(データ操作言語) SELECT テーブルからレコード(行)を取得する
INSERT テーブルにレコード(行)を追加する
UPDATE テーブルのレコード(行)を変更する
DELETE テーブルのレコード(行)を削除する

新しく出てくる用語ばかりで、難しく感じるかもしれませんが、この Lesson 1 は概要を把握することが目的なので、おおよそのイメージだけを掴んでいただければと思います。

「句」について

先ほど説明したように「句」はSQL 文を構成する要素で、「句 + 条件」という形式で記述されます。
例えば、SELECT 文で使用される句については、以下のようなものがあります。

No 説明
1 FROM 対象のテーブルを指定
2 WHERE 取得するレコード(行)の絞り込み条件を指定
3 GROUP BY レコードをグループ化する条件を指定
4 HAVING グループ化したレコードの絞り込み条件を指定
5 ORDER BY レコードの並べ替え条件を指定
6 LIMIT レコードの取得数を指定

以上の「句」の使い方は、Lesson 6 などで改めて学習します。ここでは、こういうものがあるということだけ把握していただければ大丈夫です。

標準 SQL とは

SQL には、ANSI(米国国家規格協会)、ISO(国際標準化機構)によって制定された「標準 SQL」という規格があります。
最初の策定は 1986 年であり、何度かの改定を経て、現在の最新規格は SQL:2016 となっています。

ただし、標準 SQL の策定がされるまでの間、各 RDBMS(Oracle、SQL Server、MySQL、PostgreSQL など)ごとに、独自で SQL の拡張がされてきたという経緯があります。
現在、各 RDBMS においては、標準 SQL に準拠することを目標としているものの、それぞれが完全に準拠しているわけではなく、対応が区々となっています。

このカリキュラムで使用する MySQL にも、標準 SQL に準拠した機能のほか、独自拡張した機能が数多くあります。
上記の経緯を踏まえつつ、このカリキュラムでは、① 標準 SQL に沿ったもの、② おおよそどの RDBMS でも使用できるもの、を中心に紹介していくようにします。

本レッスンは以上です。