← SQL 簡介 | 資料查詢語言 → 在學習 SQL 之前,關係資料庫有一些重要的概念需要先了解。資料庫儲存資訊系統的 資料。我們根據可比資料的組來對資料進行分組(所有員工,所有專案,所有辦事處...)。對於每組可比資料,我們建立一個 *表*。此表專為適合此型別的資料而設計(其屬性)。例如,名為 *employee* 的表,儲存所有員工,將按照以下方式設計
| employee 表
|
| id_employee 主鍵 |
一個整數 |
| firstname 一列 |
一個字串 一個列型別 |
| lastname |
一個字串 |
| phone |
10 個數字 |
| mail |
一個字串 |
公司員工將按照以下方式儲存
| employee
|
| id_employee |
firstname |
lastname |
phone |
mail |
| 1 一個列值 |
Big |
BOSS |
936854270 |
big.boss@company.com |
| 2 |
John |
DOE |
936854271 |
john.doe@company.com |
| 3 |
Linus |
TORVALDS |
936854272 |
linus.torvalds@company.com |
| 4 |
Jimmy |
WALES |
936854273 |
jimmy.wales@company.com |
| 5 |
Larry |
PAGE |
936854274 |
larry.page@company.com |
儲存在表中的資料被稱為 *實體*。由於表通常表示為陣列,資料屬性(姓氏,名...)被稱為 *列*,記錄(員工)被稱為 *行*。*id_employee* 是資料庫特定的技術識別符號,被稱為 *主鍵*。它用於將表中的實體連結到另一個表。為此,它必須對每一行都是唯一的。主鍵通常用下劃線表示。任何唯一的屬性(例如,郵件)或屬性組(例如,姓氏和名)都可以作為表的 主鍵,但建議使用一個額外的技術 ID(id_employee)作為主鍵。
讓我們建立一個名為 *project* 的第二個表,用於儲存公司專案
| employee
|
| id_employee |
一個整數 |
| firstname |
一個字串 |
| lastname |
一個字串 |
| phone |
10 個數字 |
| mail |
一個字串 |
|
| project
|
| id_project |
一個整數 |
| name |
一個字串 |
| created_on |
一個日期 |
| ended_on |
一個日期 |
| # manager |
一個整數 |
|
公司專案將按照以下方式儲存
| employee
|
| id_employee |
firstname |
lastname |
phone |
mail |
| 1 |
Big |
BOSS |
936854270 |
big.boss@company.com |
| 2 |
John |
DOE |
936854271 |
john.doe@company.com |
| 3 |
Linus |
TORVALDS |
936854272 |
linus.torvalds@company.com |
| 4 |
Jimmy |
WALES |
936854273 |
jimmy.wales@company.com |
| 5 |
Larry |
PAGE |
936854274 |
larry.page@company.com |
|
| project
|
| id_project |
name |
created_on |
ended_on |
# manager |
| 1 |
Google |
1998-09-08 |
NULL |
5
|
| 2 |
Linux |
1991-01-01 |
NULL |
3
|
| 3 |
Wikipedia |
2001-01-01 |
NULL |
4
|
|
*id_project* 是 project 表的主鍵,*manager* 是 *外部索引鍵*。外部索引鍵是等於另一個表(這裡指 employee 表)中儲存的主鍵之一的技術 ID。這樣做,Google 專案與員工 Larry PAGE 相關聯。這種關聯被稱為 *關係*。外部索引鍵通常用井號開頭。注意,多個專案可以指向同一個 *共同* 管理員,因此一個員工可以管理 *多個* 專案。
現在,我們想建立一個不是單個連結,而是多個連結。因此,我們建立一個 *連線表*。連線表是不用於儲存資料而是連結其他表中實體的表。讓我們建立一個名為 *members* 的表,用於連結員工與專案
| employee
|
| id_employee |
一個整數 |
| firstname |
一個字串 |
| lastname |
一個字串 |
| phone |
10 個數字 |
| mail |
一個字串 |
|
| members
|
| # id_employee |
一個整數 |
| # id_project |
一個整數 |
|
| project
|
| id_project |
一個整數 |
| name |
一個字串 |
| created_on |
一個日期 |
| ended_on |
一個日期 |
| # manager |
一個整數 |
|
員工和專案可以按照以下方式關聯
| employee
|
| id_employee |
firstname |
lastname |
phone |
mail |
| 1 |
Big |
BOSS |
936854270 |
big.boss@company.com |
| 2 |
John |
DOE |
936854271 |
john.doe@company.com |
| 3 |
Linus |
TORVALDS |
936854272 |
linus.torvalds@company.com |
| 4 |
Jimmy |
WALES |
936854273 |
jimmy.wales@company.com |
| 5 |
Larry |
PAGE |
936854274 |
larry.page@company.com |
| 6 |
Max |
THE GOOGLER |
936854275 |
max.the-googler@company.com |
| 7 |
Jenny |
THE WIKIPEDIAN |
936854276 |
jenny.the-wikipedian@company.com |
|
| project
|
| id_project |
name |
created_on |
ended_on |
# manager |
| 1 |
Google |
1998-09-08 |
NULL |
5
|
| 2 |
Linux |
1991-01-01 |
NULL |
3
|
| 3 |
Wikipedia |
2001-01-01 |
NULL |
4
|
|
| members
|
| # id_employee |
# id_project
|
| 3 |
2
|
| 2 |
1
|
| 4 |
3
|
| 5 |
1
|
| 2 |
3
|
| 6 |
1
|
| 7 |
3
|
|
一個員工可以與多個專案關聯(John DOE 與 Google 和 Wikipedia),*並且* 一個專案可以與多個員工關聯(Wikipedia 與 Jimmy、John 和 Jenny),這在只使用外部索引鍵的情況下是無法做到的。連線表沒有自己的主鍵。它的主鍵是外部索引鍵對,因為這個對是唯一的。連線表可以透過包含更多列來連結兩個以上的實體表。
因此,讓我們列出不同型別的關係
- 一對一,
- 一對多(例如,專案的經理),
- 多對多(例如,專案的成員)。
對於每種型別的關係,都有一種方法可以連結實體
- 一對多關係:從一個實體表到另一個實體表建立一個外部索引鍵,
- 多對多關係:建立一個連線表,
- 一對一關係:合併兩個表。
現在您已經知道如何設計資料庫模式以及如何將資訊系統的資料放入其中。