12-2 範例研討 – 圖書館管理系統
12-2-1 需求分析與資料收集 起初萬聖宮圖書室建立時,收藏圖書還不是很多,村民借書/還書都還不是很困難。但經過幾年之後,圖書室功能漸漸顯著,村民閱讀風氣業逐漸打開,除了各地捐輸之外,萬聖宮也採購許多書籍以供村民閱讀。如此一來,圖書室亦發展成規模不小的圖書館。萬聖宮總幹事有感於此,原來圖書管理系統已不符所需,期望建立一套較完整的圖書館管理系統,期望功能如下:
另外,總幹事也希望系統能登錄下列相關資料:
圖書館也準備了借書卡,以供村民申請借書、還書之依據。 12-2-2 資料庫邏輯設計 此系統有比較複雜一點,我們由外往內拆解方法,來分析此系統的邏輯架構。 (A) 第一層分析:系統需求 吾人可以發現,此管理系統提供圖書登錄與村民閱讀的功能,如下圖所示。
圖 11-6 圖書館管理系統概況 (B) 第二層分析:圖書分類 首先,我們先拆解圖書出版狀況,每一本書大多由某一家出版社發行,分析如下:
(C) 第三層分析:村民借用圖書閱讀 村民借用圖書閱讀之關聯。我們假設一位村民可以借用多本圖書,則村民與圖書總表之間的關係是一對多的關係。另外,一家出版商也可能發行多本圖書,之間也是一對多的關係。每位村民也可以多次借書,村民與借書紀錄之間也是一對多的關係。如下分析:
(D) 填入各實體的屬性 接著我們依照系統所需的資料填入各個實體上,如下圖:
(E) 選定各實體的主鍵 對各實體的主鍵選定步驟如下:
(F) 建立外來鍵連結 – 完整系統 E-R 關聯圖
完成後結果,如下圖所示:
圖 11-11 E-R 關聯圖 12-2-3 E-R 圖轉換資料表 (A) 圖書總表關聯 下圖為圖書總表的關聯(Relation),它包含了 6 個屬性(Attribute),我們找出圖書編碼可以當作每一筆紀錄的唯一識別碼,並將它指定為主鍵(Primary key)。
圖 11-12 圖書總表關聯 並且將此關聯定名為 Books 資料表,各屬性之欄規劃如下:
其中,備註欄位記錄書籍來源(採購、捐贈)或其他訊息。價格該本書購買金額或捐贈人認為價值多少錢。 正規化分析:
(B) 出版商關聯 出版商關聯(Relation)包含了 5 個屬性(Attribute),我們找出版商編碼可以當作每一筆紀錄的唯一識別碼,並將它指定為主鍵(Primary key)。
圖 11-13 出版商關聯 並且將此關聯定名為 Publishers 資料表,各屬性之欄規劃如下:
其中,書籍來源有採購與捐贈兩種可能。價格該本書購買金額或捐贈人認為價值多少錢。 正規化分析:
(C) 村民關聯 村民關聯(Relation)包含了 5 個屬性(Attribute),很容易地可以看出,選用身分證字號當為主鍵(Primary key)。
圖 11-14 村民關聯 並且將此關聯定名為 Guests 資料表,各屬性之欄規劃如下:
其中,書籍來源有採購與捐贈兩種可能。價格該本書購買金額或捐贈人認為價值多少錢。
(C) 借書紀錄關聯 借書紀錄關聯(Relation)包含了 3 個屬性(Attribute)。系統允許每位村民同時可以借用多本書籍,因此不能只用身分證字號當主鍵,必須 {身分證字號, 書籍編碼}兩欄位當為主鍵(Primary key)。
圖 11-15 借書紀錄關聯 並且將此關聯定名為 Records 資料表,各屬性之欄規劃如下:
12-2-4 資料庫關聯圖 設計完成各個資料表之後,再依照 E-R 關聯圖繪出資料庫內所有資料表之間的關聯圖,如下:
圖 11-16 資料庫關聯圖 12-2-5 實體建置 我們將此資料庫定名為『temple_library』,並利用 AppServ – MySQL 建立,步驟如下:(備註:僅介紹用 SQL 命令產生,選單方式建立請自行參考) (A) 建立資料庫 吾人將此資料庫定名為:temple_library,則下列兩種方法產生,如下:
(B) 建立 Books 資料表 建立 Books 命令如下如下:(選擇 temple_library 資料庫)
如果設定完成之後,可觀察 Books 資料表的結構如下:
其特性說明如下:
(B) 建立 Publishers 資料表 建立 publishers 命令如下如下:(選擇 temple_library 資料庫)
如果設定完成之後,可觀察 Publishers 資料表結構,如下:
其特性說明如下:
(C) 建立 Guests 資料表 建立 Guests 命令如下如下:(選擇 temple_library 資料庫)
如果設定完成之後,可觀察 Guests 資料表結構,如下:
其特性說明如下:
(D) 建立 Records 資料表 建立 Records 命令如下如下:(選擇 temple_library 資料庫)
如果設定完成之後,可觀察 Records 資料表結構如下:
其特性說明如下:
(D) 觀察 Temple_Library 資料庫結構 建立完成四個資料表之後,可以觀察 Temple_library 資料庫的結構如何,如下:
(E) 建立資料表之間關連 我們依照圖 11-8 資料庫關聯圖內,可以觀察到各個資料表之間的關聯,如下:
建立外來鍵命令如下:
執行成功後,點選 AppServ 的『設計』選單,可以觀察到 Temple_Library 資料內各個資料表之間的關聯,如下:
12-2-6 建立測試資料 資料庫與資料表建立完成之後,需產生相關資料來驗證其運作是否能滿足需求。建立測試資料的步驟如下:
(A) 建立 Books 資料並匯出 CSV 檔 首先開啟 Excel 並輸入相關資料(取名 Books,第一行為欄位名稱),如下圖所示:(可到教學網站下載)
轉換成 CSV 格式如下:
(B) 建立 Publishers 資料並匯出 CSV 檔 利用 Excel 建立 Publishers 檔案內容如下:
轉換成 CSV 檔內容如下:
(C) 建立 Guests 資料並匯出 CSV 檔 利用 Excel 建立 Guests 檔案內容如下:
轉換成 CSV 檔內容如下:
(D) 建立 Records 資料並匯出 CSV 檔 利用 Excel 建立 Records 檔案如下:
轉換成 CSV 檔內容如下:
12-2-7 匯入測試資料 匯入資料時必須考慮到資料表的外來鍵是否存在,不然會產生錯誤。由圖 11-8 Temple_library 資料庫關聯看出來,匯入資料的順序是『Publishers -> Books -> Guests -> Records』。 (A) 匯入 Publishers 的 CSV 檔 由 Temple_Library 資料庫選擇 Publishers 資料表並匯入 Publishers CSV 檔,結果如下:
(B) 匯入 Books 的 CSV 檔 由 Temple_Library 資料庫選擇 Books 資料表並匯入 Books CSV 檔,結果如下:
(C) 匯入 Guests 的 CSV 檔 由 Temple_Library 資料庫選擇 Guests 資料表並匯入 Guests CSV 檔,結果如下:
(D) 匯入 Records 的 CSV 檔 由 Temple_Library 資料庫選擇 Records 資料表並匯入 Records CSV 檔,結果如下:
12-2-8 測試資料庫功能 資料庫建構完成後,我們依照幾個系統需求,來驗證其功能是否滿足。(但還需要參考該資料庫的 E-R 關係圖)
(A) 驗證 1:查詢某位作者有哪些藏書 查詢圖書館有收藏作者粘添壽那些書籍,請書籍名稱、出版社與價格,SQL 命令如下:
執行結果:
(B) 驗證 2:查詢村民借用那些書,以及借書日期 查詢郭大偉先生借了那些書籍,以及借用日期,SQL 命令如下:
執行結果:
(C) 驗證 3:由圖書公司查詢有哪些書 查詢圖書館有那些翻轉工作室出版的書籍,請列印出書名、作者與價格,SQL 命令如下:
執行結果:
(D) 驗證 4:查詢書本出借狀況 查詢『資料庫程式設計』這本書出借的情況,如已出借請列印出借書人與日期。
執行結果:
(D) 驗證 5:更新 Records 資料表 測試當村民編號 Guest_ID = A013 借用書籍編號 Book_ID = 12 時,更新 Records 資料表,SQL 命令如下:
接著查詢 Records 資料表是否有增列此筆資料,SQL 命令如下:
執行結果:
|
翻轉工作室:粘添壽
資料庫系統概論(含邏輯設計)
翻轉電子書系列:
|