資料庫 Database


一個持續運作的系統都會產生「狀態」,例如:商品價格、使用者名稱、留言內容。通常這些內容不會直接存於程式中,而會是用另外一套工具來記錄這些狀態,稱之為 Database(資料庫)。

Relational Database

Database 中又可以大致分為:Relational Database(關聯式資料庫)、NoSQL(非關聯式資料庫),功能上都是記錄系統所需要的狀態,而這兩種最主要的差別則是在使用上。這個章節會專注於說明 Relational Database。

Schema

Relational Database 中儲存的狀態是由 Table(資料表)和 Record(紀錄)所組成的,每個 Table 表示著不同的資料類型及資料內容的結構,例如:商品、使用者、留言,其中商品可能包含品項、價格,Record 則是 Table 內的每個內容。

一個完整的 Table 範例:

商品編號 品項 單品價格
P001 蘋果 20
P002 香蕉 40

其中橫項會稱為 Record,像是: P001, 蘋果, 20 ,直項會稱為 Column,像是: 商品編號 ,每一格則會稱為 Cell,像是: 香蕉

Primary Key

在 Relational Database 中,Primary Key(主鍵)是用來代表每個 Record 的唯一識別,大多時候 Primary Key 都是設定在某個 Column 上,例如: 商品編號 ,但某些情境下也會使用到 Composite Key(多主鍵),讓多個 Column 共同決定 Record 的唯一識別。

Foreign Key

Foreign Key(外鍵)是 Relational Database 中非常關鍵的存在,通常會表示一項 Record 與另一項的關聯性,不過在多數時候都是表示不同 Table 的 Record 的關聯性。從前面商品的例子來看,拓展一下 Table 的內容,多另外一個 Table。

訂單:

訂單編號 商品編號 數量
O001 P001 2
O002 P001 4

在這個例子來看,每筆訂單有一個唯一識別: 訂單編號 ,而 Foreign Key 則是: 商品編號 。要找訂單的商品內容的時候就可以透過這兩張 Table 列出完整的內容:

訂單編號 商品編號 品項 單品價格 數量
O001 P001 蘋果 20 2
O002 P001 蘋果 20 4

<aside> 📌

如果今天每筆訂單可以有多個商品的話,可以怎麼設計呢?

</aside>