Skip to content
Read this post in: de_DEen_USes_ESfr_FRid_IDjapl_PLpt_PTru_RUvizh_TW
Home » Data Modeling / Database » 設計圖書館系統:從實體關係圖到正規化再到資料庫結構

設計圖書館系統:從實體關係圖到正規化再到資料庫結構

介紹

設計一個穩健且高效的資料庫系統,是開發圖書館管理系統的關鍵步驟。此過程包含多個階段,從實體關係圖(ERD)設計開始,接著進行正規化,最後建立資料庫結構。在本文中,我們將逐一說明這些階段,展示如何將一個概念轉化為結構良好且優化的圖書館系統資料庫。

從ERD、正規化到資料庫結構的資料模型設計流程

  1. 實體關係圖(ERD)

設計圖書館系統資料庫的第一步是建立實體關係圖(ERD)。ERD是系統中資料實體及其關係的視覺化呈現。以下是需要考慮的一些關鍵組成部分:

a. 實體:識別圖書館系統中的主要實體。這些可能包括書籍、作者、讀者、員工以及交易。

b. 屬性:為每個實體定義屬性或特徵。例如,「書籍」實體可能具有ISBN、標題、作者、出版日期等屬性。

c. 關係:確定實體之間的關係。例如,「讀者」實體可能與「書籍」實體具有「借閱」關係,以表示書籍的借閱行為。

d. 基數:指定關係的基數,表明一個實體與另一個實體之間關聯的實例數量。例如,一位讀者可以借閱多本書,但每本書在同一時間只能由一位讀者借閱。

  1. 正規化

正規化是將資料庫中的資料進行組織,以消除冗餘並提升資料完整性。目標是減少資料重複,並確保每筆資訊都儲存在最合適的位置。以下是正規化圖書館系統資料庫所涉及的步驟:

a. 識別函數依賴性:分析實體中的屬性,並判斷哪些屬性依賴於其他屬性。例如,在「書籍」實體中,作者姓名依賴於書籍的ISBN。

b. 應用正規化規則:使用正規化規則(例如第一正規化、第二正規化、第三正規化)將複雜的實體拆解為較簡單的實體,並為相關資訊建立獨立的資料表。

c. 建立關係:使用主鍵和外鍵在正規化後的資料表之間建立關係,以維持資料完整性。

d. 消除冗餘:確保每筆資料僅儲存在一個位置。例如,作者資訊應儲存在獨立的「作者」資料表中,而非在每筆書籍記錄中重複儲存。

  1. 資料庫結構

當您的資料庫完全正規化後,即可進行資料庫結構的建立。結構定義了資料庫的架構,包括資料表、欄位、資料類型和約束。以下是建立圖書館系統資料庫結構的步驟:

a. 定義資料表:根據ERD中識別出的實體以及正規化後的資料建立資料表。每個資料表應代表一個特定實體(例如「書籍」、「作者」、「讀者」)。

b. 定義欄位:為每個資料表指定欄位,以代表ERD中識別出的屬性。確保資料類型和約束(例如主鍵、外鍵、唯一性約束)正確設定。

c. 建立關係:使用外鍵在資料表之間建立關係,連結相關資料。例如,「書籍」資料表可能包含一個指向「作者」資料表的外鍵。

d. 索引:在經常用於搜尋的欄位上建立索引,以提升查詢效能。

案例研究:圖書館系統

實體關係圖

我們已定義四個資料表:作者、書籍、讀者與交易。以下是各資料表所代表的內容:

  1. 作者:儲存書籍作者的資訊。其主鍵為AuthorID,並包含Name屬性。
  2. 書籍:代表書籍的詳細資訊。包含ISBN(主鍵)、標題、出版日期,以及一個外鍵AuthorID,用以參考作者資料表,建立書籍與作者之間的關係。
  3. 讀者:儲存圖書館讀者的資訊。其主鍵為PatronID,並包含Name屬性。
  4. 交易:此資料表記錄讀者借閱書籍的交易資訊。包含TransactionID(主鍵)、BookID(外鍵,指向書籍資料表)、PatronID(外鍵,指向讀者資料表)以及DueDate。

這些資料表之間的關係如下所示:

  • 作者和書籍之間通過一對多的關係相連,表示一位作者可以撰寫多本著作。
  • 書籍與交易之間相連,表示每本書可以出現在多筆交易中,但每筆交易僅對應一本書。
  • 借閱者與交易相連,表示每位借閱者可以有多筆交易,但每筆交易僅屬於一位借閱者。

規範化流程

我們來走一遍使用表格對圖書館系統資料庫進行規範化的流程。我們將從一組初始表格開始,逐步將它們規範化至第一正規化形式(1NF)、第二正規化形式(2NF)和第三正規化形式(3NF)。

初始表格:

  1. 書籍
    • ISBN(主鍵)
    • 書名
    • 出版日期
    • 作者編號(外鍵)
  2. 作者
    • 作者編號(主鍵)
    • 姓名
  3. 借閱者
    • 借閱者編號(主鍵)
    • 姓名
  4. 交易
    • 交易編號(主鍵)
    • 書籍編號(外鍵)
    • 借閱者編號(外鍵)
    • 到期日

第一正規化形式(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)出發,進行資料規範化,再建立結構良好的資料庫結構,可以確保資料完整性,減少重複資料,並優化資料庫效能。這種結構化的方法為可靠且高效的圖書館系統奠定基礎,使其能有效管理書籍、作者、讀者及交易。

發佈留言