データベースのきほん #2-リレーショナルデータベースとは

こんにちは、4年目エンジニアの nakaSay です。普段は在庫管理システムのフロントエンド・バックエンドの開発を行っています。

ただいま「データベースのきほん」という書籍の内容をかい摘み、いくつかのパートに分けて記事を投稿しています。
本書籍は入門書であり、記事では以下のような内容を取り上げる予定です。気になった方は是非気軽にお立ち寄りください。

1. [データベースの全体像](https://qiita.com/nakaSay/items/2bfec4e0b56e2032db40)
1. [リレーショナルデータベースとは](#リレーショナルデータベースとは)
1. [データベースに関わるお金の話](https://qiita.com/nakaSay/items/d065b52c6fe55ba3070a)
1. [データベースとアーキテクチャ構成](https://qiita.com/nakaSay/items/a96293ce85f7e92766f0)
1. [DBMS を操作するときの基本知識](https://qiita.com/nakaSay/items/2c393f85ecec752390b8)
1. [SQL文の基本](https://qiita.com/nakaSay/items/86c49eec04e6e6748c9e)
1. [トランザクションと同時実行制御](https://qiita.com/nakaSay/items/df1073b0ed73d5389e60)
1. [テーブル設計の基礎](https://qiita.com/nakaSay/items/5b157c24f2237981592a)
1. [バックアップとリカバリ](https://qiita.com/nakaSay/items/cd6239ae500594b0784e)


# リレーショナルデータベースとは
リレーショナルデータベースは現在主流となっているデータベースであり、略して RDB とも表記されます。
「Relational」は英語の「relation(関係)」から派生した単語です。そのため、リレーショナルデータベースは「関係データベース」や「関係型データベース」と訳されることもあります。
ただし、リレーショナルデータベースの「リレーション」という言葉は、私たちが普段「人間関係」や「国際関係」というときに使う「関係」という言葉とは意味が異なります。
ここで言うリレーション(関係)という言葉は、数学で二次元表を表すときに使われる言葉なのです。
（厳密に言えば異なるのですが、ここでは同じと捉えても問題はないため、一旦は気にせず進めます）

つまり端的に言えば、「データを、二次元表を使って管理するデータベース」というのがリレーショナルデータベースのコンセプトになります。
第1章でデータベースのサンプルとしてアドレス帳を取り上げましたが、リレーショナルデータベースの利点は、こうした人間にとって自然で直感的に理解しやすい形式でデータを管理することを可能にしたことが挙げられます。

### それってすごいことなの？
リレーショナルデータベースのアイデアが提唱されたのは1968年のことなのですが、当時に二次元表でデータを管理し、ソフトウェアとしての機能（検索・更新）を提供するものはかなり画期的で革新性のあるものでした。
そして、プログラミング言語などを使わずデータ操作をできるようにしたことで、データベースの利用者は一気にすそ野が広がることになりました。つまり、ライトユーザーの獲得に成功したのです。

そしてそれを可能にしたのが、リレーショナルデータベースの持つ SQL という言語です。この章ではさわりの部分を簡単に見ていければと思います

## SQL 文の基礎知識
SQL(Stuructured Query Language)とは、リレーショナルデータベースがデータ操作のために備えている言語です。
リレーショナルデータベースには様々なソフトウェア製品があるのですが、その全てにおいて共通の SQL を使うことができます。
SQL 文を見て受ける第一印象は、英語の文に非常に似ている事です。
例えば「住所が東京都の人の名前を調べる」という操作を SQL で実行すると以下のようになります。
```
SELECT name
FROM アドレス帳
WHERE 住所 LIKE '% 東京都 %'
```
SELECT は「選択する」、FROM は「~から」、WHERE は「〜という場所」、LIKE は「〜のような、〜に似ている」という意味の英単語です（2つの「%」は「部分一致検索」を行うためのキーワードです）。

### テーブル
リレーショナルデータベースにおいて、二次元表はテーブル（table）と呼ばれます。例で言えば、先程取り上げた「アドレス帳」がテーブルの名前となります。
管理したいデータが他にもあれば、「顧客リスト」や「注文一覧」といったテーブルを作ることも可能です。
テーブルは、リレーショナルデータベースにおいてデータを管理する唯一の単位であるため、「どのテーブルにどんなデータを含めるか」というのはシステムの機能を左右する重要な意味を持ちます。
例えば、1つのテーブルに多くの情報を詰め込もうとするとメンテナンスが面倒になります。また、あまりにデータを厳密に分散させると、パフォーマンスが悪くなってしまいます。このように、テーブル設計は、データベースの設計において最も注意を払わなければならないポイントでもあります。


### 列、行
テーブルは二次元の軸を持つため、通常の二次元表と同様に「列（column）」と「行（row）」が存在します。
ちなみに、列を「カラム」と呼ぶことはよくありますが、行を「ロー」と呼ぶことはあまりないようです。
また、ある列と行が交差する1マスを指す特定の用語はリレーショナルデータベースにおいてはありません。Excel だと「セル（cell）」と呼び、便利なためここでも「セル」と呼ぶことにします。


## リレーショナルデータベースを扱うための予備知識
これまで「リレーショナルデータベース」という言葉を何気なく使ってきましたが、私たちが実際にリレーショナルデータベースを利用しようと考えた場合、特定のソフトウェア製品をインストールする必要があります。
よく使われているもので、「Oracle」や「MySQL」、「SQL Server」といった製品があります。
一定の条件下であれば無料で使う事のできる「MySQL」や「PostgreSQL」といった、オープンソースの製品も人気があります。

上記のような、データベースの機能を提供するソフトウェアのことを「DBMS（DataBase Management System）」と呼びます。
「データベース」と「DBMS」は実際の開発現場でもあまり区別されずに使われることが多いですが、厳密に見れば両者は若干異なります。
「データベース」というのは機能や構造を表す抽象的な概念で、「DBMS」はそれらを実現するために作られた具体的なソフトウェアを指します。
したがって、Oracle や MySQL といった具体的な製品は、「DBMSであってデータベースではない」というのが正しい区別になります。
例えば、「MySQL は DBMS の1つである」という表現は正しいのですが、「MySQL はデータベースの1つである」というのは「抽象」と「具象」のレベルを混同したちょっとおかしい表現ということになります。

### ソフトウェアとデータベースの関係性
先程は「データベース」と「DBMS」の区別について説明しましたが、次に他のソフトウェアとデータベースについての区別および関係性を見てきましょう。
システムというのはどんな単純なものであれ、データベースだけではなく様々なソフトウェアを」組み合わせて作り上げる必要があります（その作業を「SI（System Integration）」と呼びます）。
組み合わせはシステムの規模や目的によって異なりますが、大きく以下の3つに分類することができます。

①OS（オペレーティング・システム）
②ミドルウェア
③アプリケーション

データベースは OS とアプリケーションに挟まれた「真ん中（ミドル）」にあるので、「ミドルウェア」に属します。ミドルウェアには他にも高可用性を実現するクラスタウェアや、ビジネスロジックを実装するためのアプリケーションサーバなどがあります。
では、3つのレイヤの特性と関係性について見ていきましょう。

### OS とは何か
OS とはシステムが動作するための一番の土台となる機能を提供するソフトウェアです。有名なもので言えば、Windows や Mac の OS X、iOS や Android などです。
商用システムの開発の場面では、以下の3つがよく利用されています。

①Linux（例：ReadHat、CentOS）
②UNIX（例：HP-UX、AIX、Solaris）
③Windows（例：Windows Server シリーズ）

コンシューマ向けのデスクトップ OS として主流の Windows は、マウスでアイコンやウィンドウをクリックする GUI での直感的な操作が特徴です。
Linux は UNIX ベースに無償利用が可能な OSS として開発された OS で、どちらもコマンドを打ち込んで操作する CLI での操作が特徴です。

### ミドルウェアとは何か
ミドルウェアは直訳すると「真ん中のソフトウェア」です。データベースはここに属していて、OS 上にインストールすることで動作します。
ここで、「OS とDBMSどちらも複数あるならば、どういう組み合わせが良いのだろうか？」と疑問が出てくるかもしれません。
基本的に主要な OS に対応するものが作られているので、「Windows + MySQL」、「Red Hat + DB2」のように組み合わせの選択肢はかなり多くあります。
その中から組み合わせを選択する際は、以下の点を考慮して選択されることが基本です。
- 予算
- 機能
- 開発者と運用者のスキルマッチ

### アプリケーションとは何か
アプリケーションとは、」業務的な機能を持つようプログラムされたソフトウェアであり、それゆえユーザが最も頻繁にそうすることになるソフトウェアです。現在では多くの事務的な仕事がシステム化され、業務フローはプログラムによって自動化されています。例えば、代表的なところでは、「会計」「財務」「税処理」「小売り」「在庫管理」「顧客管理」「注文管理」などです。
こうした業務において、従来人力によって運用されていた処理（これを「ビジネスロジック」や「ビジネスルール」と呼びます）をプログラムによって自動化することで効率化、コスト削減するのがシステム化のメリットの1つです。

## まとめ
- リレーショナルデータベースの「リレーション」とは「二次元表」という意味である
- リレーショナルデータベースでは、二次元表のことを「テーブル」と呼ぶ
- リレーショナルデータベースでは、データを直感的に管理するための言語である「SQL」を持っている。これによって、専門家でなくてもデータの操作が可能になった
- 「データベース」と「DBMS」は同じ意味で使われることも多いが、本来は「抽象」と「具象」のレベルの違いを表している
- データベースは OS とアプリケーションに挟まれた真ん中のソフトウェア（＝ミドルウェア）である

## 参考

https://www.shoeisha.co.jp/book/detail/9784798135168