跳轉到內容

結構化查詢語言/關係資料庫

100% developed
來自華夏公益教科書,開放的書籍,為開放的世界

← 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),這在只使用外部索引鍵的情況下是無法做到的。連線表沒有自己的主鍵。它的主鍵是外部索引鍵對,因為這個對是唯一的。連線表可以透過包含更多列來連結兩個以上的實體表。

因此,讓我們列出不同型別的關係

  • 一對一,
  • 一對多(例如,專案的經理),
  • 多對多(例如,專案的成員)。

對於每種型別的關係,都有一種方法可以連結實體

  • 一對多關係:從一個實體表到另一個實體表建立一個外部索引鍵,
  • 多對多關係:建立一個連線表,
  • 一對一關係:合併兩個表。

現在您已經知道如何設計資料庫模式以及如何將資訊系統的資料放入其中。


華夏公益教科書