この章ではリレーショナルデータベースにおける数学的概念を紹介します。 これは必読書ではないので、泥沼にはまりそうになったり簡単な例から取 り掛かりたいのであれば、飛ばして次の章に進み、時間と忍耐力のあると きに戻ってきてください。内容はおもしろくぎっしり詰め込まれています!
この内容の元になっているのは Stefan Simkovics の修士論文 (Simkovics, 1998) の一部です。
SQL はもっとも一般的なリレーショナルデータベースの 問い合わせ言語になっています。"SQL" という名前は Structured Query Language の省略形です。1974 年 に Bonald Chambelin らが 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製品を発表しました。 SQL/DS (IBM) DB2 (IBM) ORACLE (Oracle Corp.) DG/SQL (Data General Corp.) SYBASE (Sybase Inc.)
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はまさに定義されたテーブルの通 り操作をしますが、その前にリレーショナルモデルの理論について学んで みたいと思います。