第 15 章 資料庫系統
學習目標 看完本章, 您應該學會以下主題: 認識何謂資料庫系統 資料庫系統的組成 資料庫的種類 資料庫系統的處理架構
15-1 資料庫系統簡介 資料庫系統 (Database System) 是電腦化的資料儲存系統, 使用者透過各種應用程式來存取其中的資料。而我們常聽到的資料庫 (Database) 及資料庫管理系統 (DBMS, DataBase Management System) 其實只是資料庫系統的一部分。
15-1-1 資料庫系統的組成 資料庫系統的範圍相當廣泛, 大致包含四部份:資料 (Data)、硬體(Hardware)、軟體 (Software) 和使用者 (User), 以下分別論述。
15-1-1 資料庫系統的組成
資料 資料庫系統中最重要的就是資料 (Data), 使用者必須將要存放的資料, 經過整理後, 再存到資料庫 (Database) 中, 供爾後查閱或處理之用。資料庫就是儲存資料的地方, 它們就好像是各種容器, 用來存放不同的資料。 大部分的資料庫系統, 都可包含多個資料庫, 以供存放不同的資料。
硬體 資料庫系統的硬體包括了資料的儲存設備, 例如硬碟、光碟...等等;以及用來執行資料庫系統軟體的設備, 如電腦、智慧手機等。
硬體
軟體 資料庫系統中所說的軟體, 就是資料庫與使用者之間的橋樑, 包含了資料庫管理系統及應用程式, 以及開發應用程式所需的工具:
軟體 資料庫管理系統:我們可將資料庫管理系統 (DBMS, Database Management System) 視為資料庫的管理員。透過資料庫管理系統提供的管理、資料編輯及增刪等各項功能, 即可輕鬆地將資料存放在資料庫中, 也能更方便地查詢及使用資料。 目前常聽到的 SQL Server 、Oracle 、MySQL 等軟體, 都屬於資料庫管理系統。本章稍後, 我們會再詳細介紹資料庫管理系統應具備的基本功能。
軟體
軟體 應用程式:是指自行開發的使用者介面, 因為並非每個使用者都會透過 DBMS 複雜的管理介面來使用資料庫, 所以必須藉由另外設計的程式, 來提供較簡單且人性化的操作介面, 例如我們利用 Visual Basic 開發的人事管理系統、進銷存管理系統... 等。 這些應用程式都必須透過資料庫管理系統才能存取及管理資料庫內的資料。
軟體 開發工具:也就是開發應用程式所需的工具, 在第 13 章介紹過的幾種高階程式語言大多能用來撰寫可存取資料庫的應用程式。程式設計人員在開發資料庫應用程式, 通常都是透過資料庫系統的查詢語言或專用於開發資料庫應用程式的應用程式開發介面 (API, Application Programming Interface) 。
軟體 目前常見的資料庫 API 包括:ODBC (Open Database Connectivity)、ADO (ActiveX Data Objects)/ADO.NET、JDBC (Java Database Connectivity) 等。 也有人將 ODBC 、JDBC 等視為應用程式與資料庫管理系統間中介軟體 (Middleware)。
軟體
使用者 資料庫的使用者包含了下列四種: 資料庫設計者 (Database Designer) 資料庫設計者負責整個資料庫系統的設計, 依據使用者的需求設計適當的格式來儲存資料, 同時也要對資料庫使用者的存取權限作適當的規劃。設計完成後就可交由資料庫管理者負責維護管理的工作。 在一般中小型企業中, 資料庫的設計者和管理者通常是同一人;若是大型企業, 則資料庫設計者與管理者可能是兩組不同人員。
使用者 資料庫管理者 (DBA, Database Administrator) 資料庫建立好之後, 便可交由資料庫管理者負責管理及維護。資料庫管理者最主要的工作就是要維護資料庫的正常運作, 並監督、記錄資料庫的操作狀況, 必要時還要修改資料庫的各項設定, 以符合實際需求或提昇效率。
使用者 由於資料庫中的資料對企業來說非常重要, 而資料庫難免會因為人為失誤、硬體故障或其他原因而損壞, 所以資料庫管理者還必須要設定資料庫備份的方法及時機, 並在資料庫受損時能儘快回復。
使用者 除此之外, 資料庫管理者也要負責管理資料庫的使用者, 決定哪些人有權利登入系統、哪些人有權更新資料等。例如最基本的使用者只能查詢資料、需要輸入資料的使用者則具有新增及修改資料的權限、資料備份人員必須具備備份資料的權限...等。
使用者 應用程式設計者 (Application Designer) 應用程式設計者負責撰寫資料庫系統相關的用程式, 例如專門用來查詢資料的應用程式, 讓使用者能以較方便、簡單的介面來使用資料庫;另一方面, 也可以依據組織的需要, 撰寫出有特殊需求的應用程式。
使用者 一般使用者 (End User) 就是只需操作應用程式來存取資料, 而不用煩惱資料庫的管理及維護問題的都屬於一般使用者。再加以細分, 使用者又可分為能自訂查詢方式來取得想要的資料, 或是僅能透過使用者介面取得受限制的資料。
使用者 舉例來說, 當我們透過網路訂購車票、飛機票時, 相關的資訊如班次、張數、座位等都會存到資料庫中, 但這個經過設計的網路訂票介面, 只允許我們讀取及寫入部分的資料, 例如我們不能查看某甲訂幾點的班次、共訂了幾張票, 也不能把某乙訂的兩張票改成一張票。
使用者
使用者 以上所列的四種可算是使用者『角色』, 也就是說, 依實際的使用情況, 每個人可能會扮演一種以上的角色。例如前述在中小型企業資料庫的設計者和管理者可能是同一人;甚至在編制較小的組織中, 管理者也兼負開發應用程式的工作。
15-1-2 為什麼要使用資料庫系統? 檔案系統的缺點 在資料庫系統出現前, 我們可能會將整理過的資料一筆筆的存放在電腦檔案中, 例如學生資料在學生資料檔、課程資料在課程資料檔、教師資料在教師資料檔:
檔案系統的缺點
檔案系統的缺點 學校中各單位因需求不同, 可能各自都有彼此內容大同小異的資料檔, 例如系辦公室的學生資料檔中可能沒有學生的轉系資料、但有記錄他目前的導師是誰;而教務處的學生資料檔中則有學生的轉系資料、但沒有導師資料...。這種情況造成使用檔案系統的一些缺點:
檔案系統的缺點 資料重複:每個單位的資料檔中都記錄了許多基本資料, 造成資源的浪費。 資料維護不易:如果有一筆資料要異動, 例如學生加退選某課程, 可能全校有好幾個檔案都要做相同的異動。 資料可能不一致:如果資料新增或異動的過程中出現一點小差錯, 就會導致各單位存放的資料內容衝突、不一致的情形。
檔案系統的缺點 安全性不足:因資料可能重複出現在多個地方, 相對提高資料被洩露的風險, 實際上也很難要求各單位都提供相同的安全控管。 凡此種種都使得人們需要一種更有效且安全的資料儲存與管理方式, 而這就是資料庫系統的目的。簡單的說, 資料庫系統提供的功能解決了上述的各種問題, 以下簡述使用資料庫系統的目的。
去除不必要的重複性資料 使用資料庫系統的主要目的之一, 就是將資料經過整合後集中存放在同一個處所, 以統一的資料來源將可避免如前述各單位檔案中都有許多重複資料的問題。
集中式管理、確保安全 集中存放的資料, 能做更有效的管理與維護, 例如可有效限制使用者可存取的資料範圍、方便追蹤資料異動的歷程, 這些都大幅提昇資料的保密性及安全性。
集中式管理、確保安全
提昇效率 由於資料都整合集中存放, 使用者就能很迅速地從單一來源取得所需的資料, 不需費心到處找出散落在各處的資料, 提昇工作效率, 大幅降低時間成本, 減少人力浪費。
簡化應用程式複雜度 當資料分散存在多個檔案時, 開發相關的應用程式必須考慮多個檔案的內容、要透過網路連線到多個位置存取檔案、甚至要開啟多種不同格式的檔案, 使開發應用程式的工作變得複雜。 但採用資料庫系統後, 應用程式只需到資料庫管理系統以一致的方式即可存取資料, 不必再自行讀寫資料實際存放的檔案 (格式), 使資料庫程式更容易開發, 程式也較不容易出錯。
簡化應用程式複雜度 此外因為資料是由資料庫管理系統以一致的方式提供給應用程式, 後者不需顧慮資料存放格式, 如此一來除了讓應用程式不需因資料存放方式改變就要改寫程式外, 另一方面也能保護資料存放格式不會被應用程式任意修改。 這種特性稱之為資料獨立性 (Data Independence), 這也是使用檔案系統不易做到的。
隨堂練習 1. 試述使用資料庫系統的目的? 2. 請問組成資料庫系統的四大要素為何? 3. 資料庫的使用者可分成幾類?
15-2 資料模型 各種資料庫管理系統, 依其儲存資料的架構來看, 可分為幾種不同的資料模型 (Data Model), 主要的資料模型有:階層式、網狀式、關聯式及物件導向式等 4 種。 而我們通常也用資料模型來指稱資料庫管理系統的類型, 例如採用關聯式就稱為『關聯式資料庫』、『關聯式資料庫管理系統』。以下就針對這 4 種資料模型做簡單的介紹。
15-2-1 階層式資料模型 階層式資料模型 (Hierarchical Data Model) 是最早出現的資料庫結構, 採用樹狀的結構, 將資料分門別類儲存在不同的階層下。其特點是結構簡單, 適合於建立『一對一』及『一對多』的關係。 舉例來說, 有個出版品資料庫, 其中有出版公司、書籍、作者的資料, 如果使用階層式資料庫, 大概可設計成如下的樣子:
15-2-1 階層式資料模型
15-2-1 階層式資料模型 以上圖為例, 我們可以很清楚地描述出版公司、書籍、作者之間的關係, 上圖中每一筆資料即稱為節點 (node)。在階層式資料模型的樹狀結構中, 『最上層』的節點稱為『根節點』, 其它節點相對於其下層節點時稱為『父節點』;相對於其上層節點時稱為『子節點』。
15-2-1 階層式資料模型 除了根節點外, 任何要加入到結構中的節點, 都必須要有一個父節點, 且『只能』有一個父節點。當一個父節點對應到一個子節點, 即稱為『一對一』的關係;若同一出版公司有更多書籍、同一書籍有多位作者合著, 則可建立『一對多』的節點關係,如下圖所示:
15-2-1 階層式資料模型
15-2-1 階層式資料模型 這個有如金字塔的樹狀結構, 即為階層式資料庫模型的特點。在樹狀結構中, 任一子節點都只能對應到單一個父節點, 不能有多個父節點連到同一個子節點, 也就是不能有『多對一』的關係。
15-2-1 階層式資料模型 由此可發現階層式資料模型的一個缺點:如果有位作者寫了好幾本書, 此時每本書的資料下都會有相同的作者資料 (因為不能讓多本書連到同一作者), 造成資料重複。如果改變資料結構為作者在上、書籍在下, 若出現有兩位作者合寫一本書的情況, 仍是會有相同的問題。
15-2-1 階層式資料模型
15-2-1 階層式資料模型 IBM 公司在 1968 年推出的第一個資料庫管理系統 IMS (Information Management System), 即是採用階層式資料庫模型, 目前 IMS 仍是在 IBM 大型主機上相當普遍的資料庫管理系統。
15-2-2 網狀式資料模型 網狀式資料模型 (Network Data Model) 為階層式資料庫的擴充, 簡單的說, 就是增加了『多對一』的關係, 使得各節點可形成一個複雜的網狀架構。 它的優點是避免了階層式資料庫中資料重複的問題, 缺點是關聯比較複雜, 尤其當資料庫的內容愈來愈多時, 要維護之間的關聯性就會變得非常複雜。
15-2-2 網狀式資料模型 1969 年美國的 CODASYL 組織 (Conference on Data Systems Languages) 定義了網狀式資料模型的規格, Computer Associates 公司的 IDMS (Integrated Database Management System) 即是屬於此類的資料庫管理系統。
15-2-2 網狀式資料模型
15-2-2 網狀式資料模型 在上圖, 我們利用作者姓名可查到他寫過的書、這些書分別由哪些出版社出版的關係。不過, 當節點的數量增加, 彼此的關係就容易變得牽扯不清, 造成維護及使用上的不便。
15-2-3 關聯式資料模型 在 1970 年, E.F. Codd 發表了一篇名為“A Relational Model of Data for Large Shared Data Banks”的論文, 奠定了關聯式資料模型 (Relational Data Model) 的理論基礎, 時至今日, 採用此模型為基礎的關聯式資料庫管理系統 (RDBMS, Relational Database Management System) 早已成為市場主流, 我們平常接觸到的資料庫產品, 幾乎都是關聯式資料庫管理系統。
15-2-3 關聯式資料模型 關聯式資料模型是將資料儲存在邏輯的表格結構中, 這些表格稱為關聯表(Relation), 在關聯表 (或稱資料表) 中存放描述某事物的屬性值 (或稱欄位), 例如人事關聯表中有人的姓名、住址、電話等屬性。 一組相關聯的值稱為一個值組 (Tuple), 比較通俗的名稱就是一筆『記錄 (Record)』, 如下圖就是有三筆人事記錄的關聯表。
15-2-3 關聯式資料模型
15-2-3 關聯式資料模型 在關聯式資料模型中, 關聯表彼此間並無父子、上下關係。但不同關聯表間, 可透過參考 (Reference) 來建立關係, 例如在訂單關聯表中加入參考了客戶關聯表中的『客戶編號』欄位, 就建立了 2 者之間的關係, 而使用者在查詢訂單資料時, 亦能透過此參考關係得知下訂客戶的姓名等資料。
15-2-3 關聯式資料模型
15-2-3 關聯式資料模型 上例中被參考的『客戶編號』欄位就稱為鍵 (Key), 在本例中此鍵為主鍵 (Primary Key), 也就是說在同一關聯表中, 其值是唯一不重複的, 例如不能有兩個客戶使用相同的客戶編號。
15-2-3 關聯式資料模型 所有可當成主鍵的欄位均稱為候選鍵 (Candiate Key), 但每個關聯表中只能有一個主鍵, 例如我們已將客戶編號設為主鍵, 就不能再將其它的候選鍵如客戶名稱也設為主鍵, 但可將它們設為替代鍵 (Alternate Key)。 此外如果關聯表中找不到屬性值沒有重複的單一個欄位, 也可用多個欄位組成一個主鍵。
15-2-3 關聯式資料模型 至於訂單資料中參考到客戶資料主鍵的欄位, 則稱為外部鍵 (Foreign Key), 表示它是對應到其它關聯表的鍵 (也可以參考到自己的主鍵)。 使用關聯式資料庫時, 建立主鍵及外部鍵都是相當重要的工作, 因為透過它們才能讓資料彼此產生關係, 並讓資料的應用更廣泛;此外 DBMS 也會用主鍵及替代鍵來建立索引 (Index), 以加速資料搜尋的速度。
15-2-4 物件導向資料模型 物件導向資料庫 (Object-Oriented Database) 是比較新的資料庫架構, 它是以物件導向的方式來設計資料庫, 其中包含了物件的屬性、方法、類別及繼承等特性。例如開放原始碼的 db4o 資料庫管理系統即屬此類。 在物件導向資料模型中當然是用物件來存放資料, 而其概念與第 13 章介紹的物件導向程式設計相似:
15-2-4 物件導向資料模型 物件含有描述物件屬性的狀態 (state), 而操作物件的方法則稱為行為(behavior)。例如書籍資料有書名、售價等狀態外, 我們也可定義讓書籍印刷量或銷售量增加的『再刷』、『出貨』等行為。
15-2-4 物件導向資料模型
15-2-4 物件導向資料模型 在物件導向資料模型中, 當然也能用既有的類別衍生出新的類別, 以便讓資料庫能存放不同類型的物件。
15-2-4 物件導向資料模型
15-2-4 物件導向資料模型 目前有些關聯式資料庫軟體也加入一部份物件導向資料模型的功能與特性, 這類資料庫管理系統又稱為物件關聯式資料管理系統 (ORDBMS, Object Relational Database Management System )。
隨堂練習 1. 請簡述關聯式資料庫中資料存放的方式? 2. 請試述階層式資料模型與網狀式資料模型的差異。
15-3 資料庫系統的處理架構 隨著電腦技術的演進, 了解資料庫的資料模型後, 接下來我們要介紹如何佈署資料庫系統, 通常都是依照組織的規模、資料量的多寡、使用人數、及預算等多項條件來考量, 常見的有四種架構。
15-3-1 單機架構 在此架構中, 包含一般使用者查詢資料、DBA 管理及維護資料庫等工作, 都是在同一台電腦上完成, 而應用程式的執行及資料存放位置, 都是在單一台電腦上。 此種架構適合在使用者少且資料量也不多的環境下使用, 例如小公司、工作室、或個人使用者建立的資料庫。
15-3-1 單機架構
15-3-2 大型主機/ 終端機架構 在這種架構中, 由一台大型主機負責儲存及處理資料, 所有的用戶端僅供操作, 沒有處理資料的能力, 只能透過鍵盤及終端機傳送和顯示大型主機的訊息。
15-3-2 大型主機/ 終端機架構 這種『集中式』管理的優點在於主機完全掌控系統的資源, 所有管理及維護工作都只要針對主機即可, 環境較單純;在主機上是以分時 (Time-sharing) 處理的方式, 依次處理來自各終端機的要求。 其缺點就是只有一台主機執行所有的資料查詢及處理工作, 當連線的使用者增加時, 就會因為每個使用者分到的處理時間變少, 讓使用者覺得執行的動作變慢, 因此目前這種架構已較少見。
15-3-2 大型主機/ 終端機架構
15-3-3 主從式架構 隨著個人電腦技術的突飛猛進、軟體的功能愈來愈強以及網路的普遍, 因此不再由單一的大型主機來負責所有的工作。 基於分工的原則, 資料庫管理系統仍是在一台處理效能較強的伺服器電腦上執行, 而使用者所執行的資料庫應用程式, 則是在每個人自己的個人電腦上執行。
15-3-3 主從式架構 此時即稱執行應用程式的是用戶端 (Client), 而資料庫管理系統所在的則稱為伺服端 (Server);用戶端負責向伺服端『發出要求』 (例如要求查詢某本書的資料), 而伺服器則負責回應要求 (傳回資料或回應找不到)。
15-3-3 主從式架構
15-3-3 主從式架構 與大型主機/ 終端機架構相比, 我們可將主從式架構視為將『主機』的工作分成兩部份, 其中一份留在『伺服器』上執行、另一份則移到個人電腦上執行, 因此在這種架構下, 『主機』能保留更多的資源來處理更多的使用者連線, 整個資料庫系統的效能也有所提昇。
15-3-3 主從式架構 在使用者較少及資料運算需求不大的環境, 此架構相當於可用多台較便宜的個人電腦來取代需高額預算的大型主機及終端機組合, 因此在個人電腦應用起飛的年代, 許多中小企業都採行主從式資料處理架構。
邏輯上的主從式架構 以上是以程式執行時的實體 (Physical) 位置來描述主從式架構, 但我們也可用邏輯 (Logical)的觀點來檢視資料庫系統中的元件, 例如可分成資料庫管理系統和資料庫應用程式:
邏輯上的主從式架構
邏輯上的主從式架構 若這兩個元件是在同一電腦上執行, 在實體上就是前面所述的單機架構;但若兩個元件是在不同的電腦上執行, 實體架構就是主從式架構。
15-3-4 多層式架構 隨著網際網路的流行, 企業也將各種應用移植到網際網路上執行, 此時多層式(N-tier) 的處理架構就流行起來。以較常見的三層式 (3-tier) 架構為例, 就是在用戶端和伺服端之間加再入一層, 例如透過瀏覽器瀏覽網路書店, 網路書店可能有個負責管理所有書籍及銷售資料的資料庫管理系統, 然後還有個負責提供網頁服務的 Web 伺服器:
15-3-4 多層式架構
15-3-4 多層式架構 中間的一層通常稱為應用程式伺服器 (Application Server), 以上圖中的 Web 伺服器為例, 它除了提供基本的 HTTP 伺服器功能以回應來自瀏覽器的要求, 通常也需以動態網頁的技術將從資料庫中取出的資料, 以適當的方式展現在網頁之中。 換言之它提供了資料庫應用程式的主功能, 而用戶端的瀏覽器, 只單純負責顯示網頁功能。
15-3-4 多層式架構 在此種架構下, 如果網站的負荷較大, 我們還可多架幾個 Web 伺服器, 以提供使用者較佳的瀏覽效率, 但仍保持一台資料庫伺服器, 如圖 15-19 所示。
15-3-4 多層式架構
15-3-4 多層式架構 為了因應更複雜的應用, 或是為了提昇效率, 我們也能將中間的應用程式伺服器工作再分散到多個伺服器, 建立多層式的資料庫應用架構。例如讓 Web 伺服器執行單純的網頁伺服器工作, 而再加入一台專用的應用程式伺服器, 來做購物車或訂單的處理。
15-3-4 多層式架構
邏輯架構與實體架構 同樣的, 我們也能由邏輯的觀點來檢視多層式的架構:
邏輯架構與實體架構 如果我們將這 4 個元件都放在不同的電腦上執行, 在實體上也是個 4 層式的架構; 但若將右邊的 3 個元件都放在同一個伺服器上, 實體上就成為主從式的應用架構。
隨堂練習 1. 請討論主從式架構的優點? 2. 網路書店若將應用程式伺服器和資料庫伺服器放在同一台電腦上執行, 有什麼樣的優缺點?
動態網頁技術與資料庫應用 本文中提到, 在應用伺服器上需使用動態網頁來存取資料庫及呈現處理結果。此處所指的動態網頁並不是指網頁的內容會『動』這種視覺效果, 而是指網頁的內容, 是依瀏覽者的行為『動態產生』的。 使用 12-2-1 節介紹的 HTML 來編寫網頁時, 伺服器端只是單純將網頁內容傳送到使用的電腦上, 然後由瀏覽器來解析網頁中的 HTML 標籤, 並顯示網頁內容。
動態網頁技術與資料庫應用 如果網頁中有使用到JavaScript、Java Applet、Flash 等程式或物件, 這些『動態內容』都是在使用者的電腦上執行, 就算我們可能覺得網頁內容不同, 但其實收到的內容都是完全一樣的 (例如不同電腦連到同一 Flash 益智遊戲網頁, 每盤遊戲內容雖不同, 但下載到使用者電腦上的網頁、Flash 物件完全相同)。
動態網頁技術與資料庫應用 但使用動態網頁技術就不同了, 例如當我們連上某家網路書店的網站 (應用程式伺服器), 輸入帳號/密碼後, 動態網頁即可根據銷售資料庫的記錄, 將符合我們興趣的新書加到網頁之中, 讓每個人都會看到不同的首。
動態網頁技術與資料庫應用 當每個人按下購物車這個超連結時, 伺服器也不會傳一份相同的購物車網頁給所有人, 而是由動態網頁程式先到資料庫中讀取該消費者先前已放入購物車的書籍清單, 然後依該份清單計算出本數、金額、甚至視情況計算折扣等, 動態產生一份網頁內容, 再由伺服器傳送到消費者的電腦, 所以每個人看到的購物車網頁都不相同。
動態網頁技術與資料庫應用
動態網頁技術與資料庫應用 目前主流的動態網頁技術有以下三種: ASP (Active Server Pages):由微軟公司所開發出的技術, 並整合至該公司 Windows 作業系統內附的 IIS 網頁伺服器中。ASP 的特色是它不是一種新的語言, 而是提供一組有關網頁伺服器運作的物件, 讓程式設計人員可用以產生動態的網頁內容。
動態網頁技術與資料庫應用 大多的 ASP 網頁都是使用 VBScript 語言來撰寫, 有些則是用 JScript、Perl 等語言。新一代的ASP.NET則是依微軟公司新的 .NET Framework 開發架構所設計的, 目前可用C#、VB.NET 等語言開發 ASP.NET 程式。
動態網頁技術與資料庫應用 PHP (PHP: Hypertext Preprocessor):屬於開放原始碼 (Open Source) 的 PHP , 只要網頁伺服器支援解析 PHP 網頁的功能, 就可以使用此種網頁。PHP 的語法近似 C 語言, 因此學過C 語言的人通常都能很快學會 PHP。
動態網頁技術與資料庫應用 PHP 縮寫的第一個 P 就是 PHP, 雖然令人感覺沒有解釋到底什麼是 P, 但這也是開放原始碼社群喜歡玩的一種遞迴頭字語 (Recursive Acronym) 的命名遊戲。例如 GNU 的全名是“GNU’s Not Unix”、EINE 的全名是 “EINE Is Not EMACS” 等等。
動態網頁技術與資料庫應用 同樣是開放原始碼的 Apache 網頁伺服器可以支援 PHP 功能, 不過在 IIS 上只要安裝免費的 PHP 軟體套件之後, 亦可支援 PHP。在 Unix/Linux 平台上, "Apache + PHP +MySQL" 幾乎已成為架站的標準套裝組合, 也就是用 Apache 網頁伺服器, 再加上 PHP 網頁和 MySQL資料庫伺服器, 就能建立完整的應用程式伺服器解決方案。
動態網頁技術與資料庫應用 JSP (JavaServer Pages):是昇陽公司所提出的技術, 使用 Java 語法, 並且可搭配同樣以Java 語言開發、在伺服器端執行的 Servlet (一般在網頁中看到的 Java 程式的 Java Applet 是在用戶端電腦上執行) 及 JavaBeans (事先編譯好的 Java 元件)。
動態網頁技術與資料庫應用 上述三種技術的網頁副檔名都恰好為其名稱, 所以當您下次在瀏覽器的網址列看到 XXX.asp 的網頁名稱時, 就知道這個網頁 (或整個網站) 是使用 ASP 的動態網頁技術(ASP.NET 的附檔名則為 .aspx)。
15-4 資料庫管理系統的基本功能 在第 15-1 節中提過, 資料庫管理系統 (DBMS) 就是管理資料庫的軟體系統, 它們負責資料庫的建立、資料存取、權限設定、資料備份、操作的監督與記錄...等工作, 底下我們就再進一步詳述資料庫管理系統所應具備的基本功能。
15-4 資料庫管理系統的基本功能 資料定義:DBMS 必須能夠充分定義並管理各種類型的資料項目, 例如關聯式資料庫管理系統必須提供建立資料庫、資料表、定義各欄位的資料型別、限制, 以及各資料表間的參考關係等能力。
15-4 資料庫管理系統的基本功能 資料處理:DBMS 必須提供使用者對資料庫存取的能力, 包括新增、修改、查詢與刪除的基本功能。有時 DBMS 提供的功能雖然完善, 但並不適合一般使用者操作, 這時就需要程式設計人員另外撰寫親和性較高的用戶端應用程式, 以供一般使用者操作。
15-4 資料庫管理系統的基本功能 資料庫語言:DBMS 通常需提供一套完整的資料庫管理系統語言, 讓外界可透過此語言與 DBMS 溝通, 執行所要的功能, 例如 RDBMS、ORDBMS 目前都是使用結構化查詢語言 (SQL, Structured Query Language)。資料庫語言又可細分為 DDL 、DML 、DCL 三種:
15-4 資料庫管理系統的基本功能 DDL:資料定義語言(Data Definition Language), 用來定義資料存放方式的相關敘述。
15-4 資料庫管理系統的基本功能 DML:資料處理語言(Data Manipulation Language), 用來操作資料的相關敘述。
15-4 資料庫管理系統的基本功能 DCL:資料控制語言(Data Control Language), 用來控制交易 (後詳) 進行方式及設定資料庫存取權限的敘述。
15-4 資料庫管理系統的基本功能 資料安全:DBMS 應該具備設定使用者帳戶、密碼及權限的功能, 讓每一個使用者只能存取授權範圍內的資料, 以防止機密資料外洩給一般使用者、避免資料遭受任何有意或無意的破壞等。 資料備份與回復:DBMS 必須提供方便的資料備份 (Backup) 還原 (Restore) 功能, 如此在資料庫不幸意外毀損時, 還可還原到備份資料時的狀況, 以減少損失。
15-4 資料庫管理系統的基本功能 交易管理:在資料庫的應用中, 有許多都是要同時變動多筆資料, 才算完成一項動作的情況。例如我們去自動櫃員機轉帳付款給上網拍賣的賣家, 若銀行的系統先將我們的帳戶扣款, 才發現無法順利將金額加到對方的帳戶, 此時交易 (Transaction) 就算失敗, 並將先前扣款動作取消。若金額順利加到對方帳戶, 交易才算成功, 修改的結果才能確實寫入資料庫中。
15-4 資料庫管理系統的基本功能 並行控制:如果在交易進行的過程中, 有別的交易也要存取同一筆資料, 就需透過並行控制 (Concurrency) 以避免出錯。例如在我們轉帳給別人的過程中, 又恰好有第三者因買了我們網拍的物品要轉帳過來, 若交易過程中因跨行處理速度不同, 導致後一筆交易先完成, DBMS 必須能分辨交易中各步驟的順序, 以免最後金額結算錯誤。
15-4 資料庫管理系統的基本功能
15-4 資料庫管理系統的基本功能 此外, 資料庫的處理效率也非常重要, 尤其是在資料量很大或使用者很多的情況, 資料庫若因效率不佳而導致存取速度變慢, 亦會嚴重影響到操作人員的工作效率。 綜合上述, 我們可將 DBMS 切割成是數個不同功能的模組所組成的一套系統。
15-4 資料庫管理系統的基本功能
隨堂練習 1. 除了轉帳外, 請再試舉一個生活中需要做交易管理的例子。
特別企劃 大量資料的應用 ― 資料倉儲、 資料探勘與 NOSQL 資料庫 隨著資料庫的應用愈來愈普遍, 企業所收集、累積的資料量愈來愈多, 這些龐大的資料是要把它們視為沒用的垃圾或有用的資產呢?為了讓長久累積的資料能發揮效用, 新的資料庫應用就因應而生了, 目前最流行的就屬資料倉儲 (Data Warehousing) 與資料探勘 (Data Mining, 或稱資料採礦) 。
大量資料的應用 ― 資料倉儲、 資料探勘與 NOSQL 資料庫
資料倉儲 資料倉儲 (Data Warehousing) 的應用, 是為了讓企業能根據既有的資料去做進一步的分析, 以供決策者擬定決策。簡單的說, 資料倉儲就是一個比較特殊的資料庫。其特殊之處包括:
資料倉儲 資料倉儲儲存的資料相當大, 因為它通常包含長年累月下來的企業資料。此外,它可能也包括了其它原本未存放在企業資料庫的資料, 例如原本是存在試算表、文件檔案中等不同格式來源的資料, 必須由 DBA 經過整理、整合後轉存到資料倉儲中存放。
資料倉儲 資料倉儲雖是企業長久以來資料的集合, 但不必然包含企業實際營運時所用的所有資料。例如業務部的資料庫中會記錄業務代表的家中住址、電話、學經歷等多項資料, 但在做全國業務代表的績效表現分析, 其住址、電話等都是不必要的, 因此就不需將這類不必要的資料也放到資料倉儲中。
資料倉儲
資料倉儲 資料倉儲建立起來後, 即可透過線上分析處理(OLAP, On-Line Analytical Processing)工具由其中取出資料進行分析。目前有些資料庫管理系統本身, 也提供 OLAP 相關工具, 讓使用者不需另外開發功能複雜的分析工具, 也能使用資料倉儲來做決策分析。
資料倉儲
資料探勘 透過資料倉儲及 OLAP 工具可幫助決策者瞭解一些統計上的訊息, 像是本季獲利最高的產品, 決策者進而可做一些銷售上的決策。例如向供應商增購該產品, 要業務部力推該項產品等。 但決策者無法知道該向哪些目標客戶推銷這個產品, 才能達到事倍功半的效果, 此時就需使用資料探勘 (Data Mining) 的技術了。
資料探勘 簡單地說, 資料探勘是以用特定的演算法, 將資料倉儲、或 OLAP 系統中的資料再做進一步的統計和推演, 以找出特定的模式 (pattern), 並據以訂定策略。 舉例來說, 我們至賣場購物時, 收銀台即會記錄每位客戶所購買的貨品種類、數量等, 將這些資料整理、集合存入資料倉儲中, 再用資料探勘技術分析, 或許會『發現』原來買可樂的客戶有 8 成也會買起司。
資料探勘 因此日後賣場要針對起司做促銷, 就會選擇在可樂架上放置起司的廣告以吸引顧客注意, 甚至也可能舉辦買起司送可樂的活動。 目前在大企業使用資料倉儲、資料探勘已愈來愈普遍, 當您下次在便利商店看到雜誌架上有促銷咖啡的廣告時, 別懷疑, 那就是便利商店總公司做資料探勘的結果!
資料探勘
NOSQL 資料庫 關聯式資料庫管理系統由於具備使用方便 (透過一致性的 SQL 查詢語言、API)、能維護資料的完整性等特色, 因此是一般企業、組織中資料庫應用的主流。然而目前也出現一種新潮流, 即非關聯式的 NOSQL 資料庫。
NOSQL 資料庫 在網際網路等較新的應用領域, 因為資料量極大, 並不適合採用關聯式模型。例如像Google 的搜尋引擎, 每天自動上網搜尋全球的網頁、然後要記錄網址/內容/日期、分析內容製作關鍵字索引等, 還會根據使用者查詢時的選擇,調整搜尋結果的排名...等。 因此每天產生及異動的資料量非常多, 若要像處理商業交易一般注重資料關聯性、完整性, 將會導致效能偏低, 甚至系統難以使用情況。
NOSQL 資料庫 類似的例子還包括Facebook 之類的社交網站, 上百萬使用者的互動, 每天都會產生數 GB 甚至數百 GB 的資料。為了因應這類特殊需求, 就出現 NOSQL 的概念。
NOSQL 資料庫 NOSQL 是 "Not Just SQL" 的意思, 較正確的說法則應是非關聯式(Not Relational) 資料庫。簡單的說, 就是利用非關聯式的方式來儲存資料, 此外還具備處理快速、容易擴充等特點。NOSQL 比較像是 Web 2.0, 是個概念性的名詞, 而非指特定的產品或技術。
NOSQL 資料庫 對於 NOSQL 資料庫應用, 例如 Google 搜尋引擎、Facebook、網路遊戲、或其它非網路的應用, 各家廠商的需求不一定相同, 因此目前 NOSQL 資料庫是百家齊鳴, 許多公司都是依其需求, 開發自己的 NOSQL 資料庫產品, 例如 Google 的 BigTable、Facebook 的 Cassandra。
NOSQL 資料庫 雖然目前 NOSQL 資料庫相當多, 不過依其運作方式可將之歸類為下列幾種: Key-Value Store:也就是以儲存成對的 Key-Value 『( 鍵-值』) 的簡單方式來儲存資料, Amazon 的 Dynamo 就是採用此種方式。 Wide Column Store:採用表格的形式儲存資料, 或可視為 Key-Value Store 的一種變化, 亦即每個 Key 會對應到多個欄位的 Value, Google 的 BigTable 就屬於此類。
NOSQL 資料庫 Document-Oriented Database (文件導向資料庫):有點類似 Key-Value Store, 但儲存的不是 Value, 而是一整份文件, 因為目前有許多資料本身都是某種型式的資料庫, 像是 XML、JSON 文件, 如果將之轉換成資料庫本身的資料格式, 反而要花費許多時間。 此類型的主流產品包括 MongoDB、CouchDB、RavenDB 等, 其中 MongoDB 被主要的開放原始碼網站 SourceForge 用來儲存其網頁等相關資料。
NOSQL 資料庫 Graph Database (圖學資料庫):源自於數學的圖學理論, 資料就像是圖中的一個節點, 而節點之間可用不同的關係連繫起來, 構成圖論中的圖形 (graph)。Twitter 所開發的FlockDB 即屬於此類資料庫。
NOSQL 資料庫 此外, 15-2-4 節提到的物件導向資料庫, 也被視為 NOSQL 資料庫的一種, 只是因為其是出現在 NOSQL 這個名詞被提出之前, 因此反而較不受矚目。 由於各種新興的網路服務都成為話題, 使得 NOSQL 資料庫產品及技術也成為網路技術人員的熱門話題, 但這不表示關聯式資料庫的地位會輕易被取代, 畢竟不同的資料庫應用有不同的需求, NOSQL 和關聯式資料庫各有其適用場合, 不會有誰被誰取代的問題。
NOSQL 資料庫 在 http://NOSQLdatabase.org/ 網站上可看到有上百種 NOSQL 資料庫產品, 其中有許多都是採用開放原始碼的授權。