Dbms-relational-algebra
リレーショナル代数
リレーショナルデータベースシステムには、ユーザーがデータベースインスタンスを照会するのに役立つクエリ言語が装備されていることが期待されています。 クエリ言語には、リレーショナル代数とリレーショナル計算の2種類があります。
リレーショナル代数
リレーショナル代数は手続き型クエリ言語であり、リレーションのインスタンスを入力として受け取り、リレーションのインスタンスを出力として生成します。 演算子を使用してクエリを実行します。 演算子は unary または binary のいずれかです。 入力としてリレーションを受け入れ、出力としてリレーションを生成します。 関係代数は関係に対して再帰的に実行され、中間結果も関係と見なされます。
関係代数の基本的な操作は次のとおりです-
- 選択する
- プロジェクト
- 連合
- 別のセット
- デカルト積
- リネーム
これらすべての操作については、次のセクションで説明します。
操作を選択(σ)
リレーションから指定された述語を満たすタプルを選択します。
表記-σ〜p〜(r)
ここで、σ*は選択述語を表し、 *r は関係を表します。 _p_は、* and、or、、 *not などのコネクタを使用できる前置論理式です。 これらの用語では、-=、≠、≥、<、>、≤などの関係演算子を使用できます。
例-
σsubject = "database"(Books)
出力-件名が「データベース」である書籍からタプルを選択します。
σsubject = "database" and price = "450"(Books)
出力-件名が「データベース」で「価格」が450の書籍からタプルを選択します。
σsubject = "database" and price = "450" or year > "2010"(Books)
出力-件名が「データベース」で「価格」が450の書籍または2010年以降に出版された書籍からタプルを選択します。
プロジェクト運営(∏)
指定された述語を満たす列を投影します。
表記法-∏〜A〜[.small]#1#〜、A〜[.small]#2#〜、A〜[.small]#n#~~(r)
ここで、A〜[.small]#1#〜、A〜[.small]#2#〜、A〜[.small]#n#〜はリレーション r の属性名です。
リレーションはセットなので、重複行は自動的に削除されます。
例-
∏subject, author (Books)
リレーションブックから件名および作成者として名前が付けられた列を選択および投影します。
連合作戦(∪)
それは2つの与えられた関係の間でバイナリ結合を実行し、次のように定義されます-
r ∪ s = { t | t ∈ r or t ∈ s}
表記-r U s
ここで、 r および s は、データベースリレーションまたはリレーション結果セット(一時リレーション)です。
ユニオン操作を有効にするには、次の条件が満たされている必要があります-
- r および s には同じ数の属性が必要です。
- 属性ドメインは互換性がなければなりません。
- 重複するタプルは自動的に削除されます。
∏ author (Books) ∪ ∏ author (Articles)
出力-本または記事、あるいはその両方を書いた著者の名前を投影します。
差を設定(−)
差集合演算の結果はタプルです。タプルは1つの関係に存在しますが、2番目の関係にはありません。
表記- r - s
*r* に存在し、 *s* には存在しないすべてのタプルを検索します。
∏ author (Books) − ∏ author (Articles)
出力-本は書いたが記事は書いていない著者の名前を提供します。
デカルト積(Χ)
2つの異なる関係の情報を1つに結合します。
表記-rΧs
ここで r と s は関係であり、それらの出力は次のように定義されます-
rΧs = \ {q t | q∈rおよびt∈s}
σauthor = 'finddevguides'(Books Χ Articles)
出力-finddevguidesによって書かれたすべての本と記事を示す関係を生成します。
名前変更操作(ρ)
関係代数の結果も関係ですが、名前はありません。 名前変更操作により、出力関係の名前を変更できます。 「名前変更」操作は、小さなギリシャ文字 rho _ρ_で示されます。
表記-ρ〜x〜(E)
式 E の結果が x の名前で保存される場所。
追加の操作は-
- 交差点を設定
- 割り当て
- 自然結合
関係計算
リレーショナル代数とは対照的に、リレーショナル計算は非手続き型のクエリ言語です。つまり、何をすべきかを指示しますが、その方法を説明しません。
関係計算は2つの形式で存在します-
タプル関係計算(TRC)
タプル上の変数範囲のフィルタリング
表記-\ {T |調子}
条件を満たすすべてのタプルTを返します。
例-
{ T.name | Author(T) AND T.article = 'database' }
出力-「データベース」に関する記事を書いた著者から「名前」を持つタプルを返します。
TRCは定量化できます。 Existential(∃)およびUniversal Quantifiers(∀)を使用できます。
例-
{ R| ∃T ∈ Authors(T.article='database' AND R.name=T.name)}
出力-上記のクエリでは、前のクエリと同じ結果が得られます。
ドメイン関係計算(DRC)
DRCでは、フィルタリング変数はタプル値全体ではなく属性のドメインを使用します(上記のTRCで行われます)。
表記-
\ {a〜[.small]#1#〜、a〜[.small]#2#〜、a〜[.small]#3#〜、…、a〜[.small]#n#〜| P(a〜[.small]#1#〜、a〜[.small]#2#〜、a〜[.small]#3#〜、… 、a〜[.small]#n#〜)}
ここで、a1、a2は属性であり、 P は内部属性によって作成された数式を表します。
例-
{< article, page, subject > | ∈ finddevguides ∧ subject = 'database'}
出力-件名がデータベースであるfinddevguidesリレーションから記事、ページ、件名を生成します。
TRCと同様に、DRCは実存的および汎用量指定子を使用して記述することもできます。 DRCには関係演算子も含まれます。
Tuple Relation CalculusおよびDomain Relation Calculusの表現力は、Relational Algebraと同等です。