データベースとは【初心者にもわかりやすく解説】

2018年11月27日火曜日

IT

データベースを破壊する男性

皆さんは、「データベース」という言葉を、聞いたことがあるでしょうか。


私生活においても「求人情報データベース」や、「論文データベース」などのように、「豊富な情報が入っている」というニュアンスを込めて、言うことがありますね。

紙の住所録などにも「データベース」という言葉が使われることがあります。



しかし、IT業界で言うところの「データベース」とは、ソフトウェアの種類を指します。

この「データベース」というソフトは、本当に様々な場面で私たちの生活を支えてくれています。

しかし、日常生活で私たちが「データベース」を直接操作する場面は、まずないでしょう。

それは、どうしてなのでしょうか?



今日はITエンジニアでなくてもわかるように、「データベース」というソフトウェアがどのようなものなのかを見ていきましょう。


データベースとは、何に使われるもの?


読書する女性

データベースの役割は、一言で言うと「データを保管しておくこと」です。

たとえば、皆さんは「Amazon」「楽天」などのネットショップでお買い物をされることはありますでしょうか。

これらの商品の情報も、普段は「データベース」と呼ばれるソフトウェアを用いて保存されています。


もし、ネットショップで「本」が販売されているのであれば、その本の「題名」や、「値段」「在庫の数」などの情報を、何らかの形で保存しておく必要があります。

その時に、このデータベースと言うソフトが、責任を持ってその情報を保持しておいてくれるのです。


他にも、たとえば皆さんが銀行のATMにお金を預けたとき、皆さんの銀行口座にいくらの残高があるのか、銀行のシステムは管理をしなければいけません。

「口座番号」「利用者の氏名」「口座の残高」「普通預金なのか当座預金なのか」
そういった情報も、全てこの「データベース」というソフトウェアの中に保管され、管理されているのです。



なぜデータベースが必要なの?


データベースを用いて実現されている金融システムの例

なぜ「データベース」などというソフトを、わざわざ使う必要があるのでしょうか?


たとえばあなたがパソコンを使って何か文章を書いたとき、普通にファイルを保存すれば、次にそのファイルを開いた時も同じ情報が見られると思います。

「データベース」などというものを使わなくても、ちゃんとあなたのパソコンの中に保存ができているのです。



わざわざ「データベース」などという特別なソフトウェアを使わなくても、普通にコンピューターの中に、ファイルとしてデータを保存すれば、事足りるのではないでしょうか。


実は通常、「データベース」と呼ばれるソフトウェアには、ただ単にデータを保存しておくだけでなく、ある特別な機能が備わっています。


それは、「トランザクション管理」と呼ばれる機能です。



トランザクションとは


お金を持った少女

英単語の「transaction(トランザクション)」は、「処理」を意味する言葉ですね。

その名の通り、データベースにおける「トランザクション」も、一つの「処理」を表しています。



たとえば、「Amazon」「楽天」「一冊の本を買う」という「処理」

「銀行口座から、2000円引き出す」という「処理」

コンビニのレジで、「おにぎりが3個売れた」時の「処理」



データベースに登録されている情報に、何らかの変更を加えるような「処理」を、「トランザクション」と呼びます。


データベースはこの「トランザクション」が行われるとき、それを効率よく、正確に管理してくれるという点で優れているため、ありとあらゆるシステムのデータの管理に利用されているのです。

具体的には、以下のACID特性と呼ばれる性質を満たすように、トランザクションの管理をしてくれます。


ACID特性


キーボード

ACID特性とは、トランザクションが満たすべき性質を表した言葉で、具体的には以下の4つのことです。

  • Atomicity(原子性)
  • Consistency(一貫性)
  • Isolation(独立性)
  • Durability(永続性)


上記の4つの性質の頭文字をとって「ACID」と名付けられたのですが、何やらよく分からんですね。

一つずつ内容を見ていきましょう。


Atomicity(原子性)


切断

データベースに保存されている情報を変更するような処理には、「原子性」という性質が求められます。


変な言葉ですね。


「原子」は化学の勉強で出てくる、いわゆる原子のことです。

「物体を細かく細かく分割していくと、いつか、それ以上分割できない細かい粒子に行き着く。それが「原子」である。」

なんていう風に、化学の授業で習ったような気がします。



それと一緒で、データベースに変更を加える「処理(トランザクション)」も、「これ以上分割できない」ものなのです。

何があっても、分割してはいけないのです。


どういう事かというと、たとえば、あなたがATMで、誰かの銀行口座に対してお金を振り込むとき、「お金を振り込む」という処理は、部分的に実行されては困る処理です。

「部分的に実行する」とは、たとえば、「あなたの口座からお金はマイナスされたけど、振り込み先の口座にはそのお金が加算されていない」というような状態を表しています。


