関係代数と関係計算の正確な違いは何ですか。ほとんどの場合、それは
Relational algebra is procedural and calculus is non procedural
。
それで、これらは何の略ですか。ただし、関係代数を使用してすべての問題を解決できます。次に、なぜ関係計算を使用するのか。定義を除いて、例による説明は大歓迎です。
TL; DR:RA(関係代数)演算子を呼び出すクエリと2つの関係計算(RC)TRC(タプルRC)とDRC(ドメインRC)のクエリ)は、同じものに対する異なる構文です:リレーション値、またはリレーション値のタプルが満たす必要があるプロパティ/条件。 SQLと同様(それらの混合(アップ))。述語計算と同様に、数学、論理、科学(コンピュータサイエンスを含む)およびエンジニアリング(ソフトウェアエンジニアリングを含む)における精度の言語。そして、手続き型としてのRAと宣言型としてのRCは神話です。
relationは、いくつかの述語-属性によってパラメーター化されたステートメントテンプレートを真の命題-ステートメントにするタプルを保持します。
/* tuples where employee PERSONNAME lives on STREET in CITY */
Employee
/* tuples where employee PERSONNAME works at COMPANY for $SALARY */
WorksFor
RAスタイルのクエリ式には、属性名、関係変数/定数名、関係リテラル(属性名と値を含む)、および関係演算子が含まれます。演算子は、JOIN、UNION、MINUS、PROJECT、RESTRICTなどです。これは、式を評価することによって取得される関係値を示します。しかし、それは、その価値が満たされるための要件でもあります。
/* RA query for tuples where
FOR SOME STREET & CITY [employee PERSONNAME lives on STREET in CITY]
AND NOT FOR SOME COMPANY & SALARY
[employee PERSONNAME works at COMPANY for $SALARY AND COMPANY = 'FBC']
*/
PROJECT PERSONNAME (Employee)
MINUS PROJECT PERSONNAME (RESTRICT COMPANY = 'FBC' (WorksFor))
RC式は、関係値の set-builder notation です。これには、関係変数/定数名、属性名と値、述語演算子と数量化された名前(論理変数)を含む述語が含まれます。演算子は、AND、OR、NOT、FOR SOME/ALLおよび=です。これは通常、値が満たされるための要件と見なされます。ただし、式または特定の同等の式を評価することで得られる関係値も示します。
DRCには、属性である数量化された名前があります。属性ごとに1つのパラメーターを持つステートメントの省略形を使用します。
Employee(PERSONNAME, STREET, CITY)
means (PERSONNAME, STREET, CITY) IN Employee
means employee PERSONNAME lives on STREET in CITY
WorksFor(PERSONNAME, COMPANY, SALARY)
means (PERSONNAME, COMPANY, SALARY) IN WorksFor
means employee PERSONNAME works at COMPANY for $SALARY
/* DRC query for the same tuples as the RA query above */
tuples like (PERSONNAME) where
FOR SOME STREET & CITY [Employee(PERSONNAME, STREET, CITY)]
AND NOT FOR SOME COMPANY & SALARY
[WorksFor(PERSONNAME, COMPANY, SALARY) AND COMPANY = 'FBC']
TRCには、タプルである数量化された名前があります。名前にドットを付けて、その中の属性名に関連付けられた値を取得します。 (プログラミング言語レコードのフィールドのように。)1つのパラメーター(タプル)を持つステートメントの省略形を使用します。
Employee(T)
means T IN Employee
means employee T.PERSONNAME lives on T.STREET in T.CITY
Worksfor(T)
means T IN Worksfor
means employee T.PERSONNAME works at T.COMPANY for $T.SALARY
/* TRC query for the same tuples as the RA query above */
tuples equal to some Tuple T like (PERSONNAME) where
FOR SOME E [Employee(E) AND E.PERSONNAME = T.PERSONNAME]
AND NOT FOR SOME W [
WorksFor(W)
AND W.COMPANY = 'FBC'
AND E.PERSONNAME = T.PERSONNAME
]
(RAとRCのオリジナルのいくつかのバリアントが教えられています。たとえば、順序によって引数を特定するものと、名前によって引数を特定するものがあります。場合によっては、追加の機能が追加されます。演算子[〜#〜] r [〜#〜] RENAME [〜#〜] a [〜#〜] TO [〜#〜] n [ 〜#〜] RAで。)
ただし、RA演算子とRC演算子の間、およびRA式とRC式の間には対応関係があります。
次の場合:
•R-R(...)のタプルを保持します
•S-S(...)のタプルを保持します
その後:
•R JOIN Sはタプルを保持しますR(...) AND S(...)
•R UNION SはR(...) OR S(...)
•R MINUS Sはタプルを保持しますR(...) AND NOT S(...)
•Rプロジェクト保持する列は、いくつかの場合にタプルを保持します削除する列、R(...)
•R RESTRICT conditionはタプルを保持しますR(...) AND condition
RA式の値は、対応するRC式を満たすタプルです。
演算子ごとにRC式からRA式にマッピングする場合、拡張RA演算子が必要です。1つはUNIONを一般化し、もう1つはNOTに対応します。これらは、実装で実際に使用したい演算子ではありません。返される関係値は、ある意味で望ましくないほど大きくなります。しかし、それらを使用するすべてのRC式は、基本的なRA演算子のみを使用する通常の形式に機械的に再配置できます。
したがって、手続き型のRAと宣言型のRCは神話です。すべてのRA演算子には対応するRC演算子があり、すべてのRC演算子には(拡張されている可能性がある)対応するRA演算子があります。それらは同じものの2つの表記法です。どちらかの式は、解析または正規化して実行することで「手続き型」と見なし、それ以外の場合は「宣言型」と見なすことができます。神話は、RC式は基本的なRA演算子を使用する式のように演算子ごとではないという考えを捉えようとしています。しかし、RC式doesは、基本的な演算子を使用して、そのnon-obvious正規形のRA式を識別します。そしてis拡張演算子を含むRA式のような演算子ごとの演算子です。
(wordsの歴史があるため、この神話は役立つかもしれません。「現代代数」は、値を取り、与える演算子を伴う式を持ち、計算することができます。「微積分」別名分析-微分と積分-計算できない無限の制限と合計を介して値を表す式があります。他の方法で計算します。一般的には概算のみを計算します。)
(また、皮肉なことに、「述語微積分」は、他の方法で計算または推定される方法に関係なく、「宣言的に」物事を指定すると見なされます。しかし、そのような式の標準的なセマンティクス/意味は、式を歩くアルゴリズムに従って与えられますツリーなので、明らかに「手続き型」の解釈になります。)
詳細については、このリンクにアクセスしてください。 http://ecomputernotes.com/database-system/rdbms/relational-algebra-and-relational-calculus
[
これ NYUクラスからのプレゼンテーションは私にとってかなり役に立ちました。私もこれを学んでいるだけなので、あまり役に立ちませんが、リレーショナル代数はより具体的なセット式、結合演算、およびセットの組み合わせを扱い、リレーショナル計算はほとんどAND-OR関係に固執します。そして、存在( "xが存在するような[condition(x)])または普遍的な(" For all x's、[condition(x)])数量詞。リレーショナル代数式は、機能と特異性においてアセンブリ言語に似ていると想像しますが、リレーショナル微積分式は、外観と機能において高水準プログラミング言語に近いと思います。これが一部に役立つことを願っています。
関係代数と関係計算の違い
関係代数演算は、いくつかの関係を操作し、クエリの形式でいくつかの式を提供します。ここで、関係計算は式のペアに基づいてクエリを形成します。
RAには結合、ユニオン、交差、除算、差、射影、選択などの演算子があります。RCにはタプルとドメイン指向の式があります。
RAは手続き型言語で、RCは非手続き型クエリシステムです。
RAとRCの表現力は同等です。つまり、RAで表現できるクエリは、RCの数式で表現できます。
KC数式はすべて、代数クエリで変換されます。
RCよりもRAでのクエリの方が簡単な変更があります。
RAは数学的形式を形成し、特定のjuer1言語はありません。RCも数学的形式を持っていますが、1つのクエリ言語QUELを持っています。
リレーショナル代数は、RCよりも操作と理解が簡単です。
RAクエリはRCよりも強力です。
RCはWFFで形成され、RAは式を形成しません。
RAは手続き型です。つまり、いくつかの条件を順番に記述します。
RCは非手続き型です。ここでは、条件を任意の順序で記述しています。
例:-
ライブラリの例:-
Book is a relation it have a following attributes.
1. Book Name
2. Accession Number
3. Year of publication
問題:-
Find out the all book names published in the year 2000
関係代数:-
-------------------------------------------------------
| (σ (book) ) |
| ¶ (yr_pub=2000) |
| (Book name) |
------------------------------------------------------
関係計算:-
S = { t | ∃ u ∈ book (t[book name] = u[book name]) ∧ (u[yr_pub] = 2000 ) }
このリレーショナル計算では、次のような任意の場所で条件を記述できます。
S = { t | ∃ u ∈ book (u[yr_pub] = 2000 ) ∧ (t[book name] = u[book name]) }
しかし、リレーショナル代数では、最初に、タプルの発行年が2000年であるものを見つける必要があります。次に、書籍名の列を抽出するだけです。