第1章 SQL概説

DBMSの基礎知識

データベースとは?

データベースの概要

データベース(Database)』とは、データ形式をあらかじめ定義して、データを管理するための構造のことです。データベースを現実のものでたとえると図書館のようなもので、図書館は膨大な量の書籍や資料をカテゴライズ化し、目録を作成しています。それらの作業を図書館司書が行っているため、利用者は必要なときに必要な資料・書籍をすばやく見つけることができます。図書館の資料や書籍にあたるのがデータベースで、図書館司書にあたるのがデータベースを管理するシステムです。

データベースの実例としては、辞書や住所録、検索エンジン、企業データベース、音楽データベースなどが挙げられます。広義には電子化されたもの以外も含まれるので、書籍の電話帳や辞書などもデータベースといえます。

データベースを広義に解釈すると、テキストファイルに数十行のメモを日付と内容などで分けただけのものをデータベースと呼ぶこともできるのですが、ここでは、整理された情報と、それを扱うためのシステムを総称してデータベースと呼びます。データを記録しておくためのファイルはデータファイルと呼ぶことにします。

用語
データベース(Database)
データ形式をあらかじめ定義して、統合的に管理できるファイル構造のこと。リレーショナル形のデータベースや、ツリー型のデータベースなどのモデルがある。
データファイル
データを記録するためのファイル。

データベース管理システム(DBMS)

DBMSの概要

データベースを効率的に利用するためには、データベースを統合的に管理するシステムが必要です。このシステムは、扱う情報の規模や環境にかかわらず非常に重要なものです。それでは、その役割と機能について詳しくみていきましょう。

データを統一的に管理するといった概念がまだなかった頃は、プログラムから直接、ファイルに対してデータの保存や読み込みを行うのが一般的でした。これでは、一貫した管理方法がないため、安全性や利便性に欠けています。そこに、『データベース管理システム(Data Base Management System、DBMS)』が登場しました。

データベースはファイル構造の事ですが、DBMSはそのファイル構造の設計から管理・運用を含めたシステムを指します。DBMSは、データの共有化やデータ保護、データ検索、更新などの処理を実現するための手段を提供します。

DBMSの役割と機能には、次のようなものがあります。

  • データベースを操作するための言語を提供する
  • データの整合性を保障した管理手段を提供する
  • データ利用の標準化を行い、各種プログラムへのインターフェイスを提供する
  • データへのアクセス制限を管理する
  • 複数ユーザの同時処理に対応する

DBMSで最も良く使われる機能が、要求に応じたデータの受け渡しです。たとえば、利用者が必要な情報を取り出す際、DBMSはその要求に応じて必要な情報を取り出し、それを整形して返します。このとき、利用者はデータファイルの構造を気にする必要がなく、複雑なことはすべてDBMSが処理します。

DBMSは、エンド・ユーザの要求とデータファイルの橋渡し的な存在といえます。これは同時に、複数のユーザがデータファイルを共有することを可能にしたり、データファイルの内容を保護する役目もあります。

DBMSの役割
DBMSの役割

インターネットの普及により、DBMSは今までよりもさらに注目されるようになりました。GoogleやYahoo!といった検索サイト、アマゾン・コムや楽天のような商品を販売するショッピングサイトや、SOHOや個人ブログサイトでも幅広く利用されています。DBMSが今後さらに重要な技術となるのは間違いないでしょう。

用語
DBMS(Data Base Management System)
データベースを管理するためのシステム。DBMSの利用により、データの共有化やデータ保護、データ検索、更新などの処理を簡単に実現することができる。

DBMSの機能

多くのDBMS製品が開発され、バージョンアップを重ねるごとに、DBMSはデータファイルを効率よく利用するための基本的な機能から、データファイルの保全や共有、より簡単なアクセス手段を提供できるようにと多くの役割を担うようになってきました。データ自体も、単純な文字列や数値だけではなく、画像や映像といったメディアファイルが重要になり、それらに対応する必要性が高まっています。

