データベースの超基本について

<h1>そもそもデータベースとは？</h1>
 　まず最初に「データベースとは何か？」というのを簡潔に説明していきます。
　
　ご存知の通り、ここ数年「ビッグデータ」という言葉はIT業界だけに留まらず、
ビジネスシーン全般におけるキーワードとして取り上げられる機会が非常に増えてきています。
　それに伴って、このビッグデータを保存する「データベース」に対する関心は
これまでにないぐらいに高まってきています。　
　大量のデータを効率よく保存して利用しやすいアプリケーションを作るためには、
データ管理に特化したデータベースを抜きに考えることはできません。
　その需要の高まりと要求の多様化に応じて、近年ではデータベースも急速な進化を遂げてきています。
　
　「データベース」という言葉は一般人にとっては馴染みの薄い言葉かもしれません。
　なぜなら、データベースは普通、システムの利用者(エンドユーザ)から直接触れることができないよう、「意図的」に隠されているからです。
　なぜ意図的に隠されているのかはデータベースの4つの基本機能④セキュリティで詳しく説明
します。
　
　上記からデータベースは一般人から目の届かない場所に管理されています。
　具象的にイメージするのなら、家族や友人の電話番号や住所、メールアドレスが記載された「アドレス帳」を例にすると分かりやすいでしょう。

***

<h1>データベースの4つの基本機能</h1>
<h2>①データの検索と更新</h2>
  データベースの用途として最も重要な機能、それは「検索」です。つまり、「欲しい」と思った
データを見つけることです。
　この「検索」という行為はGoogleに代表される検索エンジンの発展により、我々にとって
身近な存在となっています。
　ご存知のように、検索エンジンは膨大なデータを保存するデータベースの中から、検索対象のキーワードにヒットしたデータを取り出してきます。
　この「検索を行う手段がある」という点がデータベースにとって求められる第一の機能です。

　次に更新は、データベースに新しい情報を「登録」、既存のデータを「修正」、不要になったデータを「削除」の3つの機能をひっくるめた広義的な用途について指します。
　なお「更新」という言葉は前述の使い方と、狭義的な意味での「既存データの修正」のことを指す場合もあるので、この点については留意してください。

<h2>②同時実行制御</h2>
　　データベースの基本機能として重要な2つ目の機能が「同時実行制御」です。
　個人で管理しているアドレス帳ならば、基本的にそれを検索したり更新するのは自分一人
です。
　しかし、ビジネスや公共の目的で利用されるデータベースには、同時に不特定多数のユーザ
からアクセスすることが普通です。
　つまり、データベースは同時に複数のユーザから検索や更新の処理を受け付けているわけ
です。
　
　このように、データベースを複数のユーザで共同利用しようとするとすると、同じデータに
対する「更新」がぶつかりあった時の制御を考える必要が出てきます。
　「更新」が互いにぶつかり合わないように、説明は省略しますが「同時実行制御」や
「排他制御」という機能を使って、データの整合性を保つ必要が出てきます。

<h2>③耐障害性</h2>
　データベースに求められる3つ目の重要な機能が「障害に強いこと」です。
　
　データベースは重要な情報をため込んだ、いわばシステムの「心臓」とも言うべき場所です。
　ここに入っているデータが障害で消えてしまうと、ソフトウェアにバグがなくとも、
システムは停止せざるを得ません。　
　したがって、データ保護と障害対策にはこれ以上無いぐらい神経質になる必要があります。

　データが障害で消えないように、データベースの設計・構築において予め対策をとっておく
ことが重要です。
　例えば、データを1カ所ではなく複数の場所に分散して保持すること(「データの冗長化」)、
障害に備えて定期的にバックアップを作成したりする等の対策が挙げられます。

<h2>④セキュリティ</h2>
　データベースに求められる基本機能の最後が「セキュリティ」です。
　すなわち「データベースに保存されているデータを、いかにして隠すか」ということです。

　セキュリティ性を保つためにシステムを作る側はデータベースをユーザに意図的に隠すように
構築しています。
　なぜなら、データベースに入っているデータは機密性が極めて高く、一般に公開できないものが多く含まれているからです。

　例えば、ECサイトでのショッピングでは口座番号や住所、クレジットカード番号に暗証番号
といった他人に知られれば間違いなく悪用されてしまうデータを登録して使うことになります。
　そしてこうしたデータを保存する場所こそ、データベースなのです。
　このような機密情報が含まれたデータベースにユーザが自由にアクセスできてしまっては、
情報漏洩のリスクが極めて高くなります。

　特に昨今はプライバシーに対する社会的関心が高くなっており、個人情報の流出は
企業にとって社会的信用を失う大きなリスクとなっています。
　こうした背景から、機密データの宝庫であるデータベースに対するセキュリティは日に日に
厳しくなる一方です。
　したがって開発者サイドとしては、なるべくユーザにはデータベースにアクセスできないように利用制限をかけるのは自明の理です。