「あなたの口座から、誰かの口座にお金を振り込む」という処理は、「あなたの口座からお金をマイナスする」という処理と、「そのマイナスされた分のお金を、振込先の口座にプラスする」という2つの処理が、セットで行われなければいけません。


たとえその「振り込み処理」の最中に、雷が落ちて停電したとしても、その2つの処理は、セットで行われなければいけないのです。


そして、もしトラブルによってその処理が完了できないときは、「そもそもその処理自体を、両方とも無かったことにする」必要があります。

もし片方だけ中途半端に実行されたら、あなたの口座からマイナスされたお金は、時空のはざまに消えてしまいますから…


このように、トランザクションの「原子性」を保った形で処理が実行されることを、データベースは保証してくれています。

データに対して、こういった制御を行ってくれる機能が備わっているため、データベースは広く使われているのですね。


Consistency(一貫性)


これは、保存されているデータの整合性が保たれることを保証するための性質です。

同じ人の口座の残高を見ているのに、銀行のATMから見る時と、コンビニのATMから見る時で残高の金額が変わったら、混乱してしまいますね。

「整合性が保たれる」とは、少し漠然とした言い回しですが、こういう風に矛盾なくデータが保管されていることも、データベースの重要な性質の一つです。


Isolation(独立性)


孤独なハリネズミ

「独立性」とは、2つ以上のトランザクションが発生したとき、それらの処理の途中経過は相互に影響を及ぼさない、ということを意味しています。

これはどういう事かというと、たとえば一つの銀行口座に対して「引き出し」「振り込み」が同時に行われた時、内部のプログラムの事情によって、それらが関連し合ってしまい、残高にズレが出てしまったりしてはいけないわけです。

「引き出し」「引き出し」で、独立して正確に行われ、「振り込み」「振り込み」で行われなければいけないのですね。

それらは関係がない、別の処理ですから。



もちろん、「引き出し」処理を2回行ったとき、1回目の「引き出し」で口座の残高が空っぽになってしまった場合、2回目の引き出しはできません。

「それは2つのトランザクションが、関連し合っているのではないか?」と考えてしまいそうです。


ただそれは、1回目のトランザクションの「結果」が、2回目のトランザクションに影響を及ぼしているということであり、そのトランザクションの「途中経過」が影響を及ぼしている訳ではありません。

「2つ以上のトランザクションが発生したとき、それらの処理の途中経過は相互に影響を及ぼさない」ということを覚えておいてください。


Durability(永続性)


データベースに登録されているデータは、一度処理が確定したら、確実に保持され続けなければいけません。

つまり、この「永続性」とは、「登録したデータが消えない」という性質を表しています。





上記の4つが「ACID特性」と呼ばれる性質です。

データベースにおける「処理(トランザクション)」は、これらを満たすように作られているのです。


「なぜデータベースが必要なの?」という最初の問いに戻ると、それは、「トランザクションのACID特性を保証してくれるから」というのが、一つの大きな理由です。





IT業界で言うところの「データベース」という言葉は、ほとんど全ての場合「DBMS(データベース管理システム)」というソフトを指しています。

「管理システム」ですから、保存されたデータを「管理する」機能を備えたソフトウェアのことを、「データベース」と呼んでいます。


そしてその「管理する」という言葉の中には、「ACID特性」を保証した形で処理を行う、という意味も含まれています。



私たちは、データベースを使う機会はあるの?


データベースについて考える女性

もしあなたがエンジニアやプログラマーでないのであれば、データベースを直接操作する機会は、まずないと考えて良いと思います。

それは、この「データベース(管理システム)」と呼ばれるソフトウェアが、「ミドルウェア」と呼ばれるソフトウェアに分類されることに起因しています。


アプリケーションとミドルウェア


一般の方が普段使われているソフトウェアは、ほとんどの場合、「アプリケーション」と呼ばれるものです。

この「アプリケーション」という言葉に関しては、以前「アプリケーションの語源は?」という記事の中でご説明をしているので、ご興味がある方は、そちらもご参照下さい。



「application(アプリケーション)」とは、「応用」という意味の英単語ですが、「ミドルウェア」などと呼ばれるソフトウェアから提供されている機能を「応用」して、私たちにも使いやすいような機能を提供してくれているのが、「アプリケーション ソフトウェア」と呼ばれるソフトです。


つまり「データベース」などの「ミドルウェア」と呼ばれるソフトを使うのは、多くの場合、人間ではなく「アプリケーション」と呼ばれるソフトウェアです。

ですから、普通の人がデータベースを直接操作することはほとんどなく、アプリケーションを介して、データベースを操作することになるのです。



もちろん、エンジニアやプログラマーであれば、そのアプリケーションを作り上げる過程で、データベースを操作しなければいけない場面もあります。


実はその際に用いられる、特殊な言語もあります。
いわば、人間がデータベースに指示を与えるための言語です。