DBMSの主な機能

DBMSの代表的な機能は次のとおりです。

機能 内容
データベース言語の提供 データベース言語とは、DBMSに指示を与えるための言語です。データ定義言語 (DDL)、データ操作言語 (DML)、データ制御言語 (DCL) の構成要素からなります。
データ完全性 不正なデータの登録や更新を防ぎます。
トランザクション処理 複数のユーザ間でデータを共有するための機能を提供します。複数のユーザが同時に同一のデータを参照・更新した場合でも、矛盾なく正常に処理されます。
セキュリティ ユーザのアクセス権を設定したり、ユーザ認証する機能を提供します。一部の DBMS ではデータの暗号化機能も提供します。
障害復旧 トランザクション障害、システム障害、記憶媒体の障害からの復旧を行います。
分散データベース ネットワーク上の複数のコンピュータを使い、それらを仮想的に一つのDBMSとして実現します。

データベースモデル

DBMSはデータベースを管理するための機構として古くから利用されているので、様々なタイプのモデルが考案されています。現在最も多くの環境で利用されていて、データベースモデルの主流を占めるのが、この講座で紹介していくのがリレーショナル型のデータベースです。

リレーショナル型のデータベース以外のモデルとして、古くはツリー型データモデルやネットワーク型データモデルが使われていました。これらのデータベースモデルは、アプリケーションソフトウェア、データの論理的構造、データの物理的構造が密接に結びついているために、柔軟性に欠けるという欠点がありました。また、プログラマの力量に依存するため、開発効率を低下させる原因を含んでいます。

新しいデータモデルとしては、ユーザが独自のデータ型や関数を拡張可能なオブジェクト関係データベースや、オブジェクト指向プログラミング言語との親和性が高いオブジェクトデータベース、データモデルにXMLを採用したXMLデータベースなどがあります。それぞれがリレーショナル型データベースにない特徴を持っていて、それぞれ得意な分野で利用されています。

DBMSの種類
  • リレーショナル型データベース
    現在最も利用されているデータベースです。
    テーブルという概念でデータの集合を格納し、各テーブルをリレーションによって関係付けます。
  • ツリー型データベース
    古いデータベースモデルで、データをディレクトリ構造のように構築したデータベースです。
    一つの親データに複数の子データがツリー構造的に結合されたデータベースです。
  • ネットワーク型データベース
    古いデータベースモデルで、各レコード間の関係付けが網目状になっている構造のデータベースです。
    親データと子データが多対多に結びつく複雑なデータ構造に適しています。
  • 分散型データベース
    データベースを複数のコンピュータで管理し、全体としてひとつのデータベースを構成します。
  • オブジェクト指向型データベース
    オブジェクト指向のデータ構造を持つデータベースです。
    複雑なデータ構造に向いている為、写真や画像や音声などの異なるデータを統合して扱えます。 
  • XMLデータベース
    XMLを扱うための機能を持つデータベースです。
    拡張性が非常に高く、データ構造を運用中に変更することが容易です。
リレーショナルデータベースのイメージ

リレーショナルデータベース

ツリー型データベースのイメージ

階層型データベース

ネットワーク型データベースのイメージ

ネットワーク型データベース

ネットワーク型、ツリー型のDBMSは、データベース構造の設計が難しく、汎用性もないといったデメリットがあるため、現在ではあまり使われていません。それらの問題を解決したのが、現在最も利用されているリレーショナル型のデータベースです。次からはこのリレーショナル型のデータベースについて、詳しく見ていきます。

リレーショナル・データベース

リレーショナル・データベースの概要(RDBMS)

今、最も多く利用されているDBMSが、『リレーショナル・データベース(RDB: Relational Data Base)』です。他のデータベースモデルと比べてデータ構造を理解しやすく、多くの環境で製品化されていることから、一般的にデータベースというとリレーショナル・データベースを指します。リレーショナル・データベースを管理するデータベース管理システム(DBMS)のことを『RDBMS(Relational Data Base Management System)』と呼びます。

