こんにちは。
産婦人科医で人工知能やデータサイエンスの研究をしているTommy(Twitter:@obgyntommy)です。
本記事では、SQLの学習をしたい入門者の方向けに、データベースの基本や概要についての学習をしていきます。
データの管理には、主にファイルとデータベースを使う方法があります。
データをファイルで管理をした場合、1つのファイルで管理するとファイルのサイズが大きくなり、開くだけで時間がかかる場合があります。
その結果、データを検索したくても時間がかかる事があります。
また、複数のファイルで管理をした場合、それぞれのファイルにまたがってデータを確認する必要がある事があり、非常に大変です。
データベースを使うと、データを1つで管理(一元管理)する事が可能ですし、検索も高速にできます。
以下の図がファイル管理とデータベース管理の違いを表しています。
実務では、様々なシーンでデータベースが使われており、データを扱う方はデータベースの取り扱いについて避けては通れません。
本記事では、データベースの概要について学習していきましょう。
ここで本記事の学習到達目標です。
本記事の学習目標
- データベースの概要の理解
- データベースを扱うエンジニアの仕事の概要
- データベースの型の種類の把握
- DBMSの製品の種類の把握
- リレーショナル型データベースのキーの理解
- SQLについての概要の理解
では早速、学習していきましょう。
データベースとは
データベースとは、データを扱い易いように整理し、管理をするものです。
データのやり取りは、データーベースマネージメントシステム(DBMS:database management system)が行います。
以下の様なイメージです。
利用者はDBMSに「処理要求」を行います。そうすることで、利用者はデータの管理方法を気にせず、データを取得し活用することに注力する事ができます。
データベース化のメリット
データベース化すると次のようなメリットがあります。
データベース化するメリット
- その①:複数のデータをまとめて管理できる
- その②:欲しい形のデータを取得しやすい
- その③:データの取得が早い
- その④:データの不整合が起きにくい
各々について見ていきましょう。
その①:複数のデータをまとめて管理できる
ファイルはいろいろな箇所に保存されます。
これらのデータからまとめて、欲しい形のデータにすると大変ですね。
フォルダやファイル名を決めて保存していても、それぞれのファイルをまとめるのはとても大変です。
データベースであれば、1つの場所で管理が可能になります。
欲しいデータを取得しやすい
データベースであれば、大量に保存されているデータから選択、結合、並び替え、計算などをすることで、簡単に欲しいデータが取得できます。
ファイルでは自分でデータを取得する必要がありますが、データベースでは、DBMSが行ってくれます。
データの不整合が起きにくい
データベースではデータが不整合が出ないように処理します。
良く例えに出される銀行口座の例を紹介します。
データを利用するときに同時に処理される場合がある訳です。
ちょうど以下の様なイメージです。
例えば、1000円入っている口座に、2人が同時に「200円振込」「100円引出」をしたとします。
左の場合、それぞれが残金を取得して更新するまでは、1000円なので1000円を元に計算します。
そのため、データ更新するタイミングによって、1200円になったり900円になったりします。
右の場合は、データを更新するときは必ず他の人が扱えないようにロックしてから、更新します。
更新が完了するまではロックしておいて、その処理の間は待って貰います。
そうすることで、データに不整合が起きないようにできます。
データベース化のデメリット
データベース化では以下のようなデメリットがあります。
データ化のデメリット
- データベース管理の知識が必要
- SQL文の知識が必要
データを管理する人は、データベースについての知識を持った上で、データを使ってもらえる様に「設計」「管理」「運用」をする必要があります。
また、データ使う人はSQL文と言う言語を使わないとデータが取得できません。
SQL文でなくても、GUI( Graphical User Interface:ソフトウェアの操作画面)でデータを見ることも可能です。
しかし、SQL文を知っておいた方が柔軟なデータ取得ができるでしょう。
SQL文については、後ほど解説していきます。
DBMSの役割
データーベースマネージメントシステム(DBMS)は、ユーザーから処理要求を受けて、それに応じて、色々な処理をユーザーの代わりに行ってくれます。
例えば、以下のような処理です。
DBMSの様々な処理
- データの入力、更新、削除
- データの並び替え、検索
以下の様なイメージで捉えて下さい。
ストアドプロシージャー
ストアドプロシージャーはDBMSへの処理をまとめて登録しておける機能です。
プログラミングのように条件分岐や繰り返し処理が使えるのも特徴です。
何回も処理を要求する必要がなくなるので、処理が早くでき、毎回決められた処理を実行してくれます。
データベースエンジニアの仕事の概要
データベースを専門で扱うエンジニアは、データベースを用意して、データを入れる箱を作って"終了"と言うわけにはいきません。
他にも、以下のような色々なことが求められます。
- 使いやすいような設計
- データの更新頻度、容量からハードウェアを決めて運用
- データのバックアップなど保守、運用
- データを公開するためのセキュリティ、障害対策
これらには、データベースのソフトウェアの知識を専門に必要とされ、高度な知識と経験が必要となります。
データベースの型の種類
DBMSにはデータの管理の仕方で、以下のようにいくつか種類があります。
そのうち一般的に使われているのは、リレーショナル型データベース(RDB:relational database)です。
DBMSの "型の種類" についてまとめてみましょう。
DBMSの型の種類
- リレーショナル型
- 階層型
- ネットワーク型
- オブジェクト型
- NoSQL
各々について一つ一つ見ていきましょう。
リレーショナル型
ほとんどのデータベースがこのリレーショナル型データベースを採用しています。
2次元の行列のデータ構成されています。
エクセルなどで馴染みのある表データです。例えば、以下の図を見てみましょう。
表データのことをテーブルと呼び、データベースにはこのテーブルがたくさん入っていて、テーブル同士が連携(リレーション)して動きます。
連携というのは、テーブル同士を列の値で繋ぐことです。
データを取得するときは列同士を繋いで、欲しいデータを取得します。
データ取得するときなどの操作は、SQL文で行います。
データベースについての説明は大抵、このリレーショナル型データベースのことをを説明しています。
本記事でも、このデータベースについて説明していきます。
階層型
ディレクトリ のような階層構造となっているデータベースです。
親:子
が 1:多
の関係になります。
例えば、店 1
に対して料理AとBがあるといった関係です。
この場合、店 1
の料理B、店 2
の料理Bのようにデータの重複が生まれるデメリットがあります。
ディレクトリ の階層構造とはWindowsのエクスプローラなどで見る階層構造を意味しています。
以下の様なイメージです。
ネットワーク型
階層型では 親:子
が 1:多
でしたが、多:多
の関係もあります。
例えば、料理Bは店1だけでなく、店2や飲食店とも繋がる事ができます。
こうする事によって、階層型のようなデータ重複がなくなります。
オブジェクト型
オブジェクト(物)を単位にデータを取り扱うデータベースです。
オブジェクト指向プログラミングと構造が同じなので、Java、Pythonなどの言語と連携がしやすいです。
以下の様なイメージです。
NoSQL
NoSQL(Not only SQL)は比較的新しいデータベースです。SQLを使わないデータベースを指します。
NoSQLのメリットには以下のようにいくつかあります。
- 画像や文章など非構造化データを格納
- 高速にデータを取得
- 大量のデータを保存
Web APIの応答がJSON形式が多いので、そういったデータや、ログデータなどをひたすらデータベースに入れていきたい場合に使います。
SQLを使わないデータベースを指すため、下記のように色々な種類があります。
- キーバリュー型
- ドキュメント型
- カラム型
- グラフ型

