24
資資資資資資資 期期期期期期期期期期期期期 期期期期期期期 期期期 期期期

資料庫系統設計

Embed Size (px)

DESCRIPTION

資料庫系統設計. 期末專題: 圖書館資訊管理系統. 團隊成員 :. 莊子玄 柯菫宏 趙佑宣. 目錄. Introduction Requirement analysis DataBase Design Monitor and turing Tests Discussions Conclusion. Introduction(1/2). 本系統 - 圖書館資訊管理系統 (The Information Management System of Libraries) 主要有下列目標: 提供館藏資訊管理功能 提供借還館藏之處理 簡易上手的介面 - PowerPoint PPT Presentation

Citation preview

Page 1: 資料庫系統設計

資料庫系統設計

期末專題: 圖書館資訊管理系統團隊成員: 莊子玄

柯菫宏趙佑宣

Page 2: 資料庫系統設計

目錄 Introduction Requirement analysis DataBase Design Monitor and turing Tests Discussions Conclusion

Page 3: 資料庫系統設計

Introduction(1/2)

本系統 - 圖書館資訊管理系統(The Information Management System of Libraries)

主要有下列目標: 提供館藏資訊管理功能 提供借還館藏之處理 簡易上手的介面 系統能堪負載並能有快速反應速度

Page 4: 資料庫系統設計

Introduction(2/2)

系統平台需求Apache, PHP, MySQL

開發工具 ( 軟體 ) PHP 5.0 phpMyAdmin 2.9.2 Smarty 2.6.18 Dreamweaver 8.0 TortoiseSVN 1.4.4

Page 5: 資料庫系統設計

Collecting facts(1/3)

有一個規模較小的國小,想為他們的圖書館,增加一個資訊系統。

該系統要能紀錄館藏資料、使用者資料、借還書的動作、逾期還書處理,以達成館藏和借還書的完善管理。

目前該國小一個年級的人數大約 100 個,老師大概 30 幾位

Page 6: 資料庫系統設計

Collecting facts(2/3)

可借閱時間:為期一個月 借閱書本上限:

學生: 4 本 教師: 10 本

圖書之分類方式:

註 :820 為採用賴永祥中國圖書分類的編號

主分類 副分類圖書類 820 中國文學期刊類 旅遊休閒

Page 7: 資料庫系統設計

Collecting facts(3/3)

館藏大約有 10000 本書,每星期增加 15 本書 維護人員有四人,系統管理員有兩位,操作員兩

位 借書逾期遲還有懲罰機制,將減少使用者能借閱

書本的上限,為期六個月,若超過一個月未還,會凍結使用者借書的權利。

Page 8: 資料庫系統設計

System specification(1/2)

Initial database size: 288KB( 空 ) 4.1MB( 館藏 10000 本 )

Database rate of growth: 50KB per day

The type and average number of record searches:

查詢館藏資料 , 50 筆到 100 筆 Networking and shared access requirements:

最大連線數 : 需求約 150, Mysql 的預設值為 2,038 Max threads: 需求約 15, Mysql 的預設值為 20( 能容納

20 個連線同時執行 query)

Page 9: 資料庫系統設計

System specification(2/2)

Performance 讀取頁面的時間不超過 1 秒

Security 啟用 PHP magic_quotes 以避免 SQL injection 限制輸入資料的內容,不得有特殊符號 網頁連線資料庫的帳號,不為 root

Page 10: 資料庫系統設計

ER model

Page 11: 資料庫系統設計

Map ER model to table (1/)

使用者 管理者CREATE TABLE Users ( Uid INT(8) PRIMARY KEY, U_name VARCHAR(50) NOT NULL, U_account VARCHAR(50) NOT NULL, U_password VARCHAR(50) NOT NULL, U_phone VARCHAR(50), U_email VARCHAR(50), U_bound INT(4) NOT NULL, UNIQUE (U_account) )ENGINE = innodb;

CREATE TABLE Administrator ( Aid INT(4) PRIMARY KEY AUTO_INCREMENT, A_account VARCHAR(50) NOT NULL, A_password VARCHAR(50) NOT NULL, A_email VARCHAR(50), A_authority Int(4) NOT NULL, UNIQUE (A_account) )ENGINE = innodb;

Page 12: 資料庫系統設計

Map ER model to table (2/)

主分類 副分類 CREATE TABLE Main_category( M_cate Int(4) Primary Key AUTO_INCREMENT, M_cname VARCHAR(50) NOT NULL, UNIQUE (M_cname) )ENGINE = innodb;

CREATE TABLE Sub_category( S_cate Int(4) Primary Key AUTO_INCREMENT, S_cname VARCHAR(50) NOT NULL, S_mcate Int(4) NOT NULL, Foreign Key(S_mcate) REFERENCES Main_category(M_cate) )ENGINE = innodb;

Page 13: 資料庫系統設計

Map ER model to table (3/)

書架 副分類在哪個書架上CREATE TABLE Bookstock( Bs_id Int(4) Primary Key AUTO_INCREMENT, Bs_putable Boolean NOT NULL )ENGINE = innodb;

CREATE TABLE ScateToBS( S_Scate Int(4) Primary Key , S_Bsid Int(4) NOT NULL, Foreign Key(S_Bsid ) REFERENCES Bookstock(Bs_id) )ENGINE = innodb;