リレーショナル・データベースの最大の特徴は、データを表形式のテーブルで表し、複数の表にリレーションシップ(関係付け)を結ぶことができることです。もう一つの特長は、SQLと呼ばれるデータベース言語が標準化されている事で、SQLを利用すればどのリレーショナルデータベースでも同じように利用することが出来ます。SQLは、国際標準化機構(ISO)や日本工業規格(JIS)で制定されています。

テーブル

テーブル

上図の表全体をテーブルと呼びます。テーブルは、リレーショナル・データベースの基礎概念で、見出しと本体で構成されます。テーブルの本体はテーブルはレコード(行)とフィールド(列)から構成され、2次元配列になっています。

フィールドはカラム、列と呼ばれたり、レコードは行と呼ばれることもあります。ここでは、フィールド、レコードで統一します。

テーブルの構造

リレーショナルデータベースではデータの集合を『テーブル(表)』という概念で表します。表計算ソフトやワープロソフト、HTMLドキュメントなどで表を作成したことがあるかもしれませんが、概念的にはほぼ同じです。テーブルは見出しと本体によって構成され、本体は『フィールド(列)』と『レコード(行)』から構成されます。フィールドは、表形式のデータにおいて縦方向に区切られたデータの組で、レコードを構成するそれぞれの要素です。レコードは、
表形式のデータにおいて、横方向に区切られたデータの組です。

顧客テーブルのフィールドとレコード
顧客テーブルのフィールドとレコード

フィールド(列)

図[顧客テーブルのフィールドとレコード]のようなテーブルを、縦に情報を区切るのがフィールド(列)です。たとえば、顧客テーブルであれば、[フルネーム(fullname)]のフィールド、[性別(sex)]のフィールドといったように、情報の種類ごとに区分けされています。

フィールドには、テーブルを定義する際に『フィールド名』を設定します。フィールド名があれば、「フルネームフィールドと、電話番号フィールドを取り出す」と、わかりやすい指定が可能です。フィールド名がない場合は、「フィールドの左から1番目と、2番目のフィールドの値を取り出す」というように、作成した本人でさえわからなくなるような指定をDBMSに送ることになります。

フィールドは、フィールド名の設定のほかに、文字列や数値をあらわすデータ形式や、プライマリキーのようにユニークを保障したり、NULLを許さないといった制約の属性を設定できます。

レコード(行)

テーブルを横に区切るのがレコード(行)で、1レコードは1件のデータに相当します。たとえば、顧客テーブルの場合だと、顧客情報が追加されるたびに、1件の顧客情報につき1件のレコードが追加されます。レコードは顧客数が増加するのに比例して増えていきますが、フィールドはテーブルの構造を変更しない限りは不変です。

プライマリキー(プライマリキー)

リレーショナルデータベースでは、リレーションという定義上、少なくても1つの候補キーと呼ばれるフィールドがあります。候補キーとは、それが欠ければテーブルの一意性が確保できなくなること、冗長な属性を含まないフィールドを指します。つまり、レコードを1件1件識別するためのフィールドです。

候補キーという名称は、それが『プライマリキー(プライマリキー)』として選ばれる候補というところから来ています。プライマリキーとはレコードを1行ずつ識別するためのフィールドで、プライマリキーは重複して同じ値を持つことができません。このような性質から、プライマリキーを指定すれば、膨大なデータから必要なレコードだけを確実に取り出すことができます。

たとえば、レコードが10件あるテーブルを考えてみましょう。レコードは追加される可能性もありますし、削除される可能性もあります。最初は5行目にあったレコードも、前のレコードが削除されれば4行目になり、3行目に移動します。レコードの選択に行数を指定するような方法だと、行数が変更されるたびに「5行目のレコードを取り出す」というDBMSへの指定が、「4行目のレコードを取り出す」といったように毎回変わる可能性があります。

