関係代数 (関係モデル)
直積(積、デカルト積、cartesian product)演算 R × S は、R と S の組の全ての組み合わせの関係(デカルト積)を返す。 言い換えると、R がもつ全ての組が、S のもつ全ての組と、組み合わせられる。 直積演算では、R と S が型適合である必要は無い。 直積演算 R × S の組の数は、R の組の数と S の組の数を、掛け算した数になる。 直積演算 R × S の属性の数は、R の属性の数と S の属性の数を、足し算した数になる。
参考: 直積集合
Rを関係とし、Rは {A1, ..., Ak} として属性をもつとする。 また、β ⊆ {A1, ..., Ak} とする (βはRの全属性の部分集合である属性の集合) 。
tβ := (β) は、βを構成する属性集合だけからなる組を意味する。
直積は評価に最もコストを要する演算である。 入力の関係の濃度 (組の数) が N {\displaystyle N} と M {\displaystyle M} であった場合、直積演算の結果として返される関係の濃度は N M {\displaystyle NM} となる。 そのため直積演算を行う前に、演算対象の2つの関係の濃度をできるだけ小さくするよう、最善を尽くすことが重要である。
直積演算の後に制限演算を行う場合、例えば σ A {\displaystyle A} ( R {\displaystyle R} × P {\displaystyle P} ) を評価する場合、この最適化は効果的に行うことができる。 結合の定義を考えると、最適化をとりわけ効果的に行うことができる。 もし制限演算の後に直積演算が続くのであれば、他の制限の法則を使うことで、制限演算を問い合わせの木構造の高い位置から葉の方向へ押し下げるよう試みることができる。
この場合制限条件式 A {\displaystyle A} を、複合した制限演算を分割する法則群を使うことで、制限条件式 B {\displaystyle B} 、 C {\displaystyle C} 、 D {\displaystyle D} へと分解する。 すなわち A {\displaystyle A} = B {\displaystyle B} ∧ C {\displaystyle C} ∧ D {\displaystyle D} となる。
SELECT A, B AS X, C FROM R
関係代数(かんけいだいすう、リレーショナル代数、英: relational algebra)は、関係データベースの関係モデル (リレーショナルモデル)において、集合論と一階述語論理に基づいて、関係 (リレーション、表、テーブル)として表現されたデータを扱う、コンピュータ科学における代数的な演算の体系である。
関係として表現されたデータに対して行う演算体系としては、関係論理(関係計算)とこの項目で説明する関係代数の2種類が知られている。 関係代数と関係論理は、主にエドガー・F・コッドによって考案され、その後コッドを含めた関係データベース(関係モデル)の研究者たちが発展させてきた。
現在では、関係代数の演算子としては、和、差、交わり (交差) 、直積、制限 (選択) 、射影、結合、商の8種類が言及されることが多い。 ただし属性名変更や拡張、要約などこの他の演算子も考案されている。
関係代数を実装したデータベース言語(問い合わせ言語)としては、SQL や Tutorial D などが挙げられる。 ただし SQL については、関係代数を完全な形で実装していないとして批判する意見がある。
数学的に純粋な関係代数は、数理論理学や集合論と比較して、代数的構造をなしている。