資料庫管理系統 - 関係代数
你好,未來的數據庫魔法師們!我很興奮能夠成為你們在這個神奇的關係代數世界中的導遊。作為一個教電腦科學多年的老師(我們就說我記得當軟盤還是真的柔軟的時候吧),我可以向你們保證,掌握這個主題將會像在數據庫領域獲得超能力一樣。那麼,我們來開始吧!
関係代數
想像一下你正在整理你那個龐大的超級英雄動作人偶收藏(也許那只是我)。關係代數就像擁有一套特殊能力,讓你能夠以非常有益的方式操縱和查詢你的收藏。它是我們與關係數據庫互動的基礎,為關係(表格)上的操作提供了理論框架。
基本概念
在我們開始使用花俏符號之前,讓我們確立一些基本規則:
- 関係是元組(行)的集合
- 屬性是列標題
- 操作產生作為其結果的新關係
現在,讓我們看看我們手頭上的超能力(操作):
操作 | 符號 | 描述 |
---|---|---|
選擇 | σ | 根據條件過濾行 |
投影 | ∏ | 選擇特定的列 |
合並 | ∪ | 結合兩個兼容的關係 |
集合差 | − | 從一個關係中刪除出現在另一個關係中的元組 |
笛卡尔積 | Χ | 將一個關係的每一行與另一個關係的每一行結合 |
重命名 | ρ | 更改屬性或關係的名稱 |
選擇操作 (σ)
選擇操作就像擁有數據庫的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 |
我們可以將 Heroes
和 Sidekicks
結合:
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 |
関係微分學
現在我們來簡單地了解一下關係微分學。如果關係代數是關於"如何"獲取數據,那麼關係微分學就是關於"什麼"數據要獲取。它是一種聲明性的方式來指定數據庫查詢。
有兩種類型:
- 元組關係微分學 (TRC)
- 域關係微分學 (DRC)
例如,在TRC中,要找到所有力量為"飛行"的英雄:
{H | H ∈ Heroes ∧ H.Power = "Flight"}
這表示"給我所有元組H,從Heroes中,其中H的力量是飛行。"
年輕的學徒們,你們剛剛在數據庫技能上升了一個級別。記住,能力越大,責任越大——明智地使用這些關係代數操作,你很快就能像專業人士一樣查詢數據庫。現在去精準地組織你的數據,像真正的超級英雄一樣吧!
Credits: Image by storyset