將ER模型轉換為關係模型:初學者指南

你好啊,未來的數據庫大師!今天,我們將踏上一段從實體關係(ER)模型領域到關係模型領土的興奮旅程。別擔心如果你覺得有些迷茫——我們會一步步來,到了最後,你將能夠像專業人士一樣將ER圖表轉換為關係模式!

DBMS - ER to Relational Model

為什麼要將ER轉換為關係模型?

在我們深入之前,讓我們來聊聊我們為什麼要這麼做。想像你正在蓋一個房子。ER模型就像你的設計圖——它展示了大局。但是要真正建造房子,你需要詳細的計劃。這就是關係模型的用處。它為我們提供了一種在實際的數據庫管理系統(DBMS)中實現我們數據庫設計的具體方法。

現在,讓我們捋起袖子開始吧!

映射實體

什麼是實體?

在數據庫世界中,實體就像一個“事物”。它可以是人、地點或物品——任何我們想要存儲信息的東西。

如何映射實體?

當我們將實體映射到關係模型時,我們創建一個表。這就是那麼簡單!實體的每個屬性都成為表中的一個列。

讓我們看一個例子:

學生
ID (PK)
姓名
年齡
主修
```

在這裡,我們將一個'學生'實體映射到了一個'學生'表。'ID'是我們的主鍵(PK),用於唯一標識每位學生。

說說主鍵

將主鍵想像成學生的獨一無二的身份證。正如沒有兩個學生應該有相同的身份證一樣,我們表中的沒有兩行應該有相同的主鍵值。

映射關係

ER模型中的關係展示了實體是如何相互連接的。在關係世界中,我們使用外鍵來表示這些連接。

一對多關係

這就像一個老師和他/她的學生。一個老師可以有多個學生,但每個學生只有一位老師(在這個情境中)。

| 老師 | | 學生 | |-----------| |-----------| | 老師ID(PK)| | 學生ID(PK)| | 姓名 | | 姓名 | | 學科 | | 老師ID(FK)|


看到學生表中的'老師ID'了嗎?那就是我們的外鍵(FK)。它引用了老師表中的老師ID,創建了這個關係。

### 多對多關係

想像學生和課程。一個學生可以選多門課程,而一門課程也可以有許多學生。為此,我們需要一個連接表:


| 學生      |   | 註冊       |   | 課程       |
|-----------|   |------------|   |------------|
| 學生ID(PK)|   | 學生ID(FK)|   | 課程ID(PK) |
| 姓名      |   | 課程ID(FK) |   | 課程名稱  |
|           |   | 成績       |   |            |

註冊表連接了學生和課程,允許多對多關係。

映射弱實體集

弱實體就像一個配角——它不能沒有它的超級英雄(強實體)存在。在數據庫術語中,它沒有自己的主鍵。

讓我們說我們有一個'房間'作為'建築物'的弱實體:

| 建築物 | | 房間 | |------------| |--------------| | 建築物ID(PK)| | 房間號碼 | | 建築物名稱 | | 容量 | | | | 建築物ID(FK)|


房間的主鍵將是建築物ID和房間號碼的組合。

## 映射層次實體

層次實體就像我們數據庫世界中的家族樹。我們有幾種映射這些實體的方法:

### 1. 單表法

我們把所有的東西放在一個表中:


| 人        |
|-----------|
| 人ID(PK)  |
| 姓名      |
| 類型      |
| 雇員ID    |
| 學生ID    |

這個方法可以工作,但會導致很多空值。

2. 每種類型一表法

我們為基類創建一個表,為每個子類創建分離的表:

| 人 | | 雇員 | | 學生 | |-----------| |------------| |-----------| | 人ID(PK) | | 人ID(FK) | | 人ID(FK) | | 姓名 | | 雇員ID | | 學生ID | | | | 部門 | | 主修 |


這個方法更靈活,但需要連接來查詢。

### 3. 每種具體類型一表法

我們為每種類型創建分離的表,重複公共屬性:


| 雇員      |   | 學生      |
|-----------|   |-----------|
| 人ID(PK)  |   | 人ID(PK)  |
| 姓名      |   | 姓名      |
| 雇員ID    |   | 學生ID    |
| 部門       |   | 主修      |

這個方法避免了空值,但可能會導致數據重疊。

結論

那就這樣了,各位!我們已經從ER模型的概念世界旅程到了關係數據庫的具體領域。記住,熟練來自練習。試著創建你自己的ER圖表並將它們轉換為關係模型。在你意識到之前,你將能夠流利地說數據庫的語言!

持續學習,持續成長,最重要的是,玩得開心和你的數據庫一起。直到下一次,快樂編程!

Credits: Image by storyset