1998/7/26

リレーショナルデータベースの概念と、基本的な用語について解説します。 SQL を覚えることより、 この概念や用語を理解することのほうが大変かもしれませんが、 どうしても必要な基礎知識なので、がんばって勉強してください。

そもそもデータベースってなんですか

コンピュータのエンジニアでなくとも、データベースという言葉を聞いた事はあるでしょう。また気付かないうちにほとんどの人が日常的に利用していることでしょう。例えば預金残高を間違いなく記憶してくれている銀行口座は巨大なデータベースですし、電話番号案内サービスでオペレータが即座に電話番号を調べてくれるのも、データベースを使っているからです。このようにコンピュータによって沢山のデータを管理し、簡単に目的のデータを探し出すことのできる仕組みをデータベースと言います。

今日、コンピュータが行っている業務のうち、ほとんどのものは、このようなデータ管理を持ち合わせたものになります。そのため、必然の流れとして、このようなソフトウェアの開発を容易にするため、汎用的にデータの管理を専門に行う支援システムが生まれました。それがデータベース管理システム(Database Management System: 以下 DBMS)と呼ばれるものです。

DBMS を用いることにより、ファイル構造設計、排他制御、トランザクション処理、検索、と言った極めて面倒でかつ不具合の入り込みやすい部分を肩代わりしてくれます。そのため、ソフトウェア開発者は、管理すべきデータの定義やユーザーインタフェースと言った、本来の目的の部分に集中することができます。データベース管理システムを使うことにより、少なくともすべてを独自で開発するのよりは、遥かに大きな信頼性を確保(もちろん開発工数の削減も)することができます。

ファイル共有型とクライアントサーバ型

DBMS にはファイル共有型データベースと呼ばれるものと、クライアントサーバ型データベースと呼ばれるものがあります。前者は、データベースファイルに直接アクセスする形態のもので、後者は TCP/IP などのネットワークを使用してサーバを介してアクセスする形態のものです。決定的な違いは、ファイル共有型のデータベースエンジンは必ずクライアントマシン上に存在するのに対して、クライアントサーバ型は、サーバマシン上に存在することです。データベースエンジンのある場所とは、つまり検索など、データベースに対する処理が行われる場所になります。一般的に、DBMS というと、クライアントサーバ型のことを指します。ファイル共有型データベースは、高度なデータファイルの延長という感じのローカル指向のメカニズムであり、クライアントサーバ型データベースはマルチユーザを考慮したネットワーク指向と言えます。

クライアントサーバ型 ファイル共有型
クライアントサーバ型 ファイル共有型

ファイル共有型データベースには、Access などで使われている Jet など。クライアントサーバ型データベースには、Oracle、SQL Server などがあります。Jet は自前データファイル管理の代用として、Visual Basic などから手軽に使え、正しく使えばパフォーマンスも優れています。しかしネットワーク環境など、複数のユーザーから同時にアクセスされることがあまり考慮されていないため、信頼性に劣ります。また、クライアントサーバ型データベースではネットワークを前提に設計されているため、トラフィックも最小限になります。これらの理由から、ネットワークで使用する場合はクライアントサーバ型の DBMS を選択するのが賢明です。

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

DBMS には、歴史の中で、階層型、ネットワーク型、リレーショナル型、オブジェクト指向型といった種類のものが生まれました。これらはそれぞれデータ管理の概念が異なります。しかし現在はリレーショナル型が圧倒的なシェアを持っており、現在利用されているほとんどの DBMS が、この種類のものです。リレーショナル型のデータベース管理システムのことを、特にリレーショナルデータベース管理システム(Relational Database Management System: 以下 RDBMS)と言います。ここでは RDBMS を前提に話を進めています。

RDBMS では、データをいくつかの「表」で表現し、データを取り出す際に、問い合わせ言語を用いて、数学の集合論にもとづいた関係操作を動的に行うことができます。つまり、貯えられたデータを自由な条件で、表を自由に分解、結合し、目的の形でデータを取り出すことができるというものです。

例えば従業員を管理するなら、このような「表」を作るでしょう。

社員番号 所属部門 氏名
101 開発部 宮前 竜也
102 営業部 鈴木 陽二朗
103 企画部 畠山 めぐみ
104 開発部 菊地 直人

このような「表」を複数作ることにより、ひとつのデータベースを構築します。

さて、ここで RDBMS の用語を覚えてきましょう。RDBMS の用語は、RDBMS 製品によってばらつきがありますので混乱しないようにしてください。

まずこのような「表」のことを、テーブル、などと言います。横1行のこと(つまり、データ1件)を、レコードタプル、などと言います。そして、縦1列のことを、属性カラムフィールド、などと言います。(*1)

ここでは、「表」をテーブル、「行」をレコード、「列」をフィールドと呼ぶことで統一することにします。

つまり、上図の社員管理テーブルは、3つのフィールドで構成されており、4つのレコードが存在する。ということになります。

(*1) ちなみにフリーの DBMS として普及している PostgreSQL は、RDBMS にオブジェクト指向を取り入れた、オブジェクトリレーショナルデータベース管理システム(Object Relational Database Management System: ORDBMS)と呼ばれるもので、表、列、行のことをそれぞれ、「クラス」、「アトリビュート」、「インスタンス」と呼んでいます。

SQL

RDBMS は、問い合わせ言語(クエリー言語)を用いて柔軟に目的のデータを取り出すことができるということは既に述べたとおりです。この問い合わせ言語は、現在、SQL(Structured Query Language)という言語が標準となっています。

SQL は問い合わせ言語ですので、普通のプログラミング言語(手続き型言語)のように、 処理手順を書くのではなく、 「この条件に合うデータをください」というように、 「クエリー」つまり、問い合わせを記述します。(つまり HOW ではなく WHAT を記述します)

SQL はデータの取り出し(検索)だけではなく、テーブルの作成、レコードの追加、削除、更新といった操作もサポートしています。しかし、SQL は、データベースへ問い合わせるための専用言語ですから、 これだけでアプリケーションを作ることはできません。 他の手続き型言語などに SQL 文を埋め込む形で使います。 従来、ファイルオープン、ファイルリードなどしてた部分を、 SQL に置き換えるわけです。