テーブルにプライマリキーが設定されていれば、プライマリキーはユニークな値を保障するので、「[顧客ID]というフィールド名のレコードを取り出す」といった指定はそのレコードが存在するまで有効です。また、プライマリキーは複数の候補キーをセットにしてプライマリキーとすることもできます。たとえば、IDと名前をセットにしてプライマリキーに設定することが可能です。

リレーションの作成

リレーショナル・データベースの基本的な前提は、リレーションの作成が可能だということです。リレーションとは、複数のテーブルを関連付けること、またはその関係を意味します。リレーションは、テーブルのプライマリキー、もしくは候補キーを、それと同じ値を持った別のテーブルのフィールド、『外部キー(Foreign
Key)』と関係付けることによって実現されます。

たとえば、顧客情報に会社名や会社の住所を含める場合を考えてみましょう。1つの会社に多くの顧客が含まれる場合、顧客一人一人に会社名や代表電話番号などを登録していくのは非効率です。そこで、顧客情報と会社情報を別のテーブルに分け、会社テーブルのプライマリキーに、顧客テーブルの外部キーを関連付ければ、データ量を節約でき、効率化が進みます。これが、リレーショナル・データベースの基本的な考え方です。

顧客テーブルと会社テーブルのリレーションシップ
顧客テーブルと会社テーブルのリレーションシップ

サンプル図では、会社テーブルのプライマリキーになる[会社ID]に、顧客テーブルの[会社ID](外部キー)を関連付けています。これで、顧客一人一人に会社名や代表電話番号を登録しなくてもよくなります。

リレーションがあることで、1つのテーブルから他のテーブルのデータを参照することが簡単になります。たとえば、顧客テーブルと製品テーブル、それに購入履歴テーブルを用意し、顧客テーブルに顧客と購入した製品を記録した場合を考えてみましょう。

顧客テーブルから製品名を取得
顧客テーブルから製品名を取得

購入履歴テーブルに、顧客テーブルのプライマリキー[顧客ID]フィールドと、製品テーブルのプライマリキー[製品コード]フィールドを記録します。これにより、購入履歴テーブルから顧客の名前を参照したり、製品の価格を参照したりすることができます。また、顧客テーブルから購入履歴テーブルを参照し、顧客が購入した製品情報を取得することもできます。

用語
リレーショナル・データベース(RDB:Relational Data Base)
リレーショナル型のデータベース。データを行と列からなる表形式で表し、複数の表に関係付けを結ぶことができる。他のデータベースモデルと比べてデータ構造を理解しやすいことなどから、最も良く利用されている。
 データベース問い合わせ言語は、ISO で規格化された SQL が標準。
RDBMS(Relational Data Base Management System)
リレーショナル・データベースを管理するソフトウエア。
テーブル(Table)
リレーショナル・データベースの基礎概念。データを格納するための2次元配列。テーブルはレコード(行)とフィールド(列)から構成される。
フィールド(Field)
表形式のデータにおいて、縦方向に区切られたデータの組。レコードを構成するそれぞれの要素。
レコード
表形式のデータにおいて、横方向に区切られたデータの組。
フィールド名
フィールドに設定する名称。
プライマリキー
プライマリキーとはレコードを1行ずつ識別するためのフィールドで、プライマリキーは必ずユニークな値となる。プライマリキーの指定により、膨大なデータから必要なレコードだけを確実に取り出すことが可能。
外部キー(Foreign Key)
テーブルのプライマリキーと同じ値を持った別のテーブルのフィールド値。

代表的なRDBMS製品

代表的なRDBMS製品を挙げると、マイクロソフト社のMicrosoft Office Accessや、Microsoft SQL Server、UNIX系のOSで多く使われているオラクル社のOracle Databaseなどがあります。オープンソースで有名なのはMySQLPostgreSQLで、LinuxやFreeBSDといったPC UNIXをはじめ、ウインドウズなどの幅広いプラットフォームで動作します。

これらのRDBMS製品はインターネットでも対応しているのはもちろんのこと、インターネットでの利用を前提としたツールなどが豊富に用意されています。

商用
オープンソース

関連記事