01 / 導讀
導讀
引用
Hernandez, M. J. (2020). Database Design for Mere Mortals: 25th Anniversary Edition (4th ed.). Addison-Wesley Professional.
章節概要
全書分三部共十六章,另有八個附錄和一份詞彙表,總計約640頁。本書只談關聯式資料庫的邏輯設計:作者把邏輯設計與實體實作和應用程式開發分開,正文中不出現SQL、程式碼,也不涉及任何特定的資料庫產品。第一部(第1–3章)介紹資料庫、設計目標與術語;第二部(第4–13章)講授設計流程;第三部(第14–16章)討論不良設計與例外情況。第1–13章都以摘要作結,幾乎每章都附有複習題;第四版並在第5–13章末尾新增「Example」一節,以實例示範該章的步驟。
第1章:The Relational Database(關聯式資料庫)
說明什麼是資料庫、關聯式資料庫如何儲存與擷取資料、它有哪些優點,以及關聯式資料庫管理系統的角色。第四版刪去已不再重要的內容,並新增「What's Next?」一節,談作者對關聯式資料庫現況與未來的看法。
第2章:Design Objectives(設計目標)
論證設計決定了資料的一致性、完整性與正確性。本章列出良好設計的目標(同時支援預先定義的查詢與臨時查詢、每個資料表只代表一個主題、在欄位、資料表與關聯三個層次落實完整性、支援商業規則、保留日後擴充的空間)及其好處,接著比較傳統方法(需求分析、資料模型化、正規化)與本書自己的方法。本書的方法保留需求分析和一種基本的實體關係圖畫法,但不逐一套用正規形式。
第3章:Terminology(術語)
介紹這套方法所依賴的詞彙,分成與值有關的術語(資料、資訊、空值以及空值帶來的問題)、與結構有關的術語(資料表、欄位、記錄、檢視表、鍵、索引)、與關聯有關的術語(關聯類型、參與類型與參與程度),以及與完整性有關的術語(欄位規格、資料完整性)。
第4章:Conceptual Overview(概念總覽)
在逐步講解之前先勾勒整個流程:使命宣言與目標、分析現有資料庫、建立資料結構、關聯、商業規則、檢視表,最後複查完整性。
第5章:Starting the Process(啟動流程)
說明如何進行訪談(分別給受訪者與訪談者的指引,本版針對線上會議與居家工作加以修訂),以及如何撰寫使命宣言與使命目標,為設計定出方向。
第6章:Analyzing the Current Database(分析現有資料庫)
檢視紙本資料庫與舊有系統的資料庫、目前蒐集資料與呈現資訊的方式、與使用者和管理階層訪談的技巧(目前的、額外的、未來的以及整體的資訊需求),並整理出初步欄位清單與計算欄位清單以供複核。
第7章:Establishing Table Structures(建立資料表結構)
把主題整理成初步資料表清單,再定為最終清單,同時修訂資料表名稱、標明資料表類型並撰寫說明;把欄位分配到各資料表;對照「理想欄位」消除複合欄位與多值欄位;再對照「理想資料表」修整資料表結構,其中包括子集資料表與重複資料的處理。
第8章:Keys(鍵)
講解候選鍵、主鍵、替代鍵與非鍵欄位,如何選定主鍵,以及鍵所提供的資料表層次完整性,最後複查初步的資料表結構。
第9章:Field Specifications(欄位規格)
作者認為許多開發者輕忽欄位規格,本章把它當作欄位層次完整性的來源來處理。欄位規格包含一般要素、實體要素與邏輯要素;本章也說明如何運用唯一、通用與複製三種規格,減少為每個欄位撰寫文件的工作量。
第10章:Table Relationships(資料表關聯)
全書最長的一章。內容涵蓋一對一、一對多、多對多與自我參照關聯,如何辨識並建立每一種關聯,如何修整外部鍵,以及如何設定關聯特性:刪除規則、參與類型與參與程度。
第11章:Business Rules(商業規則)
說明什麼是商業規則及其類型,把規則分為欄位專屬規則與關聯專屬規則,並示範如何與使用者和管理階層一起訂定規則、記錄在規格表上。本章也引入驗證資料表,作為透過資料本身落實規則的手段。
第12章:Views(檢視表)
介紹資料檢視表、彙總檢視表與驗證檢視表,以及如何找出、定義並記錄使用者需要的檢視表。
第13章:Reviewing Data Integrity(複查資料完整性)
重新檢查資料表、欄位與關聯各層次的完整性,以及商業規則和檢視表,並彙整設計的最終文件。
第14–16章:Bad Design—What Not to Do(不良設計:不該做什麼);Bending or Breaking the Rules(變通或打破規則);In Closing(結語)
第14章提醒讀者避開平面檔式設計、試算表式設計,以及受特定產品功能左右的設計。第15章指出可以偏離這套方法的少數情況,也就是分析型資料庫與處理效能,並要求每一次偏離都要留下紀錄。第16章是簡短的結語。
附錄
收錄複習題解答、整個設計流程的圖解、設計指引彙整、空白文件表單(欄位規格、商業規則規格與檢視表規格)、圖示符號、設計範例、說明如何把正規化融入本方法的討論(「On Normalization」),以及推薦書目。
核心概念
第1–3章:基礎
- 邏輯設計:在任何實作之前先決定資料表、欄位、鍵、關聯與完整性;這是本書唯一處理的階段。
- 參與類型與參與程度:一筆記錄是否必須參與某個關聯,以及它最多可以對應多少筆相關記錄。
第4–13章:設計流程
- 使命宣言與使命目標:簡短說明資料庫的用途及它必須支援的工作,用來引導後續所有設計。
- 複合欄位與多值欄位:容納多項資料或多個值的欄位,本方法把它們拆解成獨立的欄位或資料表。
- 主鍵、候選鍵與替代鍵:能唯一識別記錄的欄位,是資料表層次完整性的基礎。
- 欄位規格:以文件記錄欄位的一般、實體與邏輯屬性,用以確保欄位層次完整性。
- 刪除規則:關聯中一方的記錄被刪除時,相關記錄該如何處理。
- 商業規則與驗證資料表:源自組織運作方式的限制,有時以一張列出允許值的資料表來落實。
- 完整性的層次:資料表、欄位與關聯三個層次的完整性再加上商業規則,在流程最後一併複查。
第14–15章:其他問題
- 平面檔設計與試算表設計:常見的配置方式,本書視之為重複與不一致資料的根源。
- 有紀錄的規則變通:只有在分析或效能等理由下才偏離本方法,並寫明原因。
評析
優點
- 從訪談到文件的一整套方法。 第二部依序走完同一個流程,從使命宣言一路到最後的完整性複查,反覆使用的表單集中收在附錄。作者正因如此建議按順序讀完全書。
- 不需預備知識,也不依賴特定產品。 導論明言不需要任何資料庫設計背景;正文避開SQL、程式語言與特定資料庫系統的功能,因此日後不論使用哪一套系統,都能沿用這套方法。
- 需求蒐集講得充分。 第5章與第6章用了八十多頁討論訪談、使命目標,以及現有紙本系統與舊有系統的分析,而許多資料庫教科書對這個階段只是輕輕帶過。
- 適合自學。 附錄A附有解答的複習題、流程圖、設計指引清單,以及第5–13章末尾新增的實例,都方便讀者獨自學習。
局限
- 正規化被放在正文之外。 本方法不教正規形式,而是把正規化的效果融入各個步驟;正規形式只在第2章簡短出現,並在一個附錄中討論。若課程要考函數相依與正規形式,學生需要另找教科書學習這部分。
- 只談邏輯設計。 導論把實體實作與應用程式開發排除在外,因此書中沒有SQL、查詢處理,也不涉及交易與儲存。
- 刻意簡化的例子。 作者事先聲明,為了示範某項技巧,有些例子刻意簡化、不完整,甚至故意寫錯;正如書中建議,讀者應該專注於技巧本身,而不是例子。
在課程中的定位
在資料庫這門課的書單中,本書是最容易入門的一本,也是唯一專門討論設計的一本。Coronel 與 Morris 的 Database Systems: Design, Implementation, and Management 是涵蓋面很廣的入門教科書,也講SQL與組織中的資料管理;可以先讀本書再讀它,或與它的資料模型化章節同步閱讀,以更慢、更貼近實務的方式走一遍設計流程。Silberschatz、Korth 與 Sudarshan 的 Database System Concepts 以及 Elmasri 與 Navathe 的 Fundamentals of Database Systems 是更完整的資訊科學教科書,以形式化方式講授正規形式、查詢處理與交易;本書能為這類課程的設計部分提供直覺與練習,但無法取代它們。
Ramakrishnan 與 Gehrke 的 Database Management Systems 以及 Gray 與 Reuter 的 Transaction Processing 討論資料庫系統的內部運作,這正是本書刻意不碰的領域。宜在熟悉關聯式設計與SQL之後再讀。
如何使用本書
導論設想的讀者包括:初次接觸資料庫工作的人、用過資料庫軟體而現在需要自行建立資料庫的人,以及一直沒有方法、憑經驗建立資料庫的程式設計師。本書不要求數學、程式設計或SQL基礎。
- 核心: 第2–3章學習目標與術語,第4章掌握流程全貌,接著是承載大部分設計內容的第7–10章(資料表、鍵、欄位規格、關聯)。
- 需求工作: 第5–6章對要為真實組織設計系統的讀者最重要;偏重理論的課程的學生可以略讀。
- 完整性與規則: 第11–13章讓整套方法完整;若課程重視限制條件,請仔細讀第11章。
- 選讀: 已經知道關聯式資料庫是什麼的讀者可略過第1章;第14–16章篇幅短,很快就能讀完。
建議自選一個小題目,例如社團、商店或選課系統,依照所有步驟做一次設計,並填寫附錄D的表單。每章的複習題先自己作答,再對照附錄A。接著把附錄G與課程教科書中講正規化的章節對照閱讀,看看本方法的各個步驟如何對應各級正規形式;最後在任一套關聯式資料庫系統中實作完成的設計,藉此學會本書沒有涵蓋的SQL。
