資料庫初體驗(I)

圖文卅黃國倫

資料管理的好幫手:資料庫
什麼是資料庫?
什麼是關聯式資料庫?
關聯式資料庫可以幫我們解決什麼問題?

  資料庫(Database)廣義來說,為一個具有相關隱含意義的資料集合,通常為了特殊目的而建置,因此會有預定的使用族群,而資料庫可大可小、可簡單亦可複雜。舉例來說,一個班級的通訊錄,可能僅僅只有數十筆紀錄,每筆只記錄簡單姓名、電話、住址等文字結構;而以數位典藏聯合目錄而言,則涵蓋了上百萬筆數位典藏資訊,數位格式包含文字、聲音與影像,資料關係更是錯綜複雜。無論資料量如何,皆可歸納為資料管理的一種,必須能針對資料進行組織、分類與儲存,並盡量滿足使用者檢索、統計分析、維護等等需求。

  一般對於資料量需求不大、關係簡單之資料,是可以採用Word、Excel等文件格式記錄,這也算是廣義資料庫的一種;但若資料彼此間關係稍微複雜,就會有不少維護困難與著錄限制。以人名權威資料庫為例,若以Excel記錄姓名與參考書目關係可以簡單表示如下:

以此表格資料為例,可以整理出欄位彼此關係如下︰

  其中『姓名』與『參考書目』為多對一關係,如『文徵明』與『王錫爵』同時參考自『明人傳記資料』;『參考書目』與『編著者』也為多對一關係,如『中國歷代人名大辭典』與『中國歷代一百名人傳』皆為『沈起煒』所撰寫。乍看之下很合理,但實際著錄時卻有可能會發生一些問題,如『姓名』與『參考書目』也有可能是一對多關係,如『文徵明』有可能同時參考自『明人傳記資料』與『中國歷代人名大辭典』,在關係圖中可以很簡單加入參考關係,而在表格之著錄也很直覺就會將『參考書目』改成如下,但問題來了,『編著者』要如何著錄,才能清楚區分此『編著者』屬於哪個『參考書目』呢?


  在資料維護上,同樣也會有一些困難,如發現資料著錄錯誤,要將所有『明人傳記資料』改為『明人傳記資料索引』,將所有『中國歷代人名大辭典』的『編著者』由『沈起煒』改為『張撝之、沈起煒、劉德重』,若要修改筆數有成千甚至上萬筆時,那實在也只能說是一件苦差事了。



  所以有發現真正問題所在嗎?其實癥結點就在於『姓名與書目彼此間關係可能會有一對一、一對多、多對一、多對多的關係存在,若單純使用Excel這類電子文件著錄,試圖只用一個表格去表達姓名與書目,在很多情況下是無法適當呈現出資料彼此間之關係的』。所以應該重新考慮表一,將其拆成如下之表四、表五兩個表格,再加上表六去記錄姓名與書目之間的關係。



表七 PEOPLE_BOOK 關係示意圖

  如同之前需求,若『文徵明』同時參考自『明人傳記資料』與『中國歷代人名大辭典』時,該如何修改呢?沒錯,只要將表六新增一列關係即可。

  同樣的,若要將所有『明人傳記資料』改為『明人傳記資料索引』,將所有『中國歷代人名大辭典』的『編著者』由『沈起煒』改為『張撝之、沈起煒、劉德重』,那又該如何修改呢?沒錯,此時不管人名有多少筆,那也只要修改表五即可。

  至此,其實已說明了一些關聯式資料庫的概念。以上面範例來說,所有人名與書目資料均記錄於二維表格中,也記錄了人名與書目表格間的關聯性,而將表一拆成表四、表五、表六的過程,亦即所謂正規化(Normalization),而正規化可解決像用Word、Excel等單一表格著錄時常發生之困擾。

  一般常見之關聯式資料庫尚包含資料庫管理系統(Database Management System,簡稱DBMS),用來管理資料庫,為使用者與資料庫間之軟體介面,可提供多人操控資料庫,也提供了一些功能以方便使用者管理資料庫,這也是Word、Excel所無法提供與差異所在,例如︰

資料查詢︰解析使用者輸入之查詢需求,處理並回傳結果。
資料管理︰管理資料庫中各式系統組態檔、表格、索引…等等各式資料。
資料檢查︰檢查資料被使用者異動時,資料一致性問題,如空值、資料重複、超出有效範圍…等等最初建立表格之預設限制。
權限控管︰控管使用者權限,維護資料安全。
併行控制︰在多人使用之資料庫中,有些交易(Transaction)過程是無法分割的,必須進行控制,如銀行轉帳之扣款與存款動作需一併完成。
回復控制︰資料庫發生無法預期之錯誤時,必須能回復上次交易狀態。

  而下達給DBMS的語法,稱為結構化查詢語言(Structure Query Language,簡稱SQL),可藉由該語言描述使用者的查詢需求,進而透過DBMS從資料庫中取出滿足條件的資料。目前SQL結構化查詢語言已成為使用關聯式資料庫的標準語言,由美國國家標準學會(ANSI)與國際標準組織(ISO)採用為國際標準,美國國家標準學會於1992年推出的SQL92是目前資料庫廠商主要支援的標準。

  在資料庫檢索方面,SQL利用『Select-From-Where』的方式查詢表格資料,此方式可描述使用者想要從哪些表格中(From)找尋符合特定條件的資料(Where),並在結果表格中選出想要看的欄位(Select)。以表五 BOOK為例,若想查詢書名『明人傳記資料』(BOOK_NAME)的編著者(BOOK_AUTHOR),其SQL語法可表達為︰
Select BOOK_AUTHOR
From BOOK
Where BOOK.BOOK_NAME = `明人傳記資料`

  此外,SQL依照用途可簡單區分為三大類:資料定義語言(Data Definition Language,簡稱DDL)、資料操作語言(Data Manipulation Language,簡稱DML)及資料控制語言(Data Control Language,簡稱DCL)。資料定義語言可以用來定義資料庫的資料結構,就像資料表名稱、欄位名稱,以及各欄位屬性等等;資料操作語言則是用來進行資料操作,例如:資料庫中新增、刪除、更新與查詢資料的操作功能;而資料控制語言可以針對資料庫內部進行交易處理及系統效能維護。因此只要學會這三大類的SQL語言,幾乎就可以應付各種資料庫管理工作。但礙於篇幅關係,本章節並不詳細介紹SQL用法,有興趣者可參考SQL相關書籍。

2008-03-06