データベース管理システム - 関係代数

こんにちは、未来のデータベースの魔法使いたち!関係代数の魔法の世界にPoolingするこのエキサイティングな旅に、あなた们的ガイドとして参加できることを嬉しく思います。私がコンピュータサイエンスを教えてきた年数は、私が認めたくないほど多いのですが(フロッピーディスクが本当にフロッピーだった時代を覚えています)、このトピックをマスターすることは、データベースの領域でスーパーパワーを得ることと同じです。それでは、始めましょう!

DBMS - Relational Algebra

関係代数

あなたが広大なスーパーヒーローアクションフィギュアのコレクションを整理していると imagine してみてください。関係代数は、あなたのコレクションを非常に便利な方法で操作し、クエリするための特別なパワーを持っています。これは、関係データベースとの対話の基盤となっており、関係(テーブル)に対する操作のための理論的枠組みを提供します。

基本的な概念

派手な記号を使い始める前に、いくつかの基本ルールを確立しましょう:

  1. 関係はタプル(行)の集合です
  2. 属性は列のヘッダーです
  3. 操作は新しい関係をその結果として生成します

では、私たちが利用できるスーパーパワー(操作)を見てみましょう:

操作 シンボル 説明
選択 σ 条件に基づいて行をフィルタリング
投影 特定の列を選択
結合 互換可能な二つの関係を結合
集合の差 別の関係に存在するタプルを一つの関係から削除
符号積 Χ 一つの関係の各行を他の関係の各行と結合
名前変更 ρ 属性や関係の名前を変更

選択操作 (σ)

選択操作は、データベースに対するX線透視眼のように作用します。特定の条件に基づいて行をフィルタリングすることができます。

構文: σ<条件>(関係)

例えば、Heroesというテーブルがあるとします:

| 名前   | パワー        | 年齢 |
|--------|--------------|------|
| Bruce  | 知能         | 35   |
| Clark  | 飛行         | 30   |
| Diana  | 力           | 5000 |
| Barry  | 速度         | 28   |

100歳未満のヒーローをすべて見つけたい場合:

σ 年齢 < 100 (Heroes)

これにより以下の結果が得られます:

| 名前   | パワー        | 年齢 |
|--------|--------------|------|
| Bruce  | 知能         | 35   |
| Clark  | 飛行         | 30   |
| Barry  | 速度         | 28   |

見てください!ディアナ、私たちの永遠の美女ヒーローをフィルタリングしました!

投影操作 (∏)

投影操作は、縮小レーザーのように作用します。特定の列を選択し、関係の幅を縮小します。

構文: ∏<属性リスト>(関係)

Heroesテーブルを使用して、名前とパワーだけを取得したい場合:

∏ 名前, パワー (Heroes)

結果:

| 名前   | パワー        |
|--------|--------------|
| Bruce  | 知能         |
| Clark  | 飛行         |
| Diana  | 力           |
| Barry  | 速度         |

テーブルを縮小し、必要な情報に焦点を当てました!

結合操作 (∪)

結合操作は、ドラゴンボールZの融合のように、二つの互換可能な関係を結合します。

構文: Relation1 ∪ Relation2

例えば、別のテーブルSidekicksがあるとします:

| 名前   | パワー   | 年齢 |
|--------|----------|------|
| Robin  | アクロバット | 22   |
| Jimmy  | なし     | 25   |

HeroesSidekicksを結合します:

Heroes ∪ Sidekicks

結果:

| 名前   | パワー        | 年齢 |
|--------|--------------|------|
| Bruce  | 知能         | 35   |
| Clark  | 飛行         | 30   |
| Diana  | 力           | 5000 |
| Barry  | 速度         | 28   |
| Robin  | アクロバット | 22   |
| Jimmy  | なし         | 25   |

今、私たちはスーパーチームをもちました!

集合の差 (−)

集合の差は、溶解レーザーのように作用します。一つの関係から別の関係に存在するタプルを削除します。

構文: Relation1 − Relation2

ヒーローの中からサイドキックでない人を見つけたい場合:

Heroes − Sidekicks

これにより元のHeroesテーブルが得られます。なぜなら、サイドキックがいないからです。

符号積 (Χ)

符号積は、すべてのヒーローがすべてのサイドキックと出会う別の宇宙を作成することのように作用します。

構文: Relation1 Χ Relation2

Heroes Χ Sidekicks

これにより、すべてのヒーローとサイドキックの組み合わせが得られます。これは大きなテーブルになるため、ここでは一部だけを示します:

| HName  | HPower       | HAge | SName | SPower  | SAge |
|--------|--------------|------|-------|---------|------|
| Bruce  | 知能         | 35   | Robin | アクロバット | 22   |
| Bruce  | 知能         | 35   | Jimmy | なし     | 25   |
| Clark  | 飛行         | 30   | Robin | アクロバット | 22   |
| Clark  | 飛行         | 30   | Jimmy | なし     | 25   |
...

名前変更操作 (ρ)

名前変更操作は、現実を変えるパワーのように作用します。属性や関係の名前を変更することができます。

構文: ρ new_name (old_name)

Power属性をSuperpowerに変更したい場合:

ρ Superpower←Power (Heroes)

結果:

| 名前   | Superpower   | 年齢 |
|--------|--------------|-----|
| Bruce  | 知能         | 35  |
| Clark  | 飛行         | 30  |
| Diana  | 力           | 5000|
| Barry  | 速度         | 28  |

関係微分

そして、最後のアクト、関係微分について簡単に触れてみましょう。関係代数は「どのように」データを取得することについてであり、関係微分は「どのデータ」を取得することについてです。これはデータベースクエリを宣言的な方法で指定します。

二つの種類があります:

  1. タプル関係微分(TRC)
  2. ドメイン関係微分(DRC)

例えば、TRCで「飛行」パワーのヒーローを見つける場合:

{H | H ∈ Heroes ∧ H.Power = "飛行"}

これは「HeroesからHを取得し、HのPowerが飛行であるすべてのタプルを返す」と言っています。

そして、あなたたち若いパダワンたち!データベーススキルがレベルアップしました。大きなパワーには大きな責任が伴います – これらの関係代数操作を賢く使ってください。これで、データベースをプロのようにクエリするスキルを身につけることができます。さあ、データを正確に整理するための真のスーパーヒーローのように進んでください!

Credits: Image by storyset