【PostgreSQLトレーニングはこちら】
お間違いでは? これは大変古いバージョンのマニュアルです。
より新しいバージョンのものはこちら [PostgreSQL日本語マニュアル]

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 をご 覧ください。

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


【PostgreSQL商用サポートはこちら】
SRA OSS, Inc.のページに戻る