歡迎來到資料庫設計!

你有試過在亂七八糟的抽屜裡找某隻特定的襪子嗎?那種感覺真的很讓人挫折,對吧?設計資料庫就像整理那個抽屜一樣。如果你只是隨手把東西丟進去,你永遠找不到需要的東西,最後甚至會發現剩下三隻左腳襪子,卻一隻右腳的都沒有。在這章節中,我們將學習如何利用正規化 (Normalisation),設計出整潔、高效且不出錯的資料庫。別擔心,即使一開始看起來好像有很多「數學」,其實它只是利用邏輯來讓一切保持井然有序!

第一步:藍圖 (實體關係模型)

在建立資料庫之前,我們需要一個規劃。這被稱為資料模型 (Data Model)。你可以把它想像成在蓋房子磚塊砌上去之前的建築圖紙。

實體與屬性

實體 (Entity) 就是我們想要儲存資料的「對象」(例如:學生 (Student)書本 (Book)汽車 (Car))。每個實體都有屬性 (Attributes),也就是具體的細節(例如:學生姓名 (StudentName)出生日期 (DateOfBirth))。

實體關係 (ER) 圖

我們使用圖表來顯示這些對象之間的關聯。例如,一個顧客 (Customer) 可以下多個訂單 (Orders)。在考試中,你可能會被要求用簡單的方框和線條畫出這些關係。
記憶小撇步:永遠問自己「一個『A』能否擁有多個『B』?」來找出它們的關係。

實體描述

為了清楚地寫下設計,我們使用標準格式:寫下實體名稱,然後在括號中列出屬性。我們將主鍵 (Primary Key)(唯一的識別碼)加上底線
範例:Student(StudentID, FirstName, LastName, CourseID)

重點摘要:良好的設計始於一個清晰的藍圖,說明我們正在收集什麼資料,以及系統中不同的「對象」是如何彼此連結的。

第二步:關聯式資料庫基礎

關聯式資料庫 (Relational Database) 是由一組相互連結的表格所組成的。為了讓這些連結發揮作用,我們使用特殊的「鍵 (Keys)」:

1. 主鍵 (Primary Key):表格中每筆記錄的唯一識別碼。想像成你的身分證號碼或學生編號——沒有兩個人會擁有相同的號碼。
2. 複合主鍵 (Composite Primary Key):有時候,單一欄位不足以成為唯一識別碼。當我們使用兩個或多個欄位組合來建立唯一 ID 時,這就稱為複合主鍵。例如,在「課程 (Lesson)」表格中,教室號碼 (RoomNumber)課節編號 (PeriodNumber) 組合起來可能就是唯一主鍵。
3. 外鍵 (Foreign Key):這是「橋樑」。它是某個表格中的一欄,且該欄位是另一個表格的主鍵。這就是我們如何將學生 (Student) 連結到其老師 (Teacher) 的方式。

快速回顧箱:
- 主鍵 (Primary Key):當前表格的唯一識別 ID。
- 外鍵 (Foreign Key):連結到不同表格中的主鍵。
- 屬性 (Attribute):表格中的一欄/標題。

第三步:什麼是正規化?

正規化 (Normalisation) 是整理資料庫的過程。我們這樣做主要有兩個原因:
- 消除資料冗餘 (Data Redundancy)(在多個地方儲存相同的資訊)。
- 維持資料完整性 (Data Integrity)(確保資料準確且易於更新)。

現實範例:如果某位學生更改了電話號碼,而你在五個不同的表格中都記錄了它,你就必須更新五次。如果你漏掉了一次,你的資料就錯了!正規化確保你只在一個地方儲存該號碼。

你知道嗎?正規化是由 E.F. Codd 在 1970 年代發明的。他建立了一套稱為「正規形式 (Normal Forms)」的規則,以確保資料庫在邏輯上是完美的。

第四步:正規化的三個層次

要讓資料庫達到第三正規化 (3NF),我們必須經歷三個階段。學生通常覺得這有點困難,但只要遵守這些簡單規則即可:

第一正規化 (1NF)

如果表格中沒有重複的屬性群組,該表格就符合 1NF。這意味著表格中的每個「儲存格」必須僅包含單一值(必須是原子性 (Atomic) 的)。
常見錯誤:有一欄名為「科目」,然後把「數學、物理、電腦科學」全部塞在同一個格子裡。在 1NF 中,這些必須是分開的記錄。

第二正規化 (2NF)

要符合 2NF,表格必須先符合 1NF。接著,你必須移除部分函數依賴 (Partial Dependencies)
這僅適用於你擁有複合主鍵的情況。每個非鍵屬性必須依賴於整個複合主鍵,而不是只依賴其中一部分。
範例:如果你的主鍵是 (StudentID, CourseID),而你有一欄是 學生地址 (StudentAddress),該地址僅依賴於 StudentID。它與 CourseID 無關。這就是部分函數依賴!你必須將地址移動到獨立的 Student 表格中。

第三正規化 (3NF)

要符合 3NF,表格必須先符合 2NF。接著,你必須移除遞移依賴 (Transitive Dependencies)
這意味著「沒有非鍵屬性應該依賴於另一個非鍵屬性」。所有屬性應僅依賴於主鍵。
類比:想像一個表格 FootballTeam(PlayerID, Name, ClubName, ClubManager)。其中的 ClubManager 是依賴於 ClubName,而不是直接依賴於 PlayerID。這就是遞移依賴。你應該將球隊資訊移動到它自己的表格中。

黃金口訣:
要記住 3NF 的規則,資料庫專家常說:「資料必須依賴於主鍵 (1NF),依賴於整個主鍵 (2NF),且除了主鍵之外不依賴其他 (3NF)。」

重點摘要:當你達到 3NF 時,表格中的每一項資訊都嚴格與該表格的主鍵相關,除此之外別無其他。這會讓你的資料庫精簡、快速且可靠。

快速總結檢查清單

- 1NF:儲存格中沒有列表。資料具有原子性。
- 2NF:沒有部分函數依賴(留意複合主鍵!)。
- 3NF:沒有遞移依賴(非鍵屬性不應依賴於其他非鍵屬性)。
- 目標:最小化重複並保持資料準確性。

最後鼓勵:正規化需要練習!如果你覺得很吃力,試著把表格畫在紙上,並圈出哪些資訊片段是「屬於」哪個鍵的。你很快就會掌握訣竅了!