DBMS(データベース管理システム)の製品の種類
Oracle database
Oracle database のホームページに、商品について以下の記載があります。
オラクルの革新的なクラウド・データベースは、自己稼働、自己保護、自己修復が可能で、エラーが発生しやすい手動でのデータ管理を排除するように設計されています。既存のOLTPとデータ・ウェアハウスのクラウドへの移行や新規作成が容易です。クラウド上にあり、安全でインテリジェントな高可用性データベースを使用することで、データからより多くの価値を得て、ビジネスの成長につなげることができます。
公式HPは以下を参照にして下さい。
» Oracle Japan / Oracle Database
SQL Server
Microsoftのデータベースアプリケーションが「SQL Server(Microsoft SQL Server)」です。法人ではOracleかSQL Serverかというほど、シェア率が高いです。
SQL Server のメリットとしては以下のものが挙げられます。
SQL Server2019 のホームページに、以下の様な商品についての説明があります。
Apache Spark 搭載の SQL Server 2019 を使用して、リレーショナル データ、非リレーショナル データ、構造化データ、非構造化データにクエリを実行することで、あらゆるデータからインサイトを抽出し、ビジネスの全体像を把握します。
公式ホームページは以下を参照してください。
-
SQL Server 2019 | Microsoft
続きを見る
MySQL
MySQL は世界でもっとも多く使用されているオープンソース・データベースです。
MySQL は、大規模な Web サイト、ISV、OEM、VAR のお客様、大企業など様々な環境において、ハイパフォーマンスでスケーラブルなデータベース・アプリケーションの、コスト効率のよい構築のサポートを行っています。
公式サイトは以下を参照してください。
-
MySQL :: MySQL製品
続きを見る
Postgre SQL
Prostgre SQL のホームページに以下の様な商品についての説明があります。
PostgreSQLはオープンソースのオブジェクト関係データベース管理システム (ORDBMS) である。名称は Ingres の後継を意味する「Post-Ingres」に由来している。DB-Engines.comによるマーケットシェア調査では、2018年2月現在、Oracle Database、MySQL、Microsoft SQL Server に続いて4位である。
公式ホームページは下記を参照にして下さい。
-
PostgreSQL: The world's most advanced open source database
続きを見る
SQLite
サーバとしてではなくアプリケーションに組み込んで利用されるデータベースである。 一般的なRDBMSと違い、APIは単純にライブラリを呼び出すだけであり、データの保存に単一のファイルのみを使用することが特徴である。
SQLiteの公式ホームページは以下を参照して下さい。
-
SQLite Home Page
続きを見る
Microsoft Acccess
Microsoft Office Access のホームページに以下の様な商品についての説明があります。
Microsoft Office Access(マイクロソフト・オフィス・アクセス)は、マイクロソフトがMicrosoft Windows 向けに販売している、データベース管理システムのソフトウェアである。(略)Accessは、Access/Jet、Microsoft SQL Server、OracleやODBC準拠のデータを取り扱うことができる。データベースに精通した技術者であれば、比較的高度なアプリケーションが開発できるが、そうではない人でも各種のウィザード機能を使用することにより小規模で簡単なアプリケーションの構築が可能であるとしている。
公式ホームページは以下を参照して下さい。
-
Microsoft Access | データベース ソフトウェア | Access 無料試用版
続きを見る
リレーショナル型データベース(RDB)のキーについて
ここからは、リレーショナル型データベース(RDB)の説明になります。
リレーショナル型データベース(RDB)はテーブル同士を連携して動作します。
主キー(Primary Key)
主キー(Primary Key)とは表データの行やレコードを識別するためのものです。
主キーを簡単に説明すると、「データベースにおけるデータの出席番号として使われる項目」の事です。
データベースのデータ(行、レコード)を一意に識別するための項目とも言えます。
主キーは必ず、重複のない一意なものでなければいけません。
例えば、店舗IDは「店1」「店2」「店3」とそれぞれ1つずつしかありませんね。
なので主キーにできます。逆に店舗名は「AAA」が2つ、「BBB」が1つあり、「AAA」が重複している(一意ではない)ため、主キーとできません。
主キーがなければ、店舗リストに同じ店舗名があったときに、どの町の店舗か特定できません。
しかし、主キーの店舗IDがあれば、店舗IDによってどの町の店舗か特定できます。
連結キー
二つの列を連結して、キーとします。
上図の店舗リストで、店舗IDがないとした場合、店舗名だけを見てみると、重複したAAAがあるので、住所と連結して、店舗名+住所でキーとすることができます。
もちろん、連結したキーが重複していてはいけません。
ビュー
テーブルは相互に関係を持たせて、複数に分かれています。
例えば下記のように、売上テーブルと店舗テーブルのように複数に分かれています。
売上と店舗データを合わせて見たいときに、各テーブルが分かれているため、毎回テーブル二つを連結してデータを見る必要があり大変です。
元から、2つのデータが合わさった状態でテーブルがあれば良いですが、ビューをつくることで同じことを実現できます。
ビューは見たいデータの形にした仮想的なテーブルです。
ユーザーはまるで、売上と店舗の結合したテーブルがあるかのように、ビューからデータを取得することで、目的のデータを結合することなく取得できます。
ユーザーはまるで、売上と店舗の結合したテーブルがあるかのように、ビューからデータを取得することで、目的のデータを結合することなく取得できます。
ビューのデータはテーブルのデータを参照しているので、ビューからデータを取得すれば、テーブルからデータを取得しているのと同じになります。
その為、売り上げビューという見たいデータの形にした仮想的なテーブルを用意します。
ビューのデータはテーブルのデータを参照しているので、ビューを見ればテーブルのデータを見ていることになります。
SQLとは
SQL(Structured Query Language)はデータベースを操作するための言語です。
クエリをDBMSに要求することによって、データーベースを操作することができます。
例えば、検索ではSELECT文と言うものを使います。
In[]
1 | SELECT 列 FROM テーブル WHERE 条件 |
条件と一致する場所(WHERE
)をテーブルから(FROM
)、対象の列を選択(SELECT
)してデータを取得します。
このように、和訳できそうなものですが、複数のテーブルから色々な条件でデータを取得するので大抵のSQL文は長くなります。
クエリ
ユーザーがデータを操作するときに、命令するためのSQL文を書きます。
それをDBMSに処理として要求することをクエリと言います。
データ取得
使用者がDBMSに要求した処理要求(クエリ)、すなわちSQL文に応じて、特定のデータを取得します。
以下の図の様なイメージです。
データ操作
使用者がDBMSに要求した処理要求(クエリ)、すなわちSQL文に応じて、追加、削除、更新することができます。
例えば、下記のような操作です。
- ある行の削除
- 行の追加
- ある行のデータの更新
データベースやテーブルの作成
使用者がDBMSに要求した処理要求(クエリ)、すなわちSQL文に応じて、新しいデータベースやテーブルの作成ができます。
今回は以上となります。