データベース（DB）とは

# 【データベースとは】
「決まった形式（データモデル）で整理されたデータの集まり」
厳密に言うと、決まった形式で「複数で共有、利用すること」と「検索、加工すること」を目的に整理されたデータの集まりを指す。

また、データベースは「データベース管理システム（DBMS）」というソフトウェアで制御（データの保存、検索、更新、削除などの操作）を行う。

例えば、以下のような場面でデータベースが役立つ。
・商品在庫データの中から、在庫数が一定数以上の商品を見つけたい。
・住所録の中から、東京都在住の人物をリストアップしたい。
・契約リストのなかから、担当者が「田中」のものだけを抜き出したい。

（補足）
Webサービスの基本的なサーバー構成（Web3層構造）には、必ずデータベースが含まれている。
また、下記のようにサーバーとデータベースはやりとりをしている。
「Webサーバー⇔APサーバー⇔データベース」



# 【データベースとスプレッドシートの違い】
データベースとスプレッドシート（Excelなど）は、どちらも情報を保存する便利な方法ではあるが、これらには次のような違いがある。
・データをどのように保存し、操作するか
・データにアクセスできるのは誰か
・どの程度の量のデータを保存できるか

スプレッドシートは本来1人のユーザー向けに設計されており、その点を反映した特性を備えている。ユーザーが1人または少人数で、過剰に複雑なデータ操作を大量に実行しないのであれば、スプレッドシートは十分に機能する。
一方、データベースは、整理された情報の大規模な集合を保持するように設計されていて、そのデータが膨大な量になることもある。データベースを使用すると、同時に複数のユーザーが迅速、安全にデータを利用でき、きわめて複雑な論理と言語を使用してデータに対するクエリを実行できる。

（補足）
クエリ：データベースに対する命令文。



# 【データベースの種類（データ・モデル）】
データを整理及び管理する方法には、以下のようなものが挙げられる。

- ツリー状に構成する「階層型」
会社の組織図のように、上層から下層に分岐する１対多の形でデータが整理されているデータベース。
上層から特定のデータに至るまでのルートは一つのみのため、データの検索が早いという特長がある。
しかし、データが重複する場合データ構造が冗長になりやすいデメリットを持っている。また、データの追加や削除が入るとアクセスルートは変わってしまうため、柔軟なデータ管理が困難になる。

例）会社の組織図で社員のAさんが人事部と総務部を兼任している場合、人事部と総務部の両方の下層にAさんの名前が記入されることになる。このように、状況次第では一つのデータを複数個所に登録する必要が生じるのが弱点である。


- 網目状に構成する「ネットワーク型」
関連性のあるデータを相互に結び付けて保存するタイプ。階層型を、下層から上層に向けても分岐させた形式のデータベースといえる。
これにより、多対多の関係性が成り立つと同時に、情報の重複登録が避けられる。
デメリットとしては、データの追加、削除でメンテナンスが煩雑になるのが挙げられる。

例）社員のAさんが人事部と総務部を兼任している場合、人事部と総務部の両方から同一のAさんのデータへとたどり着ける。逆に、Aさんのデータから人事部と総務部の両方にアクセスすることも可能となる。
そのため、階層型のように、人事部と総務部の下層に別々にAさんの情報を登録する必要がなくなる。


- 表で構成する「関係型」　※別名：リレーショナルデータベース（RDB）
現在はこのリレーショナルデータベースが主流となっている。

表（Excel）に似た形式で、行と列で構成されたデータベース。
Excelでいう表を「テーブル」といい、列を「フィールド」、行を「レコード」と呼ぶ。フィールドには項目が入り、レコードには項目ごとに該当するデータが入る。

・レコードにはルールがある。
各レコードのデータは、必ず「一意（ダブりがないよう）」にならないとダメだということ。データベースは検索されることを念頭におく必要があるので、重複したデータがあると検索時に支障がでる。

・管理しやすいようにどのようなデータを格納しているのか、「属性」をおく必要がある。言わば、「商品名」、「販売価格」などインデックスのようなもの。

・メリット：テーブル同士を組み合わせて表示できるため、複雑に関連している情報でも整理がしやすい。
アクセスルートが変わらない。また、データの重複を避けられること、検索能力が高いのも利点である。
・デメリット：データ容量がおおきくなりがち（１つのサーバで管理できない）。因みに、これを克服するのが「NoSQL」。

・RDBは、「SQL」という言語で操作する。


- NoSQL
SQLを使わないという意味ではないので注意。Not Only SQLの略で、SQLだけではないという意味。
NoSQLは「ビッグデータ」などの大量のデータを扱う場合に威力を発揮する。
同時にデータを探すことが得意。大量のコンピューターを使って「同時に大量のデータを検索」したりできるのが特徴。


- 他にも「オブジェクト指向データベース」、「分散データベース」、「データ・ ウェアハウス」などがある。



# 【データベース管理システム（DBMS）】
データベース管理システムとは、その名のとおり「データベースの管理・運用を行うシステム」のこと。
つまり、データベースを制御するシステムである。

データベースは自動でデータを追加、更新、削除などの操作を行ってくれない為、必ず管理する人が必要になる。ただ、管理する人が誤って同じデータを追加、あるいは削除してしまってはいけない。人間の手でデータベースを管理することは非常に危険なので、コンピュータのシステムに管理してもらう方が断然良いのである。
データベース管理システムであれば自動でデータ整理を行うため、簡単にデータを編集し、抽出できる。更に、重複するデータを入力しようとした際には警告が表示されるなど、ミスを防ぐうえでも有効である。

まとめると、
・データベースを操作・管理する
・データベースへのアクセスを制御、処理する
・障害が発生したとき正常状態に復旧する
がDBMSの主な機能である。


・リレーショナルデータベース（RDB）を管理、運用するデータベース管理システムのことを特に、
「リレーショナルデータベース管理システム（RDBMS）」と呼ぶ。



# 【代表的なDBMS】
・MySQL：世界でもっとも利用されている「データベース管理システム」。大容量のデータに対しても高速で動作し、便利な機能がたくさんあるので、非常に実用性が高くなっている。また、オープンソースなので非商用利用であれば無償で使用できるため、初心者でも導入しやすい。
・Oracle Database
・PostgreSQL
・SQLite
・Microsoft Access



# 【構造化クエリ言語（SQL）】
「SQLはデータベース(RDBMS)を操作するための言語」。

SQLは国際標準化されているため、さまざまなデータベースで利用できる。
有名なデータベースとしては、Oracle、MySQL、PostgreSQL、SQLiteなどが、いずれもSQLで操作可能。

SQLでデータベースに対して行える操作として、主に次のようなものがある。
・データの検索
・データの追加
・データの更新
・データの削除
・テーブルの作成
・テーブルの削除
・テーブルの主キーの設定
・ユーザー権限の付与