***

<h1>データベースの種類</h1>
 　データベースには以下の5つの種類があります。
　**①階層型データベース
　②リレーショナルデータベース
　③オブジェクト指向データベース・
　　XMLデータベース
　④NoSQLデータベース**

　順を追って詳しく説明していきます。

<h2>①階層型データベース</h2>
　「階層型データベース」は、データをヒエラルキー構造で管理するデータベースです。
　組織図や樹形図を想像してもらうと、イメージが掴みやすいでしょう。
　このタイプのデータベースは、現代的なデータベースの歴史上、最初に登場したものです。
　このように書くと古いイメージがあるのかもしれませんが、実はまだ現役で利用されている
ところもあります。

<h2>②リレーショナルデータベース</h2>
　 「リレーショナルデータベース」は、二次元表の形式でデータを管理するデータベースで、
現在最も主流となっています。
　「関係型データベース」とも呼ばれます。
　ちなみに「二次元表」というのは、Excelやスプレッドシートのような列と行で管理する表のことです。
　
　なぜこの「リレーショナルデータベース」が現在主流のデータベースになったのかというと、Excelのように人間が直観的に理解しやすい形式でデータを管理することが可能にした点であるからです。
　通常、「データベース」というのはこの「リレーショナルデータベース」を指すことがほとんどです。

　また、複雑なプログラミング言語を使わなくともデータを操作することができるので、プロのエンジニアやプログラマでなくとも容易にデータを管理することができます。
　であるので、データベースの利用者はぐんと増え、一気にリレーショナルデータベースの裾野が広がることになりました。

<h2>③オブジェクト指向データベース・XMLデータベース</h2>
　「オブジェクト指向データベース」と「XMLデータベース」は、それぞれ「オブジェクト」および「XML」という形式でデータを管理するデータベースです。
　リレーショナルデータベースに代わる存在として期待されていましたが、いまだにリレーショナルデータベースの牙城を崩すには至らずに、どちらかというとニッチな市場を築いています。

<h2>④NoSQLデータベース</h2>
 近年、リレーショナルデータベース以外のデータベースとして注目を集めたのが、「NoSQLデータベース」です。
　「NoSQL」というのは言葉の通り、「SQLを使わない」という意味ですが、「SQL」というのはリレーショナルデータベースを操作するための言語のことです。
　このタイプのデータベースは、リレーショナルデータベースにある一部の機能を捨てることで、パフォーマンスを追求します。
　大量データを高速に処理する必要のあるタイプのWebサービスと親和性が高く、近年よく利用されるようになってきています。 

***

<h1>DBMSとデータベースの違い</h1>
　データベースの機能を提供するソフトウェアのことを「DBMS(DataBase Management System)」と呼びます。
　直訳すると、「データベース管理システム」です。
　特にリレーショナルデータベースに限定することを強調したい場合は、頭にリレーショナルの「R」をつけて「RDBMS」と呼ぶこともあります。

　「データベース」と「DBMS」という言葉は、実際の開発現場においてもあまり区別されずに
使われることが多いのですが、厳密に見れば両者は若干異なります。
　「データベース」は機能や構造を表す抽象的な概念のことで、「DBMS」はそれらを実現する為に作られた具体的なソフトウェアを指します。
　したがって、OracleやMySQLといった具体的な製品は「DBMS」に分類されます。

　もっとも、実際にそこまでデータベースとDBMSという2つの用語について厳密な使い分けをしているかと言うとそんなこともなく、どちらでも意味が通じる場合がほとんどです。

***
<h1>最後に</h1>
　「データベース」についてざっと説明してきましたが、もっと詳しく知りたいという方は
参考文献の「[おうちで学べるデータベースのきほん](https://www.amazon.co.jp/%E3%81%8A%E3%81%86%E3%81%A1%E3%81%A7%E5%AD%A6%E3%81%B9%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93-%E3%83%9F%E3%83%83%E3%82%AF/dp/479813516X/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E5%9F%BA%E6%9C%AC&qid=1623628697&sr=8-2 "おうちで学べるデータベースのきほん")」が非常におすすめです。
　本書の概要から

>「データベースについて学びたいが、何から始めればよいのかわからない」「データベースの入門書を読んだが、難しくて理解できなかった」...そんな人をターゲットにしています。
　

と書いてありますので、非エンジニアやプログラミング初学者でも理解しやすいように
構成されています。
　また「講義」のページと「実習」のページがありますので、ハンズオン形式で自分で
試しながら進めることもできます。

　最後に、データベースはビッグデータの発展により、普遍的なものになりつつあります。
　それに伴い非エンジニアの一般人であっても、「基本的なデータベースの知識」は求められつつあります。
　この記事や参考文献を基に、さらなるデータベースの理解を進めるきっかけとなることを
願っています。