リレーショナルモデルを使用する場合、使用できる操作のグループは2つあります。
最初のものは関係代数と呼ばれます 、そしてそれは手続き型言語 。
これはSQLの基礎であり、SQLはリレーショナルデータベースを操作するためのデファクトスタンダードであるため、学ぶことが非常に重要です。
2番目は関係論理と呼ばれます 手続き型ではなく、宣言型 。これは、データベースソフトウェアとのやり取りの方法における根本的な違いです。これは、データベースソフトウェアに何をすべきかを指示しないためです。 、欲しいものを伝えるだけです 、そしてそれを行う方法の詳細を整理させてください。
これはプログラミング言語間の一般的な違いです。現代のフロントエンドでは、ReactでのDOMとの相互作用は宣言的であると言います。バニラJavaScriptを使用してDOMを変更するのは手続き型です。
Datalog、QBE、QUELなどの言語は、そのベースとして関係論理を持っています。これについては説明しません。SQLが従うより実用的なアプローチと比較して、物事を行うためのよりニッチな方法だと思いますが、必要に応じて確認できます。
この紹介を踏まえて、関係代数を続けましょう。 。
2種類の操作があります:
- 主な操作
- 操作に参加
主な操作は次のとおりです。
- ユニオン 2つのテーブルが同じ列と属性タイプ(ドメイン)を持っている限り、2つのテーブルからデータを取得し、タプルの合計を生成します。
- 違い 2つのテーブルが同じ列と属性タイプ(ドメイン)を持っている限り、最初のテーブルに含まれているが2番目のテーブルには含まれていないデータを取得し、タプルの違いを生成します。
- デカルト積 2つのテーブルからデータを取得し、属性値に基づいてそれらのデータを組み合わせた1つのテーブルを生成します。
- 選択 特定の基準に基づいて、テーブルに含まれるタプル(行)の一部のみを抽出します。
- プロジェクト 既存のテーブルの1つ以上の属性(列)のみを含む新しいテーブルを生成するには
- 名前の変更 属性の名前を変更するために使用され、複数のテーブルが異なるデータに対して同じ名前を持っている場合の競合を防ぐために使用されます
結合は、おそらく関係代数で実行できる最も強力な操作です。これらは主要な操作の上に構築されており、さまざまな関係(テーブル)に含まれるデータを相互に関連付けることができます。
注:DBMSでの実際の結合についてはすぐに説明しますが、これはほとんど理論です。
2つの主要な結合バージョンがあります:自然結合 およびシータ結合 。他のすべてのバージョンは、それらの2から抽出されます。
自然参加 2つのリレーション(テーブル)を相互に関連付け、属性の同じ値に基づいて新しいテーブルを作成します。
まず、同じ属性名(列)を持つ2つのリレーションが必要です。次に、リレーションAの属性の値が、リレーションBの属性で一致しない場合、その行は結果の一部ではなく、無視されます。
例:
関係A
従業員ID | 名前 |
---|---|
1 | マーク |
2 | トニー |
3 | リック |
関係B
マネージャー名 | 従業員ID |
---|---|
トッド | 1 |
アルバート | 2 |
自然な結合を実行して、各従業員のボス名を取得できます:
従業員ID | 名前 | マネージャー名 |
---|---|---|
1 | マーク | トッド |
2 | トニー | アルバート |
リレーションには共通の従業員ID属性名があるため、結果には2回ではなく、1回だけ表示されます。
リレーションAに存在する従業員#3のリックは、リレーションBに対応するエントリがないため、この表には含まれていません。
シータ結合を使用すると、任意の基準に基づいて結合を実行し、自然結合のように等しいだけでなく、2つの異なる関係にある2つの列を比較できます。
2つのテーブルのデカルト積を実行し、必要な選択に基づいて結果をフィルタリングします。
Equi-join
等結合はシータ結合であり、選択は2つの異なるテーブルの属性値間の同等性に基づいて行われます。
自然結合との違いは、比較する属性名(列)を選択できることです。
結合については、後でSQLが導入されたときに詳しく説明するので、実際に使用できます。