資料庫系統概論第 十一章 單表格資料庫設計       下一頁

第十 一章 單表格資料庫設計

11-1 範例研討圖書管理系統

內容:

在鄉下許多善心人士在廟宇內建立圖書館,讓當地人士有一個閱讀交誼的地方,但各地捐贈圖書眾多,當村民借用圖書時,產生許多困擾期望建立一套圖書管理系統。

11-1-1 需求分析與資料收集

(A) 需求與系統規格

當圖書很多的情況,我們要找一本書也許變得非常困難,我們希望『圖書管理系統』具有下列功能:

  • 所有圖書皆登錄於該系統內。

  • 可瀏覽圖書館內所有書籍。

  • 可經由作者姓名、出版商或書名,查詢到那些書籍。

  • 圖書可以任意增加或刪除。

  • 每一本書都有固定位置,借書或還書都可以由固定區域存取。

(B) 資料收集

系統分析師到現場收集資料如下:

  • 書籍作者。

  • 書籍出版商。

  • 書名。

  • 放置位置。

  • 書籍分類

11-1-2 資料庫邏輯設計 – Books_db

(A) 系統概況

我們將此資料庫命名為 Books_db,它僅登錄圖書資料,概況如圖 10-1 所示。由此可見只要一個關聯(資料表),即可達成所需。

10-1 圖書管理系統概況

(B) 系統 E-R 關聯圖

此系統僅有一個關聯並命名為 Books,依照系統需求將其設計如下:

10-2 E-R 關聯圖

我們依照系統需求,給予 Books 關聯有六個屬性(書籍編碼、作者、出版商、書名、放置區域與書籍分類)。並選擇『書籍編碼』為主鍵。

11-1-3 轉換資料表與正規化

(A) E-R 圖轉換資料表

我們將書籍的資料表取名為 Books,個欄位(屬性)規劃如下:

  • 書籍編碼:命名 NOint、唯一識別值、auto_increment

  • 作者:命名 author、字串 CHAR(20)

  • 出版商:命名 publisher、字串 CHAR(20)

  • 書名:命名 title、字串 CHAR(50)

  • 放置區域:命名 place、字串 CHAR(20)

  • 書籍分類:命名 classify、字串 CHAR(20)

Books 資料表

書籍編號

 作者

出版商

書名

放置位置

書籍分類

No

author

publisher

title

place

classify

int

CHAR(20)

CHAR(20)

CHAR(20)

CHAR(20)

CHAR(20)

其中,書籍編號(NO)是書籍之間的唯一識別值,吾人將它設定為主鍵(primary key),並由系統自動產生。

(B) 正規化分析

正規化分析:

  • 1NF:所有欄位都是最小單元(Atomic value)符合

  • 2NF:除了主鍵外,所有欄位都與主鍵相依。符合

  • 3NF:除了主鍵外,所有欄位之間都沒有功能性相依。符合

11-1-4 實體建置

我們利用 AppServ – MySQL 資料庫伺服器建立此資料庫系統。首先利用瀏覽器(IE Chrome)URL: http://localhost 進入 phpMySQLAdmin 管理介面(輸入帳戶與密碼),並選擇『資料庫』功能選項。

有兩種建立方法,一者為利用『視窗選單』功能,另一者利用 SQL 命令產生,兩者皆示範操作。

(A) 建立資料庫

吾人將此資料庫定名為:books_db,則下列兩種方法產生,如下:

  • 利用 SQL 命令為:

Create Database Books_db;

  • 利用選單方式:

(B) 建立資料表

吾人將圖書資料表定名為 Books,同樣也有兩種方法產生,如下:(選擇 Books_db 資料庫)

  • 如利用 SQL 命令產生,如下:

Create Table Books (

NO int auto_increment,

author  CHAR(20) NOT NULL,

publisher  CHAR(20) NOT NULL,

title  CHAR(50) NOT NULL,

place  CHAR(20) ,

classify  CHAR(20) ,

primary key (NO)

)

  • 如利用選單操作,如下:

接著,再輸入各個欄位的名稱與屬性,如下:

其中,還要將 NO 欄位設定主鍵(Primary key),以及 auto_increment 屬性。

如果設定完成之後,由 Mysql 介面可以觀察到 Books_db 的結構,如下:

其特性說明如下:

  • Books 資料表共有 6 個欄位,分別是:NOauthorpublishertitleplace classify

  • NO 欄位是主鍵,是系統自動產生的整數,也是個筆資料之間的唯一識別值(不允許有兩筆以上的紀錄,NO 欄位內容相同)

  • NOauthorpublisher title等欄位不允許空值,一定必須填入內容,其他兩欄位允許空值。

11-1-5 匯入測試資料

資料庫與資料表建立完成之後,需產生相關資料來驗證其運作是否能滿足需求。一般我們都會利用 Excel 建立資料後,再將其匯入。

(A) Excel 建立資料並轉換成 CSV

  • 步驟首先開啟 Excel 並輸入相關資料(取名 Books,第一行為欄位名稱),如下圖所示:(可到教學網站下載)

  • 步驟 2輸入完成並儲存後,再另存新檔為 Books_CSV,檔案格式選擇『csv(逗點分隔)』,如下操作:

  • 步驟 3轉換成 UTF8 格式。利用記事本開啟該檔案,再另存新檔成 UTF8 編碼,操作如下:

(B) CSV 檔匯入資料表內

  • 步驟 4 CSV 檔匯入 Books 資料表內。開啟 AppServ 並選擇 Books_db Books 資料表,再由視窗選單中點選『匯入』,如下操作

  • 步驟 5瀏覽資料表(Books)內容,如下:

11-1-6 測試資料庫功能

資料庫建構完成後,我們依照幾個系統需求,來驗證其功能是否滿足,如下:

(A) 驗證 1瀏覽所有書籍

瀏覽目前圖書館內有哪些藏書,SQL 命令如下:

Select * from books;

執行結果:

(B) 驗證 2查詢作者有哪些書

查詢作者粘添壽有哪些書的書名與出版公司,SQL 命令如下:

Select  title, publisher

From books

Where author = “粘添壽”;

執行結果:

(C) 驗證 3:由圖書公司查詢有哪些書

查詢東南圖書公司有那些書,請列印出書名作者名稱,SQL 命令如下:

select title, Author

from books

where publisher = "東南圖書公司";

執行結果:

 

(D) 驗證 4由圖書分類查詢書籍

查詢古書類別中有那些書,請列印出書名作者名稱,SQL 命令如下:

select title, Author

from books

where classify = "古書";

執行結果:

11-1-7 資料庫檔案匯出

完成設計資料庫之後,可以將其匯出並攜帶客戶處展示,或在其他系統上執行,匯出步驟如下:

  • 步驟 1點選 Books_db資料庫後,在視窗選單上選擇『匯出』,如下

  • 步驟 2則匯出檔案為 books_db.sql,如下

到其他電腦上載入方法,如同 course_db.sql 載入方法相同。

11-1-8 資料庫效能分析

雖然 Books_db 資料庫系統僅有一個資料表,應用上比較簡單,但我們也來探討這樣設計有何優缺點。如下:

(1) 查詢關鍵字可能發生不一致的現象,譬如出版公司( publisher)可能輸入東南圖書公司或東南出版社,沒有統一命名可能會造成搜尋不倒資料。

(2) 書籍分類(classify)沒有專屬分類,可能造成混亂。

欲解決上述兩問題,可能須建立其他資料表來輔助,我們在下一章會說明到。

翻轉工作室:粘添壽

 

資料庫系統概論(含邏輯設計)

 

 

翻轉電子書系列: