第 2 章 規劃關聯式資料庫
本章提要 簡易的規劃流程 收集資料項並轉換成欄位 認識關聯、Primary Key 與 Foreign Key 資料的完整性 資料表的關聯種類 資料庫的正規化分析
簡易的規劃流程 第一階段:收集完整且必要的資料項, 並轉換成資料表的欄位形式。 第二階段:將收集的欄位做適當分類後, 歸入不同的資料表中, 並建立資料表間的關聯。
收集資料項並轉換成欄位 收集必要且完整的資料項
收集資料項並轉換成欄位 轉換成資料表的欄位
收集資料項並轉換成欄位 轉換成資料表的欄位
關聯 下圖的訂單資料表與客戶資料表, 便因為客戶編號欄位而產生關聯:
分割資料表並建立關聯的優點 節省儲存空間 減少輸入錯誤 方便資料修改
節省儲存空間
節省儲存空間 當書籍資料表需要使用到作者名稱或分類時, 就可以經由關聯, 到作者資料表與分類資料表中選取:
減少輸入錯誤
Primary key Primary key 是用來辨識記錄的欄位, 具有唯一性, 且不允許重複。
Primary key
Foreign key 在關聯式資料庫中, 資料表之間的關係是藉由 Foreign key 來建立的:
資料的完整性 實體完整性 (Entity Integrity) 區域完整性 (Domain Integrity) 參考完整性 (Referential Integrity) 使用者定義的完整性 (User-defined Integrity)
資料表的關聯種類 一對一關聯 (one-to-one) 一對多關聯 (one-to-many) 多對多關聯 (many-to-many)
一對一關聯 (one-to-one)
一對一關聯 (one-to-one)
一對多關聯 (one-to-many)
多對多關聯 (many-tomany)
資料庫的正規化分析 正規化就是要讓資料庫中重複的資料減到最少, 讓我們能夠快速地找到所要的資料, 以提高關聯式資料庫的效能。
資料庫的正規化之前 資料表必須先設好 Primary key 確定資料表中所有欄位的值是不可分割的
在正規化之前 設好 Primary key:
在正規化之前
在正規化之前 確定所有欄位的值是不可分割的:
在正規化之前 資料表進行正規化, 必須先將欄位內多出的資料項分割成獨立的記錄:
資料庫的正規化 規則 1 :除去同類型的欄位 規則 2 :非 Primary key 的欄位需與整個 Primary key 有直接相關性
規則 1 : 除去同類型的欄位 規則 1 稱為第一階正規化 (1st Normal Form;1NF) - 其目的在除去同類型的欄位, 亦即同類型的欄位不能重複:
規則 1 : 除去同類型的欄位
規則 2 :非 Primary key 的欄位需與整個 Primary key 有直接相關性 規則 2 稱為第二階正規化 (2nd Normal Form;2NF) - 目的在除去僅與部份 Primary key 相依的欄位。
規則 2 :非 Primary key 的欄位需與整個 Primary key 有直接相關性
規則 3 :非 Primary key 的欄位間不應有從屬關係 規則 3 稱為第三階正規化 (3rd Normal Form;3NF) - 目的在除去所有非 Primary key 的欄位間的相依性。
規則 3 :非 Primary key 的欄位間不應有從屬關係
正規化的另類思考 不必要的分割 人工的分割
不必要的分割 正規化的工作有時不必做得非常徹底, 例如郵遞區號與縣市、區若分割後, 每次查詢都要多一道還原手續, 實無必要:
人工的分割 有時為了增加資料處理的效率, 我們會將已經符合 3NF 的資料表再做分割。