Data Models & Query Languages
Relational Model vs Document Model

- Document Model
- Great for: One-to-Many
- Weak Support: Many-to-Many, Many-to-One (Application-level Join)
- Relational Model
- Great for: One-to-Many
- Support: Many-to-Many, Many-to-One (Native Join)
- Graph Model
- Great for: Many-to-Many
- Support: One-to-Many, Many-to-One
One to Many
一個常見的例子是「使用者與訂單」之間的關係。 假設您正在設計一個電子商務平台,每個使用者可以有多個訂單,但每個訂單只能屬於一個使用者。
在資料庫中,您可以建立兩個相關聯的表格:「使用者表格」和「訂單表格」。 使用者表格可能包含使用者的詳細資訊,例如使用者ID、姓名、電子郵件等。而訂單表格可能包含訂單的相關資訊,例如訂單ID、使用者ID、訂單日期等。
這裡是一個簡單的示意圖:
使用者表格
使用者ID | 姓名 | 電子郵件
-----------------------
1 | 張三 | example@example.com
2 | 李四 | example2@example.com
訂單表格
訂單ID | 使用者ID | 訂單日期
----------------------------
1 | 1 | 2023-06-01
2 | 1 | 2023-06-05
3 | 2 | 2023-06-02
... (其他訂單資訊)
在這個例子中,使用者表格中的使用者ID與訂單表格中的使用者ID相關聯,建立了「一對多」的關係。張三(使用者ID為1)有兩個訂單(訂單ID為1和2),而李四(使用者ID為2)只有一個訂單(訂單ID為3)。
這種「一對多」的關係在許多不同的應用中都很常見,例如部門與員工、作者與文章、課程與學生等。它能夠幫助您組織和管理相關聯的資料。
Many to One
「多對一」關係在資料庫設計中也很常見。一個典型的例子是「學生與班級」之間的關係。假設您正在建立一個學校管理系統,其中每個班級可以擁有多個學生,但每個學生只能屬於一個班級。
為了建立這種關係,您可以在資料庫中建立兩個相關聯的表格:「班級表格」和「學生表格」。班級表格可能包含班級的相關資訊,例如班級ID、班級名稱、教室等。而學生表格可能包含學生的詳細資訊,例如學生ID、姓名、生日等,並且有一個欄位來儲存所屬班級的ID。
這裡是一個簡單的示意圖:
班級表格
班級ID | 班級名稱 | 教室
-----------------------
1 | 一年級 | A101
2 | 二年級 | B203
學生表格
學生ID | 姓名 | 生日 | 班級ID
-----------------------------------
1 | 張三 | 2005-03-15 | 1
2 | 李四 | 2006-06-22 | 1
3 | 王五 | 2005-09-10 | 2
... (其他學生資訊)
在這個例子中,學生表格中的班級ID與班級表格中的班級ID相關聯,建立了「多對一」的關係。一年級(班級ID為1)有兩個學生(學生ID為1和2),而二年級(班級ID為2)有一個學生(學生ID為3)。
「多對一」的關係也可以在其他情境中使用,例如員工與部門、商品與分類等。這種關係能夠幫助您組織和管理資料,並支援各種查詢和分析需求。
Many to Many
「多對多」關係在資料庫設計中也很常見,它表示兩個實體之間可以相互關聯且互相擁有多個對應項目。 一個常見的例子是「學生與課程」之間的關係。一個學生可以選修多個課程,同時一個課程也可以有多個學生。
為了建立這種「多對多」的關係,通常需要使用一個中介表格(稱為關聯表格)來跟踪兩個實體之間的關聯。讓我們以「學生」和「課程」為例來說明。
學生表格
學生ID | 姓名 | 生日 |
-----------------------------
1 | 張三 | 2005-03-15 |
2 | 李四 | 2006-06-22 |
3 | 王五 | 2005-09-10 |
... (其他學生資訊)
課程表格
課程ID | 課程名稱 | 授課教師 |
-------------------------------
1 | 數學 | 張老師 |
2 | 英文 | 李老師 |
3 | 物理 | 王老師 |
... (其他課程資訊)
關聯表格(學生與課程之間的關聯)
學生ID | 課程ID |
-----------------
1 | 1 |
1 | 2 |
2 | 2 |
3 | 1 |
3 | 3 |
... (其他關聯資訊)
在這個例子中,關聯表格用於跟踪學生和課程之間的關聯。張三(學生ID為1)選修了數學(課程ID為1)和英文(課程ID為2);李四(學生ID為2)選修了英文(課程ID為2);王五(學生ID為3)選修了數學(課程ID為1)和物理(課程ID為3)。
這種「多對多」的關係在許多場景中都非常常見,例如學生與課程、文章與標籤、商品與訂單等。 透過關聯表格的使用,您可以輕鬆地追蹤和管理多對多關係的資料。