Page 14: 資料庫系統設計

Map ER model to table (4/)

館藏 CREATE TABLE Lib_property ( Lid Int(12) Primary Key AUTO_INCREMENT, L_name VARCHAR(100) NOT NULL, L_ename VARCHAR(100), L_author VARCHAR(100), L_mcate Int(4) NOT NULL, L_scate Int(4) NOT NULL, L_subject VARCHAR(200), L_cover VARCHAR(30), L_isbn VARCHAR(30), L_publisher VARCHAR(30),

L_pdate VARCHAR(30), L_translator VARCHAR(50), L_inlib Boolean NOT NULL, Foreign Key(L_mcate) REFERENCES Main_category(M_cate)ON DELETE NO ACTION ON UPDATE CASCADE , Foreign Key(L_scate) REFERENCES Sub_category(S_cate) ON DELETE NO ACTION ON UPDATE CASCADE )ENGINE = innodb;

Page 15: 資料庫系統設計

Map ER model to table (5/5)

館藏借閱記錄 違規記錄CREATE TABLE Record( Rid Int(8) Primary Key AUTO_INCREMENT, R_uid Int(8) NOT NULL, R_lid Int(12) NOT NULL, R_borrow DATE NOT NULL, R_deadline DATE NOT NULL, R_return DATE , Foreign Key(R_uid) REFERENCES Users(Uid), Foreign Key(R_lid) REFERENCES Lib_property(Lid) )ENGINE = innodb;

CREATE TABLE Illegality( Iid Int(8) Primary Key, I_rid Int(8) NOT NULL, I_due DATE, I_newUbound Int(4), I_validate Boolean, Foreign Key(Iid) REFERENCES Record(Rid) )ENGINE = innodb;

Page 16: 資料庫系統設計

Views

借閱記錄 + 館藏 借閱記錄 + 使用者

CREATE VIEW borrow_lib AS SELECT record.Rid, record.R_uid, record.R_borrow, record.R_deadline, record.R_return, lib_property.Lid, lib_property.L_nameFROM record, lib_property, usersWHERE ((record.R_lid = lib_property.Lid )AND ( record.R_uid = users.Uid ))

CREATE VIEW borrow_info AS SELECT record.Rid, record.R_return, users.Uid, users.U_boundFROM record,users WHERE record.R_uid=users.Uid ;

Page 17: 資料庫系統設計

Choose file organizations and indexes

file organizations: 找不到此設定

可以做 index 的欄位

支持理由 反對理由

A_account 少更新,查詢頻率1~2 per day

管理者人數很少,不做 index 就很快了

S_mcate 少更新,常查詢( 新增館藏時會查 )

U_account 常查詢R_lid 常查詢 新增資料頻率太高R_uid 常查詢 新增資料頻率太高

Page 18: 資料庫系統設計

Security mechanisms(1/2)

備份:

Page 19: 資料庫系統設計

Security mechanisms(2/2)

Page 20: 資料庫系統設計

Performance monitoring

顯示網頁館藏管理的速度 ( 未搜尋 )

顯示搜尋館藏網頁的速度 ( 關鍵字為 e)

館藏數量 頁面顯示時間 ( 秒 )

222 0.014

1222 0.032

5222 0.160

10222 0.277

館藏數量 頁面顯示時間 ( 秒 )

222 0.013

1222 0.061

5222 0.271

10222 0.657

Page 21: 資料庫系統設計

Index tuning and query tuning

欄位名 未設 index 處理時間

設 index 處理時間

index 空間占用

A_account 0.0133 秒 0.0007 秒 32KB

S_mcate 0.0268 秒 0.0016 秒 16K

U_account n/a 0.0007 秒 32K

R_lid n/a 0.0007 秒 16K

R_Uid n/a 0.0011 秒 16K

測試環境 : 館藏 200 筆,借閱記錄 30 筆

註: MySQL 若要設定 foreign key ,必須先將該欄位設 index 所以, foreign key 都會設 index

Page 22: 資料庫系統設計

Experiences

實驗 : 模擬一般使用者一天的使用情形 我們用 3 個人 2 台電腦,連續輸入資料約 3 個

小時 得到的結果 :

總共輸入 212 本書, 30 個借還記錄 資料增加影響網頁速度不大 造成的資料流量為 3880KB , Query 數為 9434

Page 23: 資料庫系統設計

Discussion

使用 MySQL在本系統是否合宜 ?- 與 MSSQL相比

Pro:1. 使用者不須付費 (企業版須付費 )2. 占用較少的系統資源 (佔記憶體 20MB 以下 )3. 管理工具的運作速度較快

Con:1. 免費的管理工具為第三方開發軟體2. 能調校的選項不多3. 在 Windows 下效能降低不少

Page 24: 資料庫系統設計

Conclusions

我們的結論 : 設立合適的 index ,對查詢時間有很大的加速效果。

系統大約在有 20000 筆館藏後,系統速度會不合我們的效能需求

若要減少系統的成本, MySQL足以負荷輕量的資料庫需求

模擬新增館藏的速度一天約 200 本, 10000本需要 50 天,似乎仍不理想。