資料庫管理系統 - 関係代数

你好,未來的數據庫魔法師們!我很興奮能夠成為你們在這個神奇的關係代數世界中的導遊。作為一個教電腦科學多年的老師(我們就說我記得當軟盤還是真的柔軟的時候吧),我可以向你們保證,掌握這個主題將會像在數據庫領域獲得超能力一樣。那麼,我們來開始吧!

DBMS - Relational Algebra

関係代數

想像一下你正在整理你那個龐大的超級英雄動作人偶收藏(也許那只是我)。關係代數就像擁有一套特殊能力,讓你能夠以非常有益的方式操縱和查詢你的收藏。它是我們與關係數據庫互動的基礎,為關係(表格)上的操作提供了理論框架。

基本概念

在我們開始使用花俏符號之前,讓我們確立一些基本規則:

  1. 関係是元組(行)的集合
  2. 屬性是列標題
  3. 操作產生作為其結果的新關係

現在,讓我們看看我們手頭上的超能力(操作):

操作 符號 描述
選擇 σ 根據條件過濾行
投影 選擇特定的列
合並 結合兩個兼容的關係
集合差 從一個關係中刪除出現在另一個關係中的元組
笛卡尔積 Χ 將一個關係的每一行與另一個關係的每一行結合
重命名 ρ 更改屬性或關係的名稱

選擇操作 (σ)

選擇操作就像擁有數據庫的X光視力。它讓你能夠根據特定條件過濾行。

語法:σ<條件>(關係)

假設我們有一個名為 Heroes 的表:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |

如果我們想找到所有年齡小於100歲的英雄:

σ Age < 100 (Heroes)

這會給我們:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Barry  | Speed        | 28  |

看見了嗎?我們過濾掉了黛安娜,我們那個永恆的神奇女俠!

投影操作 (∏)

投影操作就像擁有縮小射線。它讓你能夠選擇特定的列,從而減少你的關係的寬度。

語法:∏<屬性列表>(關係)

使用我們的 Heroes 表,如果我們只想得到名字和力量:

∏ Name, Power (Heroes)

結果:

| Name   | Power        |
|--------|--------------|
| Bruce  | Intelligence |
| Clark  | Flight       |
| Diana  | Strength     |
| Barry  | Speed        |

我們縮小了表,專注於我們需要的部分!

合並操作 (∪)

合並操作就像龍珠Z中的融合一樣——它結合兩個兼容的關係。

語法:關係1 ∪ 關係2

假設我們有另一個名為 Sidekicks 的表:

| Name   | Power   | Age |
|--------|---------|-----|
| Robin  | Acrobat | 22  |
| Jimmy  | None    | 25  |

我們可以將 HeroesSidekicks 結合:

Heroes ∪ Sidekicks

結果:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |
| Robin  | Acrobat      | 22  |
| Jimmy  | None         | 25  |

現在我們有一個超級隊伍!

集合差 (−)

集合差就像擁有分解射線。它從一個關係中刪除在另一個關係中出現的元組。

語法:關係1 − 關係2

如果我們想找到不是夥伴的英雄:

Heroes − Sidekicks

這會給我們原始的 Heroes 表,因為沒有一個英雄在 Sidekicks 表中。

笛卡尔積 (Χ)

笛卡尔積就像創造每個英雄遇到每個夥伴的平行宇宙。

語法:關係1 Χ 關係2

Heroes Χ Sidekicks

這會導致一個表,其中包含每個可能的英雄和夥伴組合。這是一個很大的表,所以我們不會顯示全部,這裡有一個片段:

| HName  | HPower       | HAge | SName | SPower  | SAge |
|--------|--------------|------|-------|---------|------|
| Bruce  | Intelligence | 35   | Robin | Acrobat | 22   |
| Bruce  | Intelligence | 35   | Jimmy | None    | 25   |
| Clark  | Flight       | 30   | Robin | Acrobat | 22   |
| Clark  | Flight       | 30   | Jimmy | None    | 25   |
...

重命名操作 (ρ)

重命名操作就像擁有改變現實的能力。它讓你能夠更改屬性或關係的名稱。

語法:ρ new_name (old_name)

如果我們想將 Power 屬性重命名為 Superpower

ρ Superpower←Power (Heroes)

結果:

| Name   | Superpower   | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |

関係微分學

現在我們來簡單地了解一下關係微分學。如果關係代數是關於"如何"獲取數據,那麼關係微分學就是關於"什麼"數據要獲取。它是一種聲明性的方式來指定數據庫查詢。

有兩種類型:

  1. 元組關係微分學 (TRC)
  2. 域關係微分學 (DRC)

例如,在TRC中,要找到所有力量為"飛行"的英雄:

{H | H ∈ Heroes ∧ H.Power = "Flight"}

這表示"給我所有元組H,從Heroes中,其中H的力量是飛行。"

年輕的學徒們,你們剛剛在數據庫技能上升了一個級別。記住,能力越大,責任越大——明智地使用這些關係代數操作,你很快就能像專業人士一樣查詢數據庫。現在去精準地組織你的數據,像真正的超級英雄一樣吧!

Credits: Image by storyset