1.3. リレーショナルデータモデルの操作

前節(リレーショナルデータモデルの形式)ではリ レーショナルモデルの数学的な概念を定義しました。現在の状態は、リレー ショナルデータモデルを利用してどのようにしてデータを格納するか分か りますが、データベースから何かを検索するためにこれらのテーブルをど のように処理するべきかはまだ分からない、という状態です。例えば、' Screw' を売っているすべての供給者を求めるとします。そのためにリレー ションを操作する2つの異なる種類の表記方法が定義されました。

1.3.1. リレーショナル代数

リレーショナル代数は1972年に E.F.Codd 氏によって提示されました。これはリレーションにおける演算の集 まりからなります。

リレーショナル代数の定義と詳細な解説は [Ullman, 1988] もしくは [Date, 1994] を参照してください。

Example 1-3. リレーショナル代数を使った問い合わせ

データベースから検索できるリレーショナル演算子を定式化したことを 思い出してください。ここで前節(リレーショナルデータモデルの操作)の例に戻って、Screwを売っ ている供給者すべての名前を調べたくなったとしましょう。この質問に は、リレーショナル代数を使って以下のような演算を施せば答えること ができます。

πSUPPLIER.SNAMEPART.PNAME='Screw'(SUPPLIER ∏ SELLS ∏ PART))
      

上記のような演算を問い合わせといいます。例で使用したテーブル (SUPPLIER と PART データベース)に対して上 記の問い合わせをしたとすれば、以下のような結果が得られるでしょう。

 SNAME
-------
 Smith
 Adams
      

1.3.2. リレーショナル論理

リレーショナル論理は一階述語論理に基づくも のです。リレーショナル論理には2つの種類があります。

たいていのリレーショナル言語の基礎をなしているものでもあるので、 ここではタプルリレーショナル論理についてのみ議論してみようと思い ます。DRC (と TRC について も)詳細な議論はDate, 1994 もしくは Ullman, 1988 をご覧下さい。

1.3.3. タプルリレーショナル論理

TRC で使われる問い合わせは、以下の形式です。

x(A) ∣ F(x)
     
x はタプル変数 、A は 属性の集合、F は論理式です。 結果リレーションは F(t) を満たすすべてのタプル t(A) からなっています。

例:リレーショナル代数を使った問い合わせTRC を使って答えを求めるには以下のような論理式 で問い合わせを行います。

{x(SNAME) ∣ x ∈ SUPPLIER ∧
    ∃ y ∈ SELLS ∃ z ∈ PART (y(SNO)=x(SNO) ∧
    z(PNO)=y(PNO) ∧
    z(PNAME)='Screw')}
     

この質問をSUPPLIER と PART データベース の テーブルに対して再び評価すると、リレーショナル代数を使った問い合わせ と同じ結果が得られます。

1.3.4. リレーショナル代数 vs. リレーショナル論理

リレーショナル代数とリレーショナル論理は同じ表現力 を持っています。すなわち、リレーショナル代数を使って 表すことができる問い合わせはすべてレーショナル論理で表すことが でき、またその逆も可能なのです。これは、1972 年に E. F. Codd によっ て最初に証明されました。この証明は、リレーショナル論理の任意の式 を、それと意味論的に等価なリレーショナル代数の式に変換するアルゴリ ズム("Codd's reduction algorithm")に基づいています。これに関する より詳細な議論に関しては、Date, 1994Ullman, 1988 をご 覧ください。

時に、リレーショナル論理に基づく言語がリレーショナル代数に基づく 言語よりも「より高水準である」とか「より宣言的である」と言われま す。これはリレーショナル代数では演算の順番を(部分的に)指定してし まうことになるのに対して、リレーショナル論理では効率的な評価順の 決定をコンパイラやインタプリタにまかせられるからです。