その言語は、「SQL」と呼ばれています。



SQLとは


データベースにSQLを発行する牛

先述の通り「SQL」とは、「エンジニアが、データベースに対して指示を与えるための言語」です。


たとえば、データベースに対して、「部署内の、社員番号が20番の人の名前を教えて!」などと命令する時は、以下のようなSQLを使います。


「SELECT ename, deptno FROM emp WHERE deptno=20;」


暗号みたいですね。

こういう文章をデータベースに対して入力すると、その命令に応じた結果を、データベースが教えてくれるのです。



このように私たちエンジニアは、「SQL」と呼ばれる言葉をデータベースに入力することによって、いわばデータベースと会話をしているのです。

ニヤニヤしながら。

気持ち悪いですね。


SQLにはどんな種類があるの?


「SQL」と呼ばれる言語には、以下の3種類があります。


  • DDL(データ定義言語)
  • DML(データ操作言語)
  • DCL(データ制御言語)


これだけでは、何が何だかわかりませんね。

一つずつどのようなものか、簡単に見てみましょう。


DDL(Data Definition Language)


「DDL」は、データベースにデータを登録するための基本となる「表」を作成したり、削除したりするための言葉です。

「社員を管理するための表が必要だから、社員表を作っといて!」

とか、

「会社の部署毎の情報を管理したいから、まずは部署一覧を作っといて!」

というように、「表」の作成をデータベースに依頼したりできます。


この時、データベースは、「表」を作るだけで、その中に具体的なデータは書き込みません。
たとえば社員表であれば、「一旦の大枠だけ作るけど、具体的な人名とか、社員番号とかは、まだ空欄にしておくね」という状態。


また、
「うちの本屋は、今後マンガを一切取り扱わないことにしたので、もう「マンガ管理表」は削除しといて!」
などというように、表の削除もデータベースにお願いできます。



そして、エンジニアの間ではこの「表」は、「テーブル」という言葉で呼ばれることが多いです。



DML(Data Manipulation Language)


上記のDDLを用いて作成した「表(テーブル)」に対して、実際にデータを登録したり、登録されたデータに変更を加えたりするのが、この「DML」と呼ばれるSQL言語です。


たとえば、上記で作成した「社員表」に対して、

「社員番号1352番の、吉田花子さんを新しく登録しといて!」

などということを命令するのが、この「DML」です。



また、このDMLでは

「吉田花子さんが結婚して、藤田花子さんになったから、名字を変更しといて!」

なんてことも命令することができます。



DCL(Data Control Language)


「DCL」は、データベースの付加的な管理を行うためのSQL言語です。


たとえば、

「社員表には個人情報が含まれているから、権限のある社員以外からは、そのデータは見えないようにしといて…」

など、単純にデータを管理する機能以上の制御を行うことができます。


また、上記でご説明した「トランザクション」の制御なども、この「DCL」を用いて行われます。





しかし、これらの「SQL文」は、エンジニアでなければ、まず使うことはありません。




使われる機会としては、プログラマーが「アプリケーション」を作るとき、この「SQL文」を、プログラム内に埋め込むのです。


「ユーザーが登録ボタンを押したとき、データベースにこのSQL文を投げて、データを登録してもらう」などという命令を、あらかじめプログラムの中に書いておいているのです。

ですから、アプリケーションを使う人たちは、別にSQL文なんて知らなくても、データベースを操作するような処理を行うことができるのです。


まとめ


薄いクラウドと日差し

如何だったでしょうか。

「データベース」は、「ほとんど全てのITシステムに使われている」と言っても過言ではないほど、広く使われているソフトウェアです。
(もちろん、例外もありますが。)


それだけに、一般の方でも聞く機会がある言葉だと思います。
しかし、その実態は、中々見えにくいものがあります。


その原因は、「データベース」と呼ばれる「ミドルウェア」はシステムの利用者が直接操作するものではない、ということにあります。


「データベース」とは、「アプリケーション」から操作されることを想定されて作られたソフトウェアであり、人間が直接使うことを、あまり想定していないのです。



例外的に、エンジニアが「SQL」と呼ばれる言語を用いて「データベース」に対して命令することがありますが、一般の方が「SQL」を使う機会は、まずないでしょう。



それでも、「データベース」は、私たちの生活に無くてはならないものになっています。

私たちが「Google」や「Yahoo!」の検索エンジンで調べ事をするときも、銀行でATMを使うときも、「Amazon」や「楽天」で買い物をするときも、電子メールを読むときも、クレジットカードで支払いをするときも、いつでも「データベース」が、陰でデータの管理をしてくれているのです。


ぜひ、その機能の概要や、どのように私たちの生活を支えてくれているのかは、何となく理解しておきたいですね。


この記事が少しでも、皆様の学習のお役に立てば幸いです。
最後まで読んで下さり、ありがとうございました。