Skip to main content

一個資料庫,三種關聯

常常聽人家說:「關聯式資料庫⋯⋯關聯式資料庫⋯⋯」,那到底這個資料庫是關聯了什麼?或是有了幾種關聯呢?

關聯式資料庫

關聯式資料庫是目前最多軟體開發者使用的資料庫系統,資料間大多彼此都會以表格間的某個欄位做關聯,而資料表中的每一列資料行都是一條資料,並有唯一的 ID。

為什麼要關聯

  • 降低重複性
  • 著重資料操作的準確性與一致性 (ACID)
  • 備份與還原功能
  • 能透過 SQL 直接與資料庫互動

三種關聯

一對一 (One to One)

一筆資料 A 只會對應到最多一筆資料 B。

像是一個人只會對應到一組身分證字號,而這組身分證字號也只會被一個人所擁有。

一對多 (One to Many)

一筆資料 A 會對應到多筆資料 Bs,而資料 B 則只會對應到一筆資料 A。

像是一個人會擁有多筆訂單,但是一筆訂單只會屬於一個人。

多對多 (Many to Many)

一筆資料 A 會對應到多筆資料 Bs,資料 B 也會對應到多筆資料 As。

像是一位醫生會有很多位病人,一位病人可能也有很多不同的醫生。

辨識資料間的關係

資料的關係會根據需求而有所不同,那要如何識別資料間關係的種類呢?

最基本的思考方式,是確認目前需求的情境中:

  • 資料 A 是否有多筆資料 B?

  • 資料 B 是否有多筆資料 A?

若兩個問題都是 No,代表資料 A 和 B 是一對一的關係。

若一個為 No,一個為 Yes,那麼就是一對多的關係。

若兩個問題都是 Yes,就是多對多的關係。

建立資料的關係

在關聯式資料庫裡,資料間會有明確的關係,而我們通常會透過主鍵外鍵來建立資料之間的關係。

主鍵 (Primary Key)

主鍵的作用是確保資料表中每筆資料都具有唯一性(Uniqueness)和持有性 (Availability),因此每個資料表都必須設定一個主鍵欄位。

  • 唯一性:獨一無二的值,不會重複出現。

  • 持有性:每筆資料都會具備那個屬性的值。

外鍵 (Foreign Key)

外鍵的功能是用來建立資料表之間的關係,且外鍵一定是其他資料表的主鍵。

而外鍵的取名,通常會讓人能看得出來與另一個資料表的關係。

如何使用主鍵及外鍵

一對一 (One to One)

在一對一的關係裡,可以把任一資料表的 Primary Key 放入另一個資料表當 Foreign Key。

  • 把使用者的主鍵 (id) 當作外鍵建立在身份證字號這張資料表內。
  • 把身份證字號的主鍵 (id) 當作外鍵建立在使用者這張資料表內。

一對多 (One to Many)

在一對多的關係裡,需要把 Primary Key 建在資料少的資料表上,Foreign Key 建在資料多的那張資料表。

  • 把使用者的主鍵 (id) 當作外鍵建立在訂單這張資料表內。

多對多 (Many to Many)

在多對多的關係裡,則需要透過新增一個 Join Table 作為連結點,讓兩張資料表分別與這張 Join Table 成為一對多的關係。

  • 透過 Join Table (Clinic) 與 Table Doctor 和 Table Patient 產生一對多的關聯,藉此將兩個多對多關聯的 Table 建立起關聯。

總結

  • 一對一關聯 (外鍵可以建立在任一張資料表上)
  • 一對多關聯 (外鍵要建立在多的那張資料表上)
  • 多對多關聯 (建立 Join Table,拆成兩個一對多關係)