介紹
設計一個穩健且高效的資料庫系統,是開發圖書館管理系統的關鍵步驟。此過程包含多個階段,從實體關係圖(ERD)設計開始,接著進行正規化,最後建立資料庫結構。在本文中,我們將逐一說明這些階段,展示如何將一個概念轉化為結構良好且優化的圖書館系統資料庫。
從ERD、正規化到資料庫結構的資料模型設計流程
- 實體關係圖(ERD)
設計圖書館系統資料庫的第一步是建立實體關係圖(ERD)。ERD是系統中資料實體及其關係的視覺化呈現。以下是需要考慮的一些關鍵組成部分:
a. 實體:識別圖書館系統中的主要實體。這些可能包括書籍、作者、讀者、員工以及交易。
b. 屬性:為每個實體定義屬性或特徵。例如,「書籍」實體可能具有ISBN、標題、作者、出版日期等屬性。
c. 關係:確定實體之間的關係。例如,「讀者」實體可能與「書籍」實體具有「借閱」關係,以表示書籍的借閱行為。
d. 基數:指定關係的基數,表明一個實體與另一個實體之間關聯的實例數量。例如,一位讀者可以借閱多本書,但每本書在同一時間只能由一位讀者借閱。
- 正規化
正規化是將資料庫中的資料進行組織,以消除冗餘並提升資料完整性。目標是減少資料重複,並確保每筆資訊都儲存在最合適的位置。以下是正規化圖書館系統資料庫所涉及的步驟:
a. 識別函數依賴性:分析實體中的屬性,並判斷哪些屬性依賴於其他屬性。例如,在「書籍」實體中,作者姓名依賴於書籍的ISBN。
b. 應用正規化規則:使用正規化規則(例如第一正規化、第二正規化、第三正規化)將複雜的實體拆解為較簡單的實體,並為相關資訊建立獨立的資料表。
c. 建立關係:使用主鍵和外鍵在正規化後的資料表之間建立關係,以維持資料完整性。
d. 消除冗餘:確保每筆資料僅儲存在一個位置。例如,作者資訊應儲存在獨立的「作者」資料表中,而非在每筆書籍記錄中重複儲存。
- 資料庫結構
當您的資料庫完全正規化後,即可進行資料庫結構的建立。結構定義了資料庫的架構,包括資料表、欄位、資料類型和約束。以下是建立圖書館系統資料庫結構的步驟:
a. 定義資料表:根據ERD中識別出的實體以及正規化後的資料建立資料表。每個資料表應代表一個特定實體(例如「書籍」、「作者」、「讀者」)。
b. 定義欄位:為每個資料表指定欄位,以代表ERD中識別出的屬性。確保資料類型和約束(例如主鍵、外鍵、唯一性約束)正確設定。
c. 建立關係:使用外鍵在資料表之間建立關係,連結相關資料。例如,「書籍」資料表可能包含一個指向「作者」資料表的外鍵。
d. 索引:在經常用於搜尋的欄位上建立索引,以提升查詢效能。
案例研究:圖書館系統
實體關係圖
我們已定義四個資料表:作者、書籍、讀者與交易。以下是各資料表所代表的內容:
- 作者:儲存書籍作者的資訊。其主鍵為AuthorID,並包含Name屬性。
- 書籍:代表書籍的詳細資訊。包含ISBN(主鍵)、標題、出版日期,以及一個外鍵AuthorID,用以參考作者資料表,建立書籍與作者之間的關係。
- 讀者:儲存圖書館讀者的資訊。其主鍵為PatronID,並包含Name屬性。
- 交易:此資料表記錄讀者借閱書籍的交易資訊。包含TransactionID(主鍵)、BookID(外鍵,指向書籍資料表)、PatronID(外鍵,指向讀者資料表)以及DueDate。
這些資料表之間的關係如下所示:
- 作者和書籍之間通過一對多的關係相連,表示一位作者可以撰寫多本著作。
- 書籍與交易之間相連,表示每本書可以出現在多筆交易中,但每筆交易僅對應一本書。
- 借閱者與交易相連,表示每位借閱者可以有多筆交易,但每筆交易僅屬於一位借閱者。
規範化流程
我們來走一遍使用表格對圖書館系統資料庫進行規範化的流程。我們將從一組初始表格開始,逐步將它們規範化至第一正規化形式(1NF)、第二正規化形式(2NF)和第三正規化形式(3NF)。
初始表格:
- 書籍
- ISBN(主鍵)
- 書名
- 出版日期
- 作者編號(外鍵)
- 作者
- 作者編號(主鍵)
- 姓名
- 借閱者
- 借閱者編號(主鍵)
- 姓名
- 交易
- 交易編號(主鍵)
- 書籍編號(外鍵)
- 借閱者編號(外鍵)
- 到期日
第一正規化形式(1NF):
在第一正規化形式中,每個表格都應具有主鍵,且任何欄位中都不應有重複群組或陣列。我們的初始表格已符合1NF,因為它們具有主鍵,且每個單元格僅包含單一值。
第二正規化形式(2NF):
要達到2NF,我們必須確保非鍵屬性依賴於整個主鍵。在我們的初始表格中,書籍表格存在部分依賴,因為書名和出版日期僅依賴於ISBN,而非整個主鍵。我們將把書籍表格拆分為兩個表格:
書籍(2NF):
- ISBN(主鍵)
- 作者編號(外鍵)
書籍詳情(2NF):
- ISBN(外鍵)
- 書名
- 出版日期
現在,每個表格的屬性都依賴於整個主鍵。
第三範式(3NF):
在3NF中,我們消除傳遞依賴。借閱者表格沒有傳遞依賴,但交易表格透過BookID對書籍存在傳遞依賴。為了消除此依賴,我們將為交易建立一個新表格:
交易(3NF):
- 交易編號(主鍵)
- 借閱者編號(外鍵)
- 應還日期
借閱書籍(3NF):
- 交易編號(外鍵)
- 書籍編號(外鍵)
現在,交易表格僅依賴於借閱者編號,而借閱書籍表格則管理交易與書籍之間的關係。
我們在3NF下的規範化表格如下:
書籍(3NF):
- ISBN(主鍵)
- 作者編號(外鍵)
書籍詳情(3NF):
- ISBN(外鍵)
- 書名
- 出版日期
作者(3NF):
- 作者編號(主鍵)
- 姓名
借閱者(3NF):
- 借閱者編號(主鍵)
- 姓名
交易(3NF):
- 交易編號(主鍵)
- 讀者編號 (外鍵)
- 到期日
借閱書籍 (第三正規化):
- 交易編號 (外鍵)
- 書籍編號 (外鍵)
透過遵循將資料庫規範化至第三正規化過程,我們提升了資料完整性,減少冗餘,並消除了不希望的依賴關係,進而建立了一個結構良好且規範化的圖書館系統資料庫。
資料庫結構
— 作者資料表
建立資料表 Authors (
AuthorID INT 主鍵,
Name VARCHAR(255)
);
— 書籍資料表
建立資料表 Books (
ISBN VARCHAR(13) 主鍵,
AuthorID INT,
外鍵 (AuthorID) 參照 Authors(AuthorID)
);
— 書籍詳情資料表
建立資料表 BookDetails (
ISBN VARCHAR(13),
書名 VARCHAR(255),
出版日期 DATE,
外鍵 (ISBN) 參照 Books(ISBN)
);
— 讀者資料表
建立資料表 Patrons (
PatronID INT 主鍵,
Name VARCHAR(255)
);
— 交易表
建立資料表 Transactions (
TransactionID INT 主鍵,
PatronID INT,
DueDate DATE,
外鍵 (PatronID) 參考 Patrons(PatronID)
);
— 借閱書籍表(用於表示交易與書籍之間的多對多關係)
建立資料表 BorrowedBooks (
TransactionID INT,
ISBN VARCHAR(13),
外鍵 (TransactionID) 參考 Transactions(TransactionID),
外鍵 (ISBN) 參考 Books(ISBN)
);
結論
設計圖書館管理系統的資料庫是一項複雜但不可或缺的任務。透過從實體關係圖(ERD)出發,進行資料規範化,再建立結構良好的資料庫結構,可以確保資料完整性,減少重複資料,並優化資料庫效能。這種結構化的方法為可靠且高效的圖書館系統奠定基礎,使其能有效管理書籍、作者、讀者及交易。










