以下為自學筆記,參考網路多項資源,若有錯誤請不吝指正~
首先了解資料庫到底是什麼,到底設計資料庫會有哪些流程,再介紹關聯資料庫的基本組成、五大常見的 Key 和限制。下一篇會跟著 YouTube 影片將 ER 圖轉成關聯的 Schema 表格。
資料庫的 Flat file 和 Database
我們先來看 Flat-file 跟 Database 差在哪?
Flat-file 和 Database 是兩種儲存資料的方式,但它們在結構、功能和用途上有明顯差異。以下是兩者的主要差別:
資料庫的設計大致流程
了解使用者的需求:
- 瞭解客戶的工作流程、各部門資料串連的關係、需要倒出什麼樣的報表
畫出 ER圖 (概念設計)
- 此階段還是圖像,尚未轉算成連接的表格。
- 下文會詳細介紹 ER 圖含有的原素
轉換為邏輯資料模型(Logical Data Model)
- 產生邏輯 Schema (模式) (如下圖,已確定用資料表所需的欄位,以及資料表之間如何串聯成資料庫)
- 根據 ER 圖先轉換為資料表(Tables)、欄位(Columns)、資料類型(Data Types)、主鍵(Primary Keys)和外鍵(Foreign Keys)等細節
- 再把每個有相關的資料,用key連結,形成關聯式資料模型 (Relational Model)
- 關聯式資料庫(Relational Database)會有 5 種限制,後文也會提到。
實際實作模型(Physical Data Model and Implementation)
- 將邏輯模型轉換為物理模型(可以實際使用的資料庫)
- 使用實際的資料庫系統(如 MySQL、PostgreSQL)上實際建立資料庫
- 需考慮使用者習慣和存取效能
ER 圖 Entity-Relationship Model 介紹
這是一個公司的資料庫設計,以下內容截圖自 YouTube 影片,看起來不算複雜
這個圖主要會有以下這些元素:
Entity 實體
- Srong Entity:不需要依靠別的主體存在,例如員工這個實體。
- Weak Entity: 需要依靠別的主體存在,例如員工的家人,如果沒有員工,就不會有員工的家人存在。「員工的家人」需要透過「員工」來識別。這類實體沒有自己的主鍵,而是通過「依賴實體」的主鍵加上自己的**部分鍵(Partial Key)**來識別。
Attribute 屬性
在表格中,通常是 column header (欄的標頭),每列(row)資料則是 tuple
描述實體的方式
- Key Attribute: 獨一無二的判斷值,例如員工ID。
- Composite Attribute: 可拆的屬性,例如地址可以再往下拆成 縣市、區、門牌號碼...
- Multivalued Attribute: 可能會有很多值,例如一個人會有多個手機號碼。
- Derieved Arribute: 靠別的值計算出來,例如年齡,只要有出生年就可以推斷。
Relationship 關係
- One-to-One, 1:1
一對一,例如一個主管職只能對一個員工 - One-to-Many
例如,一個部門可以有多個員工,但每個員工只能屬於一個部門。 - Many-to-Many, M
例如,學生和課程之間的關係:一個學生可以選修多門課程,而一門課程也可以被多個學生選修。這類關係通常需要中間表來實現關聯。 - 自身關係(Recursive Relationship)Recursive 也有遞迴的意思
同一實體中的實例之間的關係。例如,員工和其直屬主管的關係,兩者都是員工實體的一部分。
1:N 的關係
這個圖怎麼看呢?
Employee 對 Department 的關係是 1 個 employee 只能隸屬一個部門,但一個部門可以有很多員工。
兩個 Entity 的關係限制
- Partial participant: 員工 跟 管理的關係,不是每個員工都會有管理的關係,所以是partcial, 因為有人落單。用一條線表示
- Total particiapant: 每個department 一定都會有manges 一個員工,用兩條線表示
另一種呈現方式,呈現 Entity 和關係的最大最小值。
(Min,Max)
- 第一列的 (0,1) 一位員工最少會管理 0 個部門,最多管理1個部門。
- 第二列的 (1,N) 一個部門最少有一位員工為他工作,最多有 N 位員工為他工作
資料庫的五大 key
資料庫中的各種 Key 是用來確保資料的唯一性和完整性。以下是主要的 Key 類型、解釋與簡單的例子:
關聯式資料庫的五種限制
Domain Constraints (定義域限制) :
- 每個屬性的性質都需要符合該屬性的定義,例如薪水只能是數字,姓名是字串。
- 在geeksforgeeks 提到,各屬性必須是最小單位(原子值)(atomic values),如下圖電話號碼有多值,就會違反這個限制。
Key Constraints (關聯鍵限制):
- 資料庫的關聯中要有關聯鍵的定義,也就是我上面提到的Super key、Candidate Key、Primary Key、Alternate Key、Foreign Key。
- Primary Key不可以跟別人重複。下圖,有兩個 01 當Primary Key
Entity Intergrity Constraints (實體完整限制):
- Primary Key,不能為空 (NULL),不然找不到。
Referential Integerity Constraints(參考完整限制):
- 如果有 Foreign Key 為非空值,必須有可以參考的 Primary Key 。因為如果 Foreign Key 存在,而無法關連到其他表格的Primary Key,這個關聯存在就沒有意義。
- DNO 是左表的Foreign Key,必須有連接到右表的 Primary Key。
主要參考資料與圖片來源: