この章ではリレーショナルデータベースにおける数学的概念を紹介します。 これは必読書ではないので、SQL文で分からないことがあって行き詰まっている場合や、 SQLの簡単な例から取り掛かりたいのであれば、飛ばして次の章に進み、時間と忍耐力のあると きに読んで見て下さい。飽きさせない内容になっていますよ!
この内容の元になっているのは Stefan Simkovics の修士論文 (Simkovics, 1998) の一部です。
SQL はもっとも一般的なリレーショナルデータベースの 問い合わせ言語になりました。"SQL" という名前は Structured Query Language の省略形です。1974 年 に Donald Chamberlin らが IBMの研究所において SEQUEL (Structured English Query Language)という言語を 定義しました。この言語は 1974 年から 75 年にかけて SEQUEL-XRM という名 称で IBM が最初にプロトタイプを実装しました。1976 年から 77 年には SEQUEL/2 と言われる SEQUEL の改定版が定義され、その後名称が SQLへと変更されました。
System R と呼ばれた新しいプロトタイプが 1977年に IBM によって開発され ました。System R は SEQUEL/2 (現在の SQL) の大部分 をサブセットとして実装し、そのプロジェクトの間にたくさんの変更が SQLに対して施されました。System R は IBM 内のサイト やいくつかの選ばれた顧客サイトなどの多数のユーザサイトにインストールさ れました。これらのユーザサイトで System R が受け入れられたことに気をよ くし、IBM は System R をベースとしたSQL 言語を実装 した商用製品の開発を開始しました。
その翌年より,IBM及び更に数多くのベンダーが SQL/DS (IBM) DB2 (IBM) ORACLE (オラクル) DG/SQL (データゼネラル) SYBASE (サイベース) といったSQL製品を発表しました。
SQLは現在では公的な規格にもなっています。1982年に 米国規格協会(ANSI)は X3H2 というデータベース委員会 対し,標準リレーショナル言語のための提案の開発を依頼しました。この提案 は1986年に批准されましたが、基本的にはSQLのIBM版の 方言といったものでした。1987 年にこのANSI規格が国際 標準化機構(ISO)によって国際標準として受け入れられま した。SQLの最初の規格バージョンは非公式に "SQL/86"と呼ばれます。1989年に最初の規格が拡張され、 この新しい規格はしばしば、やはり非公式に"SQL/89"と呼 ばれています。また1989年には、Database Language Embedded SQL(ESQL)と呼ばれる 関連した規格が開発されました。
ISO と ANSIの両委員会は、当初の 規格を大幅に拡張したバージョンの定義について、長年にわたって取り組んでいました。これが非 公式にSQL2 もしくは SQL/92と呼ばれるものです。このバー ジョンは1992年の終わり頃、「国際標準 ISO/IEC 9075:1992 データベース言語 SQL」 として批准された規格となりました。 "SQL規格"という場合は、この SQL/92を指しています。SQL/92の詳細な定義は Date and Darwen, 1997に決められています。このドキュ メントを書いている時点で、非公式にSQL3 と呼ばれる新しい規格が開発中です。SQL をチュー リング完備にする計画があります。すなわち、計算可能なあらゆる問い合わせ (例えば再帰問い合わせ)ができるというものです。これは非常に複雑な作業で す。このため、新しい規格が1999年より前に完成するとは考えられません。
[訳注]SQL3 は、SQL92 の制定から約7年の歳月をかけて大幅に改訂され、1999 年に SQL99 として ISO,ANSIで認可されています。SQL92 はリレーショナルデー タベースのための完全な言語となることを目指していましたが、SQL99 ではオ ブジェクト指向の考え方を SQL に取り入れています。
先にのべたように、SQLはリレーショナル言語です。これ は 1970 年に E.F. Codd が初めて出版したrelational data modelに基づくことを意味しています。リレーショナルモデル の 形式定義については後述します(リレーショナルデータモデルの形式)が、ここではまず、より直感的にそれを見てみま しょう。
リレーショナルデータベースはユーザからは、 テーブルの(そしてテーブルだけからなる)集合に見えるようなデータベー スです。テーブルは行と列から構成されており、各行はレコードを、各列 はテーブルに格納されているレコードの属性を表しています。SUPPLIER と PART データベースは3つのテーブルから なるデータベースの例を示しています。
SUPPLIER(納入業者) は番号(SNO)、名前(SNAME)、市(CITY)を格納するテーブルです。
PART(部品) は番号(PNO)、名前(PNAME)、値段(PRICE)を格納するテーブルです。
SELLS(販売) は納入業者(SNO)によって売られた部分(PNO)に関する情報を格納 しています。他の2つのテーブルを接続する役目を果たしています。
Example 1-1. SUPPLIER と PART データベース
SUPPLIER: SELLS: SNO | SNAME | CITY SNO | PNO ----+---------+-------- -----+----- 1 | Smith | London 1 | 1 2 | Jones | Paris 1 | 2 3 | Adams | Vienna 2 | 4 4 | Blake | Rome 3 | 1 3 | 3 4 | 2 PART: 4 | 3 PNO | PNAME | PRICE 4 | 4 ----+---------+--------- 1 | Screw | 10 2 | Nut | 8 3 | Bolt | 15 4 | Cam | 25
PART や SUPPLIER テーブル は実体として考え られ、SELLS テーブルは特定の PART と特定の SUPPLIER 間の 関連と考えられるかもしれません。
後に示す通り、SQLはテーブルに対して定義された通 りの動作を行います。ただその前に、リレーショナルモデルの理論につい て学んでみたいと思います。