図6●リレーショナル・データベースの基盤となる関係3演算
制約(a),射影(b),自然結合(c)である。制約は選択とも呼ぶ。表に登録されたレコード(行)を絞り込む。表を縦に縮めるイメージである。射影は逆に,表の項目を絞り込む。横に縮める感じだ。そして,複数の表をつなげる処理が自然結合である。
図7●意外と見落としがちな集合演算
合併(a),差(b),共通部分(c)である。本来合併は和集合,共通部分は積集合と呼ぶ。

関係演算と集合演算がRDBの基盤

 リレーショナル・モデルの理論的基盤として重要なのが,関係演算と集合演算である。これらの概念を導入することにより,表の形で表したデータ集合から,任意のデータ集合を抽出できることが証明されている。平たく言えば,データベースとしてちゃんと使えるということである。逆に言えば,これらの演算を満たしていなければリレーショナル・データベースとしては不備がある,ということになる。

 まず関係演算から見ていこう。“リレーショナル・データベースらしい”処理なので,まともなRDBMSであればどれも装備している機能である。「最小関係システム」と呼ばれるのが,最も基本となる三つの関係演算を備えていることだ。(1)制約(選択),(2)射影,(3)結合(自然結合),である注3)

 具体的な操作を見ていこう。(1)の制約とは,テーブルのなかから条件に合致する複数のレコードから成るテーブルのサブセットを作り出すこと(図6-a[拡大表示])。例えばある特定の取引先のレコード集合を作り出すといった操作がこれにあたる。(2)の射影は,制約を縦に変えたようなイメージだ。つまり,ある特定のフィールドだけに絞り込んだデータ集合を作成する操作である(図6-b[拡大表示])。これら二つの演算は,単一のテーブルから任意の情報を切り出す操作であることはすぐにお分かりいただけるだろう。(1)と(2)の演算を組み合わせれば,一つのテーブルから任意のサブセットを作成できるからだ。

 そして(3)の結合が,リレーショナル・データベースをリレーショナル・データベースたらしめている操作である。二つのテーブル(テーブルA,テーブルBとする)があるときに,テーブルAのフィールドAの値と,テーブルBのフィールドBの値が同じレコードをそれぞれ結合するという操作である(図6-c[拡大表示])。例えば商品コードをキーとして販売明細の内容に商品名と単価を取り込む場合などに使う。これにより,前述の正規化によって分けられたデータを,再び一括して取り扱えるようになる。

集合演算があると“関係完備システム”

 リレーショナル・データベースと言えばその名前からも,関係演算に目が向きがちである。ただ実際の操作では,集合演算も重要な意味を持つ。例えばデータを分析したり傾向を導き出したりする際に利用できる。

 集合演算は三つ定義されている。合併,差,共通部分である(図7[拡大表示])。例えば合併を施すことにより,数カ月間に販売した商品はどれかを知ることができる。逆に差をとれば,特定の月に売れた商品を導き出せる。前述の関係演算と組み合わせることによって,任意のデータ集合を導き出せるのだ。

 厳密に言えば,集合演算にはもう一つ,「直積」もある。二つのテーブルの各レコードを組み合わせて新しいレコードを作る。だが実際の場面を考えたとき,直積を使うことは少ない。まったく関連性のない複数のテーブルをつなぐことはないからだ。実質的に結合演算があれば十分だと考えられる。

「これがリレーショナルってことなんですね」
「こういうことは知らなくても,ちゃんとクエリーは書けるけど,まあ知ってるに超したことはないかな」
「そういえばクエリーってSQLを使って書くんですよね。何か,難しそう」
「あれはあれで一種のプログラミング作業だから,決して簡単じゃあない。でも,データベースを使うんだったら,絶対に必要だよ。Accessなんかでも使うからね」

(北郷 達郎、八木 玲子)